马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
看到wharan朋友写了两个天正6下的程序,也忍不住试了一把。首先看了看TArch6 目录,在SYS目录下有 dxf参考.doc 里面是常用实体的DXF组码,有了这个就可以使用 entmake 制造实体了。
既然用Lisp编程当然有得力的 API 将达到事半功倍的效果了,在天正下就用天正的二维核心 tch3_kernal.arx 中提供的就可以。
介绍几个关于程序结构的使用函数
- 1 begin 标记程序开始
- 调用方法: (begin) & (begin lyrname)
- 2 end 标记程序结束,与 begin 配对使用
- 调用方法:(end)
- 3 ucson ucsoff 配对使用,功能就不用说了
- 4 getss 将选择集放入内部数据库 (不知道最多可以存几个)
- 调用方法:(getss ss 0)
- 5 namess 依次获取内部数据库实体
- 调用方法: (namess 0) 配合 getss 使用
- 6 socas 获取内部数据库实体的组码值
- 调用方法:(socas 0) ->可能返回 "LINE"
- 7 getent 将实体放入内部数据库
- 调用方法:(getent <ent>)
- 说明:用gete获取的实体,ent可选
- 8 modent 修改内部数据库实体的组码
- 调用方法:(modent code var)
- Sample: (modent 10 '(0 . 0. 0.))
复制代码
以上说明仅对本人使用的天正6,可能函数名称在各版中有所不同,请自行对照。
用上面的函数修改坐标参数可以这样(当然用特性也很方便)
- (getent (car (entsel)) ;;拾取坐标
- (modent 40 4);;修改字高
复制代码
以下是一个批量标注的例子(运行环境 AutoCAD 2004 + Tarch6)

- ;;-----------------------------------------------
- ;; CDNC5-02.LSP
- ;; Bill Kramer
- ;; Find all intersections between objects in
- ;; the selection set SS.
- ;; Process - Create drawing with intersecting lines and lwpolylines.
- ;; Load function set
- ;; Run command function INTLINES
- ;; Intersections are marked with POINT objects on current layer
- (defun INTLINES (ss / SSL ;length of SS
- PTS ;returning list
- AOBJ1 ;Object 1
- AOBJ2 ;Object 2
- N1 ;Loop counter
- N2 ;Loop counter
- IPTS ;intersects
- A N NN HOLDOSMODE)
- (setq N1 0 ;index for outer loop
- SSL (sslength SS)
- ) ; Outer loop, first through second to last
- (while (< N1 (1- SSL)) ; Get object 1, convert to VLA object type
- (setq AOBJ1 (ssname SS N1)
- AOBJ1 (vlax-ename->vla-object AOBJ1)
- N2 (1+ N1)
- ) ;index for inner loop
- ;;; Inner loop, go through remaining objects
- (while (< N2 SSL) ; Get object 2, convert to VLA object
- (setq AOBJ2 (ssname SS N2)
- AOBJ2 (vlax-ename->vla-object AOBJ2)
- ;;;Find intersections of Objects
- IPTS (vla-intersectwith
- AOBJ1
- AOBJ2
- 0
- ) ; variant result
- IPTS (vlax-variant-value IPTS)
- )
- ;;;Variant array has values?
- (if (> (vlax-safearray-get-u-bound IPTS 1) 0)
- (progn ;array holds values, convert it
- (setq IPTS ;to a list.
- (vlax-safearray->list IPTS)
- )
- ;;;Loop through list constructing points
- (while (> (length IPTS) 0)
- (setq PTS (cons (list (car IPTS)
- (cadr IPTS)
- (caddr IPTS)
- )
- PTS
- )
- IPTS (cdddr IPTS)
- )
- )
- )
- )
- (setq N2 (1+ N2))
- ) ;inner loop end
- (setq N1 (1+ N1))
- ) ;outer loop end
- pts
- ;(princ)
- )
- (if (not (member "tch3_kernal.arx" (arx)))
- (arxload "tch3_kernal.arx")
- )
- (defun c:tst (/ ss ptl ptl1)
- (setvar "smdecho" 0)
- (if (setq ss (ssget '((0 . "*line,arc,circle"))))
- (progn
- (begin)
- (setq ptl (INTLINES ss)
- ptl1 (mapcar '(lambda (x) (mapcar '+ x '(1200. 1200. 0.)))
- ptl
- )
- )
- (mapcar '(lambda (a b) (command "T61_TCOORD" a "" b)) ptl ptl1)
- (end)
- )
- )
- (princ)
- )
|