找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 8288|回复: 151

[每日一码] VLISP创建WIPEOUT(支持曲线做边界)代码

 火.. [复制链接]

已领礼包: 19个

财富等级: 恭喜发财

发表于 2016-9-11 20:12:05 | 显示全部楼层 |阅读模式

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

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

×

VLISP创建WIPEOUT(支持曲线做边界)代码

VLISP创建WIPEOUT(支持曲线做边界)代码


[it618postdisplay>0][sell=5]
  1. ;;创建WIPEOUT,支持曲线
  2. ;;; OB2WO (gile) -Gilles Chanteau- 10/03/07
  3. ;;; Creates a "Wipeout" from an object (circle, ellipse, or polyline with arcs)
  4. ;;; Works whatever the current ucs and object OCS

  5. (defun c:ob2wo (/ ent lst nor)
  6.   (vl-load-com)
  7.   (if (and (setq ent (car (entsel)))
  8.            (member (cdr (assoc 0 (entget ent)))
  9.                    '("CIRCLE" "ELLIPSE" "LWPOLYLINE")
  10.            )
  11.            (setq lst (ent2ptlst ent))
  12.            (setq nor (cdr (assoc 210 (entget ent))))
  13.       )
  14.     (progn
  15.       (vla-StartundoMark
  16.         (vla-get-ActiveDocument (vlax-get-acad-object))
  17.       )
  18.       (makeWipeout lst nor)
  19.       (initget "Yes No")
  20.       (if
  21.         (= (getkword "\nDelete source object? [Yes/No] <No>: ")
  22.            "Yes"
  23.         )
  24.          (entdel ent)
  25.       )
  26.       (vla-EndundoMark
  27.         (vla-get-ActiveDocument (vlax-get-acad-object))
  28.       )
  29.     )
  30.   )
  31. )


  32. ;;; ENT2PTLST
  33. ;;; Returns the vertices list of the polygon figuring the curve object
  34. ;;; Coordinates defined in OCS

  35. (defun ent2ptlst (ent / obj dist n lst p_lst prec)
  36.   (vl-load-com)
  37.   (if (= (type ent) 'ENAME)
  38.     (setq obj (vlax-ename->vla-object ent))
  39.   )
  40.   (cond
  41.     ((member (cdr (assoc 0 (entget ent))) '("CIRCLE" "ELLIPSE"))
  42.      (setq dist        (/ (vlax-curve-getDistAtParam
  43.                      obj
  44.                      (vlax-curve-getEndParam obj)
  45.                    )
  46.                    50
  47.                 )
  48.            n        0
  49.      )
  50.      (repeat 50
  51.        (setq
  52.          lst
  53.           (cons
  54.             (trans
  55.               (vlax-curve-getPointAtDist obj (* dist (setq n (1+ n))))
  56.               0
  57.               (vlax-get obj 'Normal)
  58.             )
  59.             lst
  60.           )
  61.        )
  62.      )
  63.     )
  64.     (T
  65.      (setq p_lst (vl-remove-if-not
  66.                    '(lambda (x)
  67.                       (or (= (car x) 10)
  68.                           (= (car x) 42)
  69.                       )
  70.                     )
  71.                    (entget ent)
  72.                  )
  73.      )
  74.      (while p_lst
  75.        (setq
  76.          lst
  77.           (cons
  78.             (append (cdr (assoc 10 p_lst))
  79.                     (list (cdr (assoc 38 (entget ent))))
  80.             )
  81.             lst
  82.           )
  83.        )
  84.        (if (/= 0 (cdadr p_lst))
  85.          (progn
  86.            (setq prec (1+ (fix (* 25 (sqrt (abs (cdadr p_lst))))))
  87.                  dist (/ (- (if        (cdaddr p_lst)
  88.                               (vlax-curve-getDistAtPoint
  89.                                 obj
  90.                                 (trans (cdaddr p_lst) ent 0)
  91.                               )
  92.                               (vlax-curve-getDistAtParam
  93.                                 obj
  94.                                 (vlax-curve-getEndParam obj)
  95.                               )
  96.                             )
  97.                             (vlax-curve-getDistAtPoint
  98.                               obj
  99.                               (trans (cdar p_lst) ent 0)
  100.                             )
  101.                          )
  102.                          prec
  103.                       )
  104.                  n    0
  105.            )
  106.            (repeat (1- prec)
  107.              (setq
  108.                lst (cons
  109.                      (trans
  110.                        (vlax-curve-getPointAtDist
  111.                          obj
  112.                          (+ (vlax-curve-getDistAtPoint
  113.                               obj
  114.                               (trans (cdar p_lst) ent 0)
  115.                             )
  116.                             (* dist (setq n (1+ n)))
  117.                          )
  118.                        )
  119.                        0
  120.                        ent
  121.                      )
  122.                      lst
  123.                    )
  124.              )
  125.            )
  126.          )
  127.        )
  128.        (setq p_lst (cddr p_lst))
  129.      )
  130.     )
  131.   )
  132.   lst
  133. )


  134. ;;; MakeWipeout creates a "wipeout" from a points list and the normal vector of the object

  135. (defun MakeWipeout (pt_lst nor / dxf10 max_dist cen dxf_14)
  136.   (if (not (member "acwipeout.arx" (arx)))
  137.     (arxload "acwipeout.arx")
  138.   )
  139.   (setq        dxf10 (list (apply 'min (mapcar 'car pt_lst))
  140.                     (apply 'min (mapcar 'cadr pt_lst))
  141.                     (caddar pt_lst)
  142.               )
  143.   )
  144.   (setq
  145.     max_dist
  146.      (float
  147.        (apply 'max
  148.               (mapcar '- (apply 'mapcar (cons 'max pt_lst)) dxf10)
  149.        )
  150.      )
  151.   )
  152.   (setq cen (mapcar '+ dxf10 (list (/ max_dist 2) (/ max_dist 2) 0.0)))
  153.   (setq
  154.     dxf14 (mapcar
  155.             '(lambda (p)
  156.                (mapcar '/
  157.                        (mapcar '- p cen)
  158.                        (list max_dist (- max_dist) 1.0)
  159.                )
  160.              )
  161.             pt_lst
  162.           )
  163.   )
  164.   (setq dxf14 (reverse (cons (car dxf14) (reverse dxf14))))
  165.   (entmake
  166.     (append (list '(0 . "WIPEOUT")
  167.                   '(100 . "AcDbEntity")
  168.                   '(100 . "AcDbWipeout")
  169.                   '(90 . 0)
  170.                   (cons 10 (trans dxf10 nor 0))
  171.                   (cons 11 (trans (list max_dist 0.0 0.0) nor 0))
  172.                   (cons 12 (trans (list 0.0 max_dist 0.0) nor 0))
  173.                   '(13 1.0 1.0 0.0)
  174.                   '(70 . 7)
  175.                   '(280 . 1)
  176.                   '(71 . 2)
  177.                   (cons 91 (length dxf14))
  178.             )
  179.             (mapcar '(lambda (p) (cons 14 p)) dxf14)
  180.     )
  181.   )
  182. )


[/sell][/it618postdisplay]

评分

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

查看全部评分

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

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2016-9-11 20:14:50 | 显示全部楼层
考虑UCS坐标没??

点评

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

使用道具 举报

已领礼包: 19个

财富等级: 恭喜发财

 楼主| 发表于 2016-9-11 20:35:59 | 显示全部楼层

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

使用道具 举报

已领礼包: 5588个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 8733个

财富等级: 富甲天下

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

使用道具 举报

已领礼包: 837个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 22个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 1757个

财富等级: 堆金积玉

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

使用道具 举报

已领礼包: 161个

财富等级: 日进斗金

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

使用道具 举报

已领礼包: 1904个

财富等级: 堆金积玉

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

使用道具 举报

已领礼包: 1904个

财富等级: 堆金积玉

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

使用道具 举报

已领礼包: 28个

财富等级: 恭喜发财

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

使用道具 举报

已领礼包: 51个

财富等级: 招财进宝

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

使用道具 举报

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

使用道具 举报

已领礼包: 2226个

财富等级: 金玉满堂

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-10 12:41 , Processed in 0.472077 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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