找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1396|回复: 2

[他山之石] 制造实体类

[复制链接]
发表于 2014-8-29 08:07:12 | 显示全部楼层 |阅读模式

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

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

×
来自网络整理, lib.vlx 已包含
  1. (defun Arc:Make        (pcen r sp ep)
  2.   (entmakex (list '(0 . "ARC")
  3.                   '(100 . "AcDbEntity")
  4.                   '(100 . "AcDbArc")
  5.                   (cons 10 pcen)
  6.                   (cons 40 r)
  7.                   (cons 50 (angle pcen sp))
  8.                   (if (< (angle ep pcen) (angle sp pcen))
  9.                     (cons 51 (+ pi pi (angle pcen ep)))
  10.                     (cons 51 (angle pcen ep))
  11.                   )
  12.             )
  13.   )
  14. )
  15. (defun Text:Make (p string an height)
  16.   (entmakex (list '(0 . "TEXT")
  17.                   '(100 . "AcDbEntity")
  18.                   '(100 . "AcDbText")
  19.                   (cons 10 p)
  20.                   (cons 1 string)
  21.                   (cons 40 an)
  22.                   (cons 50 height)
  23.             )
  24.   )
  25. )
  26. ;;;---------------------------------------------------------------;
  27. ;;;功能: 制造点                                                   ;
  28. ;;;输入: pts --- 点或点表                                         ;
  29. ;;;输出: 实体或实体表                                             ;
  30. ;;;---------------------------------------------------------------;
  31. (defun Point:Make (pts / mkpt)
  32.   (defun mkpt (p)
  33.     (entmakex (list '(0 . "POINT")
  34.                     '(100 . "AcDbEntity")
  35.                     '(100 . "AcDbPoint")
  36.                     (cons 10 p)
  37.               )
  38.     )
  39.   )
  40.   (if (listp (car pts))
  41.     (mapcar '(lambda (x)
  42.                (mkpt x)
  43.              )
  44.             pts
  45.     )
  46.     (mkpt pts)
  47.   )
  48. )
  49. ;;;---------------------------------------------------------------;
  50. ;;;功能: 制造圆                                                   ;
  51. ;;;输入: pts --- 点或点表 radius --- 半径                         ;
  52. ;;;输出: 实体或实体表                                             ;
  53. ;;;---------------------------------------------------------------;
  54. (defun Circle:Make (pts radius / mkcircle)
  55.   (defun mkcircle (p)
  56.     (entmakex (list '(0 . "Circle")
  57.                     '(100 . "AcDbEntity")
  58.                     '(100 . "AcDbCircle")
  59.                     (cons 10 p)
  60.                     (cons 40 radius)
  61.               )
  62.     )
  63.   )
  64.   (if (listp (car pts))
  65.     (mapcar '(lambda (x) (mkcircle x)) pts)
  66.     (mkcircle pts)
  67.   )
  68. )
  69. ;;;---------------------------------------------------------------;
  70. ;;;功能: 制造线                                                   ;
  71. ;;;输入: pts --- 点表                                             ;
  72. ;;;输出: 实体或实体表                                             ;
  73. ;;;---------------------------------------------------------------;
  74. (defun Line:Make (pts)
  75.   (mapcar '(lambda (x y)
  76.              (entmakex (list '(0 . "LINE")
  77.                              '(100 . "AcDbEntity")
  78.                              '(100 . "AcDbLine")
  79.                              (cons 10 x)
  80.                              (cons 11 y)
  81.                        )
  82.              )
  83.            )
  84.           pts
  85.           (cdr pts)
  86.   )
  87. )
  88. ;;;---------------------------------------------------------------;
  89. ;;;功能: 制造多段线                                               ;
  90. ;;;输入: pts --- 点表(2D)                                         ;
  91. ;;;输出: 实体                                                     ;
  92. ;;;---------------------------------------------------------------;
  93. (defun Pline:Make (pts tf)
  94.   (entmakex (append '((0 . "LWPOLYLINE")
  95.                       (100 . "AcDbEntity")
  96.                       (100 . "AcDbPolyline")
  97.                      )
  98.                     (list (cons 90 (length pts))
  99.                           (cons        70
  100.                                 (if tf
  101.                                   1
  102.                                   0
  103.                                 )
  104.                           )
  105.                     )
  106.                     (mapcar '(lambda (x)
  107.                                (list 10 (car x) (cadr x))
  108.                              )
  109.                             pts
  110.                     )
  111.             )
  112.   )
  113. )
  114. ;;;---------------------------------------------------------------;
  115. ;;;功能: 制造圆环                                                 ;
  116. ;;;输入: pts --- 点或点表 r1 -- 内径  r2 --- 外径                 ;
  117. ;;;输出: 实体                                                     ;
  118. ;;;---------------------------------------------------------------;
  119. (defun Dount:Make (pts r1 r2 / mkdout)
  120.   (defun mkdout        (p r1 p2 / d sp ep)
  121.     (setq d  (* (+ (abs r1) (abs r2)) 0.5)
  122.           sp (polar p 0. d)
  123.           ep (polar p pi d)
  124.     )
  125.     (entmakex (list '(0 . "LWPOLYLINE")
  126.                     '(100 . "AcDbEntity")
  127.                     '(100 . "AcDbPolyline")
  128.                     '(90 . 2)
  129.                     '(70 . 1)
  130.                     (cons 43 (abs (- r2 r1)))
  131.                     (cons 10 (list (car sp) (cadr sp)))
  132.                     '(42 . 1.0)
  133.                     (cons 10 (list (car ep) (cadr ep)))
  134.                     '(42 . 1.0)
  135.               )
  136.     )
  137.   )
  138.   (if (listp (car pts))
  139.     (mapcar '(lambda (x) (mkdout x r1 r2)) pts)
  140.     (mkdout pts r1 r2)
  141.   )
  142. )
  143. ;;;---------------------------------------------------------------;
  144. ;;;功能: 制造构造线                                               ;
  145. ;;;输入: 点1 点2                                                  ;
  146. ;;;输出: 实体                                                     ;
  147. ;;;---------------------------------------------------------------;
  148. (defun Xline:Make (p1 p2)
  149.   (entmakex (list '(0 . "XLINE")
  150.                   '(100 . "AcDbEntity")
  151.                   '(100 . "AcDbXline")
  152.                   (cons 10 p1)
  153.                   (cons 11 (polar p1 (angle p1 p2) 1.))
  154.             )
  155.   )
  156. )
  157. ;;;---------------------------------------------------------------;
  158. ;;;功能: 制造射线                                                 ;
  159. ;;;输入: 点1 点2                                                  ;
  160. ;;;输出: 实体                                                     ;
  161. ;;;---------------------------------------------------------------;
  162. (defun Ray:Make        (p1 p2)
  163.   (entmakex (list '(0 . "Ray")
  164.                   '(100 . "AcDbEntity")
  165.                   '(100 . "AcDbRay")
  166.                   (cons 10 p1)
  167.                   (cons 11 (polar p1 (angle p1 p2) 1.))
  168.             )
  169.   )
  170. )
  171. (defun Solid:Make (p1 p2 p3 p4)
  172.   (entmakex (list '(0 . "Solid")
  173.                   '(100 . "AcDbEntity")
  174.                   '(100 . "AcDbSolid")
  175.                   (cons 10 p1)
  176.                   (cons 11 p2)
  177.                   (cons 12 p3)
  178.                   (cons 13 p4)
  179.             )
  180.   )
  181. )
  182. (defun Trace:Make (p1 p2 p3 p4)
  183.   (entmakex (list '(0 . "TRACE")
  184.                   '(100 . "AcDbEntity")
  185.                   '(100 . "AcDbTrace")
  186.                   (cons 10 p1)
  187.                   (cons 11 p2)
  188.                   (cons 12 p3)
  189.                   (cons 13 p4)
  190.             )
  191.   )
  192. )
  193. ;|
  194. (defun Ellipse:Make (p p1 p2)
  195.   (entmakex
  196.     (list
  197.       '(0 . "ELLIPSE")
  198.       '(100 . "AcDbEnity")
  199.       '(100 . "AcDbEllipse")
  200.       (cons 10 p)
  201.       (cons 11 (mapcar '- p1 p))
  202.       (cons 40 (/ (distance p p1) (distance p p2)))
  203.       '(41 . 0.)
  204.       (cons 42 (+ pi pi))
  205.     )
  206.   )
  207. )
  208. |;
  209. (defun Insert:Make (bn p scl an)
  210.   (entmakex (list '(0 . "INSERT")
  211.                   '(100 . "AcDbEntity")
  212.                   '(100 . "AcDbBlockReference")
  213.                   (cons 2 bn)
  214.                   (cons 10 p)
  215.                   (cons 41 scl)
  216.                   (cons 42 scl)
  217.                   (cons 43 scl)
  218.                   (cons 50 an)
  219.             )
  220.   )
  221. )
  222. ;;d70 线性32 对齐33; p3基点 p1第一点 p1第二点
  223. (defun Dim:MakeRotate (p1 p2 p3)
  224.   (entmakex (list '(0 . "DIMENSION")
  225.                   '(100 . "AcDbEntity")
  226.                   '(100 . "AcDbDimension")
  227.                   (cons 10 p3)
  228.                   '(11 0. 0. 0.)
  229.                   '(70 . 32)
  230.                   '(100 . "AcDbAlignedDimension")
  231.                   (cons 13 p1)
  232.                   (cons 14 p2)
  233.                   (cons 50 (angle p1 p2))
  234.                   '(100 . "AcDbRotatedDimension")
  235.             )
  236.   )
  237. )

  238. ;;;---------------------------------------------------------------;
  239. ;;;功能: 制造组                                                   ;
  240. ;;;输入: ss --- 选择集或实体表                                    ;
  241. ;;;输出: 实体                                                     ;
  242. ;;;---------------------------------------------------------------;
  243. (defun Group:Make (ss name / el)
  244.   (cond
  245.     ((eq (type ss) 'PICKSET)
  246.      (setq el (ss->objs ss))
  247.     )
  248.     ((= (type (car ss)) 'ENAME)
  249.      (setq el (mapcar 'vlax-ename->vla-object el))
  250.     )
  251.     (t ss)
  252.   )
  253.   (if (setq grp        (vla-add (fy:acgroups)
  254.                          (if Name
  255.                            name
  256.                            "*"
  257.                          )
  258.                 )
  259.       )
  260.     (vla-appenditems
  261.       grp
  262.       (vlax-make-variant
  263.         (vlax-safearray-fill
  264.           (vlax-make-safearray
  265.             vlax-vbobject
  266.             (cons 0 (1- (length el)))
  267.           )
  268.           el
  269.         )
  270.       )
  271.     )
  272.   )
  273.   grp
  274. )

评分

参与人数 1D豆 +5 收起 理由
lucas3 + 5 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

已领礼包: 5600个

财富等级: 富甲天下

发表于 2014-8-29 14:50:18 | 显示全部楼层
非常感谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复

使用道具 举报

发表于 2014-9-13 11:41:38 | 显示全部楼层
支持一下 嘿嘿
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-24 20:28 , Processed in 0.356922 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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