找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1672|回复: 4

[研讨] ;;亮显块内线圆

[复制链接]

已领礼包: 604个

财富等级: 财运亨通

发表于 2014-5-14 16:35:29 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 /db_自贡黄明儒_ 于 2014-5-14 16:50 编辑

(defun LM:Entity->PointList (ent / der di1 di2 di3 elst fun inc lst par rad)
  (setq elst (entget ent))
  (cond
    ((eq "POINT" (cdr (assoc 0 elst)))
     (list (cdr (assoc 10 elst)))
    )
    ((eq "LINE" (cdr (assoc 0 elst)))
     (list (cdr (assoc 10 elst)) (cdr (assoc 11 elst)))
    )
    ((member (cdr (assoc 0 elst)) '("CIRCLE" "ARC"))
     (setq di1 0.0
           di2 (vlax-curve-getdistatparam ent (vlax-curve-getendparam ent))
           inc (/ di2 (1+ (fix (* 35.0 (/ di2 (cdr (assoc 40 elst)) (+ pi pi))))))
           fun (if (vlax-curve-isclosed ent)
                 <
                 <=
               )
     )
     (while (fun di1 di2)
       (setq lst (cons (vlax-curve-getpointatdist ent di1) lst)
             di1 (+ di1 inc)
       )
     )
     lst
    )
    ((or (eq (cdr (assoc 0 elst)) "LWPOLYLINE")
         (and (eq (cdr (assoc 0 elst)) "POLYLINE")
              (zerop (logand (cdr (assoc 70 elst)) 80))
         )
     )
     (setq par 0)
     (repeat (fix (1+ (vlax-curve-getendparam ent)))
       (if (setq der (vlax-curve-getsecondderiv ent par))
         (if (equal der '(0.0 0.0 0.0) 1e-8)
           (setq lst (cons (vlax-curve-getpointatparam ent par) lst))
           (if (setq rad (distance '(0.0 0.0) (vlax-curve-getfirstderiv ent par))
                     di1 (vlax-curve-getdistatparam ent par)
                     di2 (vlax-curve-getdistatparam ent (1+ par))
               )
             (progn
               (setq inc (/ (- di2 di1) (1+ (fix (* 35.0 (/ (- di2 di1) rad (+ pi pi)))))))
               (while (< di1 di2)
                 (setq lst (cons (vlax-curve-getpointatdist ent di1) lst)
                       di1 (+ di1 inc)
                 )
               )
             )
           )
         )
       )
       (setq par (1+ par))
     )
     (if (or (vlax-curve-isclosed ent) (equal '(0.0 0.0 0.0) der 1e-8))
       lst
       (cons (vlax-curve-getendpoint ent) lst)
     )
    )
    ((eq (cdr (assoc 0 elst)) "ELLIPSE")
     (setq di1 (vlax-curve-getdistatparam ent (vlax-curve-getstartparam ent))
           di2 (vlax-curve-getdistatparam ent (vlax-curve-getendparam ent))
           di3 (* di2
                  (/ (+ pi pi)
                     (abs (- (vlax-curve-getendparam ent) (vlax-curve-getstartparam ent)))
                  )
               )
     )
     (while (< di1 di2)
       (setq lst (cons (vlax-curve-getpointatdist ent di1) lst)
             der (distance '(0.0 0.0)
                           (vlax-curve-getsecondderiv ent (vlax-curve-getparamatdist ent di1))
                 )
             di1 (+ di1 (/ di3 (1+ (fix (/ 35.0 (/ di3 der (+ pi pi)))))))
       )
     )
     (if (vlax-curve-isclosed ent)
       lst
       (cons (vlax-curve-getendpoint ent) lst)
     )
    )
    ((eq (cdr (assoc 0 elst)) "SPLINE")
     (setq di1 (vlax-curve-getdistatparam ent (vlax-curve-getstartparam ent))
           di2 (vlax-curve-getdistatparam ent (vlax-curve-getendparam ent))
           inc (/ di2 25.0)
     )
     (while (< di1 di2)
       (setq lst (cons (vlax-curve-getpointatdist ent di1) lst)

             di1 (+ di1 inc)
       )
     )
     (if (vlax-curve-isclosed ent)
       lst
       (cons (vlax-curve-getendpoint ent) lst)
     )
    )
  )
)
;;亮显块内线圆
(defun C:w1 (/ E EN PTS X Y)
  (setq en (nentsel))
  (setq pts (LM:Entity->PointList (car en)))
  (setq e (car (cadddr en)))       ;块  
  (vl-cmdf "_.ucs" "_OB" e)        ;wcs
  (setq pts (mapcar '(lambda (x) (trans x 1 0)) pts))     ;ucs
  (vl-cmdf "_.ucs" "_p")        ;恢复ucs
  (setq pts (mapcar '(lambda (x) (trans x 0 1)) pts))
  (mapcar '(lambda (x y) (GRDRAW x y 1)) pts (cdr pts))
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 3199个

财富等级: 富可敌国

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

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 685个

财富等级: 财运亨通

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

使用道具 举报

已领礼包: 1336个

财富等级: 财源广进

发表于 2014-10-7 11:04:01 | 显示全部楼层
大师,我想写个统计块内图元的。没找到方向!您有类似的没有?谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-14 21:53 , Processed in 0.363867 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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