找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 467|回复: 2

[其他]:天正6下Lisp编程

[复制链接]
发表于 2003-11-23 14:39:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
看到wharan朋友写了两个天正6下的程序,也忍不住试了一把。首先看了看TArch6 目录,在SYS目录下有 dxf参考.doc 里面是常用实体的DXF组码,有了这个就可以使用 entmake 制造实体了。
既然用Lisp编程当然有得力的 API 将达到事半功倍的效果了,在天正下就用天正的二维核心 tch3_kernal.arx 中提供的就可以。
介绍几个关于程序结构的使用函数

  1. 1  begin 标记程序开始
  2. 调用方法: (begin) & (begin lyrname)
  3. 2 end  标记程序结束,与 begin 配对使用
  4. 调用方法:(end)
  5. 3 ucson ucsoff 配对使用,功能就不用说了
  6. 4 getss 将选择集放入内部数据库 (不知道最多可以存几个)
  7. 调用方法:(getss ss 0)
  8. 5 namess 依次获取内部数据库实体
  9. 调用方法: (namess 0) 配合 getss 使用
  10. 6 socas 获取内部数据库实体的组码值
  11. 调用方法:(socas 0) ->可能返回 "LINE"
  12. 7 getent 将实体放入内部数据库
  13. 调用方法:(getent <ent>)
  14. 说明:用gete获取的实体,ent可选
  15. 8 modent 修改内部数据库实体的组码
  16. 调用方法:(modent code var)
  17. Sample: (modent 10 '(0 . 0. 0.))
复制代码

以上说明仅对本人使用的天正6,可能函数名称在各版中有所不同,请自行对照。
用上面的函数修改坐标参数可以这样(当然用特性也很方便)

  1. (getent (car (entsel)) ;;拾取坐标
  2. (modent 40 4);;修改字高
复制代码

以下是一个批量标注的例子(运行环境 AutoCAD 2004 + Tarch6)

  1. ;;-----------------------------------------------
  2. ;; CDNC5-02.LSP
  3. ;; Bill Kramer
  4. ;; Find all intersections between objects in
  5. ;; the selection set SS.
  6. ;; Process - Create drawing with intersecting lines and lwpolylines.
  7. ;;           Load function set
  8. ;;           Run command function INTLINES
  9. ;;           Intersections are marked with POINT objects on current layer
  10. (defun INTLINES        (ss / SSL                ;length of SS
  11.                  PTS                        ;returning list
  12.                  AOBJ1                        ;Object 1
  13.                  AOBJ2                        ;Object 2
  14.                  N1                        ;Loop counter
  15.                  N2                        ;Loop counter
  16.                  IPTS                        ;intersects
  17.                  A N NN        HOLDOSMODE)
  18.   (setq        N1  0                                ;index for outer loop
  19.         SSL (sslength SS)
  20.   )                                        ; Outer loop, first through second to last
  21.   (while (< N1 (1- SSL))                ; Get object 1, convert to VLA object type
  22.     (setq AOBJ1        (ssname SS N1)
  23.           AOBJ1        (vlax-ename->vla-object AOBJ1)
  24.           N2        (1+ N1)
  25.     )                                        ;index for inner loop
  26. ;;; Inner loop, go through remaining objects
  27.     (while (< N2 SSL)                        ; Get object 2, convert to VLA object
  28.       (setq AOBJ2 (ssname SS N2)
  29.             AOBJ2 (vlax-ename->vla-object AOBJ2)
  30. ;;;Find intersections of Objects
  31.             IPTS  (vla-intersectwith
  32.                     AOBJ1
  33.                     AOBJ2
  34.                     0
  35.                   )                        ; variant result
  36.             IPTS  (vlax-variant-value IPTS)
  37.       )
  38. ;;;Variant array has values?
  39.       (if (> (vlax-safearray-get-u-bound IPTS 1) 0)
  40.         (progn                                ;array holds values, convert it
  41.           (setq        IPTS                        ;to a list.
  42.                  (vlax-safearray->list IPTS)
  43.           )
  44. ;;;Loop through list constructing points
  45.           (while (> (length IPTS) 0)
  46.             (setq PTS  (cons (list (car IPTS)
  47.                                    (cadr IPTS)
  48.                                    (caddr IPTS)
  49.                              )
  50.                              PTS
  51.                        )
  52.                   IPTS (cdddr IPTS)
  53.             )
  54.           )
  55.         )
  56.       )
  57.       (setq N2 (1+ N2))
  58.     )                                        ;inner loop end
  59.     (setq N1 (1+ N1))
  60.   )                                        ;outer loop end
  61.   pts
  62.                                         ;(princ)
  63. )
  64. (if (not (member "tch3_kernal.arx" (arx)))
  65.   (arxload "tch3_kernal.arx")
  66. )
  67. (defun c:tst (/ ss ptl ptl1)
  68.   (setvar "smdecho" 0)
  69.   (if (setq ss (ssget '((0 . "*line,arc,circle"))))
  70.     (progn
  71.       (begin)
  72.       (setq ptl         (INTLINES ss)
  73.             ptl1 (mapcar '(lambda (x) (mapcar '+ x '(1200. 1200. 0.)))
  74.                          ptl
  75.                  )
  76.       )
  77.       (mapcar '(lambda (a b) (command "T61_TCOORD" a "" b)) ptl ptl1)
  78.       (end)
  79.     )
  80.   )
  81.   (princ)
  82. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2003-11-23 15:28:49 | 显示全部楼层
看不懂,就像天书一样。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2003-11-23 15:33:18 | 显示全部楼层
最初由 hcheli 发布
[B]看不懂,就像天书一样。 [/B]

看多了就成破书了*-*1
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-10 16:11 , Processed in 0.410128 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表