找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: bbswen

[求助] 统计圆的交集次数及填充

[复制链接]

已领礼包: 75个

财富等级: 招财进宝

 楼主| 发表于 2014-8-29 15:56:27 | 显示全部楼层
高手莫笑,

经过几天的拼凑,终于算是可以小有长劲了,呵呵,测试图,时间1.9秒。

应该还可以提高,已经起过我的能力了,呵呵,



点评

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

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-8-29 15:59:23 | 显示全部楼层
bbswen 发表于 2014-8-29 15:56
高手莫笑,

经过几天的拼凑,终于算是可以小有长劲了,呵呵,测试图,时间1.9秒。

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

使用道具 举报

已领礼包: 75个

财富等级: 招财进宝

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

使用道具 举报

已领礼包: 75个

财富等级: 招财进宝

 楼主| 发表于 2014-8-29 16:11:14 | 显示全部楼层
请大大门指点一下,精简一下,
再帮我扩展下,
大圆外不统计,
不同颜色的面积统计。
嘿嘿,多多指教,下面贴源码,莫笑。

  1. (defun c:tte (/ e pts ss d lst s1 s2 lst1 cl nl lst2 hl)
  2.   (if (and (setq e (car        (xdrx_entsel
  3.                           "\nPick Curve: "
  4.                           '((0 . "*Polyline,CIRCLE,ELLIPSE,SPLINE"))
  5.                         )
  6.                    );拾取一个曲线
  7.            )
  8.           
  9.            (vlax-curve-isclosed e) ;确定指定曲线是否闭合(即起点与端点是否重合)

  10.            (setq pts (xdrx_getsamplept e));;得到这个曲线的模拟顶点表

  11.            (setq ss (ssget "WP" pts '((0 . "CIRCLE"))));根据 圈围选定对像创建选择集
  12.            (setq d (getdist "\nRadius: "))
  13.        
  14.            (setq t0 (xdl-getutime))
  15.       )
  16.     (progn
  17.       (setq lst         (mapcar
  18.                    '(lambda (x / p)
  19.                       (setq p (xdrx_getpropertyvalue x "Center"));实体属性获取 (p 圆心)
  20.                       (setq cl (cons (xdrx_circle_make p d) cl));创建圆实体
  21.                       p
  22.                     )
  23.                    (xdrx_pickset->ents ss);选择集中的实体表

  24.                  )
  25.             lst1 (cons (ssname (xdrx_entity_copy e) 0) cl) ;实体拷贝

  26.             sm (XD::Entity->Pickset lst1)
  27.             
  28.             )

  29.         ;(mbb);交点打断
  30.       
  31.       (setq

  32.             ;s1         (xdrx_curve_intersectbreak (XD::Entity->Pickset lst1) 0);将选择集中的曲线在所有交点处break

  33.             ;s1 (setq ss (ssget "WP" pts '((0 . "arc"))))
  34.         slst (mbb)
  35.        
  36.         s1 (XD::Entity->Pickset slst)
  37.        

  38.             s2         (xdrx_geom_searchregions s1 0);求给定选择集内的实体的连通区域所有边界

  39.             lst2 (xdrx_pickset->ents s2);选择集中的实体表

  40.             lst2 (vl-sort lst2 ;根据给定的比较函数来对表中的元素排序

  41.                           '(lambda (x1 x2)
  42.                              (>        (car (xdrx_getarea x1));求AutoCAD AcDbCurve(曲线)类的面积和周长(长度)

  43.                                 (car (xdrx_getarea x2))
  44.                              )
  45.                            )
  46.                  )
  47.       )
  48.       (xdrx_entity_delete (car lst2));删除当前空间或者块定义中的实体

  49.       (setq
  50.         nl (mapcar
  51.              '(lambda (x / p)
  52.                 (if (setq
  53.                       p
  54.                        (cadr (assoc "Centroid" (xdrx_curve_info x)));获得AcDbCurve曲线实体(polyline,lwpolyline,arc,circle,ellipse,spline) 和AcDbRegion(REGION面域)实体的面积,周长,质心,惯性矩,回转半径,边界盒等信息。


  55.                     )
  56.                   (list
  57.                     (length
  58.                       (vl-remove nil
  59.                                  (mapcar '(lambda (a)
  60.                                             (if        (< (distance p a) d)
  61.                                               t
  62.                                               nil
  63.                                             )
  64.                                           )
  65.                                          lst;->a
  66.                                  )
  67.                       )
  68.                     )
  69.                     x
  70.                   )
  71.                 )
  72.               )
  73.              (cdr lst2)
  74.            )
  75.       )
  76.       (mapcar
  77.         '(lambda (x / ent)
  78.            (setq ent (xdrx_hatch_make (cadr x)));创建HATCH填充实体

  79.            (setq hl (cons ent hl))
  80.            (if (zerop (car x));查验是否是0
  81.              (xdrx_entity_setcolor ent 15);设置一个实体的颜色

  82.              (xdrx_entity_setcolor ent (car x))
  83.            )
  84.          )
  85.         (vl-remove nil nl)
  86.       )
  87.       (apply 'xdrx_draworder->back hl);将参数实体和选择集的任意组合的实体顺序放到最后面

  88.     )
  89.   )
  90.   (princ (strcat "\n*****""耗时"
  91.                 (rtos (- (xdl-getutime)t0)2 3)
  92.                  "秒"
  93.                  ))
  94.   (princ)
  95. )


  96. (defun XD::Entity->PickSet (entl / n ss x)
  97.   (setq ss (ssadd))
  98.   (foreach n entl
  99.     (ssadd n ss)
  100.   )
  101.   ss
  102. )

  103.   (defun xdl-getutime()
  104.     (* 86400 (getvar "tdusrtimer")
  105.        )
  106.     )


  107. ;;交点打断主函数
  108. (defun MBB (/ elist ssg n t0 lst)
  109.     (setq lst '())   ;empty list
  110.   (VL-LOAD-COM)
  111.   (fy:clearcset)
  112. ;;;  (setq t0 (xdl-getutime))
  113.   (if ;(setq ssg (ssget '((0 . "line,arc,circle,ellipse"))))
  114.     (setq ssg sm)   
  115.      (progn
  116.        (command "_.select" ssg "")      
  117.     (vlax-for obj (vla-get-activeselectionset
  118.         (vla-get-activedocument (vlax-get-acad-object))
  119.       )
  120.       (setq elist (cons obj elist))  ; ssg->elist
  121.     )
  122.     )
  123.   )


  124.    
  125.   (setq lst (DoEntMake (InterSort (ssinter elist))))
  126.   (princ)
  127.   lst
  128. )
  129. ;;求交点集函数-nth
  130. ;;经过测试,nth函数仅比assoc函数快一点点。
  131. ;;故此函数也可取消i,j变量,直接使用assoc函数
  132. (defun ssinter (el / el1 obj1 obj2 ipts pts list1 outlst i j)
  133.   (setq outlst (mapcar 'list el)
  134. i      -1   ;obj1位置指针
  135. n      0   ;交点数计数器
  136.   )
  137.   (while el
  138.     (setq obj1 (car el)
  139.    list1 (nth (setq i (1+ i)) outlst) ;obj1已有的交点列表
  140.    el (cdr el)
  141.    el1 el
  142.    j i   ;obj2位置指针
  143.     )
  144.     (while el1
  145.       (setq obj2 (car el1)
  146.      el1  (cdr el1)
  147.      j  (1+ j)
  148.       )
  149.       ;;取交点
  150.       (if (and (setq ipts (vla-intersectwith obj1 obj2 0))
  151.         (setq ipts (vlax-variant-value ipts))
  152.         (> (vlax-safearray-get-u-bound ipts 1) 0)
  153.    )
  154. (progn
  155.    (setq ipts (vlax-safearray->list ipts)
  156.   pts  '()  ;obj1,obj2交点临时列表变量
  157.    )
  158.    (while (> (length ipts) 0)
  159.      (setq pts  (cons (list (car ipts)
  160.        (cadr ipts)
  161.        (caddr ipts)
  162.         )
  163.         pts
  164.          )
  165.     ipts (cdddr ipts)
  166.      )
  167.    )
  168.    (setq list1 (append list1 pts) ;存obj1交点表,循环结束后再更新
  169.   n     (+ n (length pts)) ;交点计数累加
  170.    )
  171.    ;;obj2的交点列表立即更新
  172.    (setq
  173.      outlst (subst (append (nth j outlst) pts)
  174.      (nth j outlst)
  175.      outlst
  176.      )
  177.    )
  178. )
  179.       )
  180.     )
  181.     ;;当obj1存在交点,且非封闭曲线,添加两端点
  182.     (if (and (cdr list1) (not (vlax-curve-isClosed obj1)))
  183.       (setq list1 (append list1
  184.      (list (vlax-curve-getEndPoint obj1))
  185.      (list (vlax-curve-getStartPoint obj1))
  186.     )
  187.       )
  188.     )
  189.     (setq outlst (subst list1 (nth i outlst) outlst)) ;更新obj1交点列表
  190.   )
  191.   outlst
  192. )
  193. ;;点集排序及删除重复点函数
  194. (defun InterSort (el / obj1 pts plst outlst)
  195.   (setq outlst '())   ;empty list
  196.   (foreach item el
  197.     (setq obj1 (car item)
  198.    pts  (cdr item)
  199.    plst '()   ;empty list
  200.     )
  201.     (if pts    ;若无交点,则不修改该实体
  202.       (progn
  203. ;;交点排序,列表为逆序
  204. (setq
  205.    pts (vl-sort
  206.   pts
  207.   (function (lambda (p1 p2)
  208.        (< (vlax-curve-getParamAtPoint obj1 p1)
  209.           (vlax-curve-getParamAtPoint obj1 p2)
  210.        )
  211.      )
  212.   )
  213.        )
  214. )
  215. ;;剔除重复点并将列表顺序转正
  216. (foreach p pts
  217.    (if plst
  218.      (if (not (equal p (car plst) 0.00001))
  219.        (setq plst (cons p plst))
  220.      )
  221.      (setq plst (cons p plst))
  222.    )
  223. )
  224. ;;闭合曲线需再添加首个交点以使新实体完全封闭
  225. (if (vlax-curve-isClosed obj1)
  226.    (setq plst (cons (last plst) plst))
  227. )
  228. (setq plst   (cons (vlax-vla-object->ename obj1) plst)
  229.        outlst (cons plst outlst)
  230. )
  231.       )
  232.     )
  233.   )
  234.   outlst
  235. )
  236. ;;调用entmake生成新实体
  237. (defun DoEntMake (el / obj objlst objname objcen objratio objaxis outlst)
  238.    (setq outlst '())   ;empty list
  239.   (foreach e el
  240.     (setq obj   (car e)
  241.    objlst  (entget obj)
  242.    objlst  (vl-remove (assoc -1 objlst) objlst) ;去除图元名
  243.    objlst  (vl-remove (assoc 330 objlst) objlst) ;去除id
  244.    objlst  (vl-remove (assoc 5 objlst) objlst) ;去除句柄
  245.    objname (cdr (assoc 0 objlst))
  246.     )
  247.     (cond
  248.       ((= objname "LINE")
  249.        (repeat (- (length e) 2)
  250.   (setq e (cdr e))
  251.   (setq objlst (subst (cons 10 (car e)) (assoc 10 objlst) objlst))
  252.   (setq objlst (subst (cons 11 (cadr e)) (assoc 11 objlst) objlst)
  253.          
  254.         )
  255.   (entmake objlst)
  256.          (setq outlsttem (entmakex objlst)
  257.                outlst (cons outlsttem outlst)
  258.                )
  259.        )
  260.        (entdel obj)
  261.       )
  262.       ((= objname "CIRCLE")
  263.        (setq objcen (cdr (assoc 10 objlst)))
  264.        (setq objlst (subst (cons 0 "ARC") (assoc 0 objlst) objlst))
  265.        (setq objlst (append objlst
  266.        (list (cons 100 "AcDbArc")
  267.       (cons 50 0.0)
  268.       (cons 51 0.0)
  269.        )
  270.       )
  271.        )
  272.        (repeat (- (length e) 2)
  273.   (setq e (cdr e))
  274.   (setq objlst (subst (cons 50 (angle objcen (cadr e)))
  275.         (assoc 50 objlst)
  276.         objlst
  277.         )
  278.   )
  279.   (setq objlst (subst (cons 51 (angle objcen (car e)))
  280.         (assoc 51 objlst)
  281.         objlst
  282.         )

  283.   )
  284.   (entmake objlst)
  285.          (setq outlsttem (entmakex objlst)
  286.                outlst (cons outlsttem outlst)
  287.                )
  288.        )
  289.        (entdel obj)
  290.       )
  291.       ((= objname "ARC")
  292.        (setq objcen (cdr (assoc 10 objlst)))
  293.        (repeat (- (length e) 2)
  294.   (setq e (cdr e))
  295.   (setq objlst (subst (cons 50 (angle objcen (cadr e)))
  296.         (assoc 50 objlst)
  297.         objlst
  298.         )
  299.   )
  300.   (setq objlst (subst (cons 51 (angle objcen (car e)))
  301.         (assoc 51 objlst)
  302.         objlst
  303.         )

  304.   )
  305.   (entmake objlst)
  306.          (setq outlsttem (entmakex objlst)
  307.                outlst (cons outlsttem outlst)
  308.                )
  309.        )
  310.        (entdel obj)
  311.       )
  312.       ((= objname "ELLIPSE")
  313.        ;;椭圆圆心
  314.        (setq objcen (cdr (assoc 10 objlst)))
  315.        ;;相对于中心的长轴矢量
  316.        (setq objaxis (cdr (assoc 11 objlst)))
  317.        ;;短轴与长轴的比例
  318.        (setq objratio (cdr (assoc 40 objlst)))
  319.        (repeat (- (length e) 2)
  320.   (setq e (cdr e))
  321.   (setq objlst (subst (cons 41 (pt->param (cadr e) objcen objaxis objratio))
  322.         (assoc 41 objlst)
  323.         objlst
  324.         )
  325.   )
  326.   (setq objlst (subst (cons 42 (pt->param (car e) objcen objaxis objratio))
  327.         (assoc 42 objlst)
  328.         objlst
  329.         )

  330.   )
  331.   (entmake objlst)
  332.          (setq outlsttem (entmakex objlst)
  333.                outlst (cons outlsttem outlst)
  334.                )
  335.        )
  336.        (entdel obj)
  337.       )
  338.     )
  339.   )
  340.   outlst
  341. )
  342. ;;计算耗时
  343. (defun xdl-getutime ()
  344.   (* 86400 (getvar "tdusrtimer"))
  345. )
  346. ;;求椭圆曲线参数
  347. (defun pt->param (pt cen axis ratio / ang param)
  348.   (setq ang (- (angle cen pt) (angle '(0. 0. 0.) axis)))
  349.   (cond ((= (cos ang) 0.0)  ;防止分母cos为零出错
  350.   (if (> (sin ang) 0.0)
  351.     (setq param (* 0.5 PI))
  352.     (setq param (* 1.5 PI))
  353.   )
  354. )
  355. ((= (sin ang) 0.0)
  356.   (if (> (cos ang) 0.0)
  357.     (setq param 0.0)
  358.     (setq param PI)
  359.   )
  360. )
  361. (T
  362.   (setq param (atan (/ (sin ang) (* (cos ang) ratio))))
  363.   (if (< (cos ang) 0.0)
  364.     (setq param (+ pi param))
  365.   )
  366. )
  367.   )
  368.   param
  369. )
  370. (princ)









  371. (defun fy:acapp        nil
  372.   (eval        (list 'defun
  373.               'fy:acapp
  374.               'nil
  375.               (vlax-get-acad-object)
  376.         )
  377.   )
  378.   (fy:acapp)
  379. )
  380. (defun fy:docs nil
  381.   (eval        (list 'defun
  382.               'fy:docs
  383.               'nil
  384.               (vla-get-documents (fy:acapp))
  385.         )
  386.   )
  387.   (fy:docs)
  388. )
  389. (defun Fy:acDoc        nil
  390.   (eval        (list 'defun
  391.               'FY:acdoc
  392.               'nil
  393.               (vla-get-activedocument (vlax-get-acad-object))
  394.         )
  395.   )
  396.   (fy:acdoc)
  397. )
  398. (defun fy:acsets nil
  399.   (eval        (list 'defun
  400.               'fy:acsets
  401.               'nil
  402.               (vla-get-Selectionsets (fy:acdoc))
  403.         )
  404.   )
  405.   (fy:acsets)
  406. )
  407. ;; From eachy
  408. (defun fy:Clearcset (/ cset)
  409.   (if (not (vl-catch-all-error-p
  410.              (setq cset
  411.                     (vl-catch-all-apply
  412.                       'vla-item
  413.                       (list
  414.                         (fy:acsets)
  415.                         "CURRENT"
  416.                       )
  417.                     )
  418.              )
  419.            )
  420.       )
  421.     (vla-delete cset)
  422.   )
  423.   (princ)
  424. )
  425. (defun fy:cset ()
  426.   (vla-get-activeselectionset (fy:acdoc))
  427. )
  428. (defun fy:cset->objs (/ ol)
  429.   (vlax-for obj        (fy:cset)
  430.     (setq ol (cons obj ol))
  431.   )
  432.   (reverse ol)
  433. )

多余的代码就不删了,都比我水平高,呵呵

点评

外侧填充在填充时就可以过滤掉 统计面积就简单了  详情 回复 发表于 2014-8-29 16:31
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2014-8-29 16:31:46 | 显示全部楼层
bbswen 发表于 2014-8-29 16:11
请大大门指点一下,精简一下,
再帮我扩展下,
大圆外不统计,

外侧填充在填充时就可以过滤掉
统计面积就简单了
  1. (defun c:tt (/ lst)
  2.   (fy:begin)
  3.   (if (ssget '((0 . "Hatch")))
  4.     (progn
  5.       (setq lst        (mapcar        '(lambda (x)
  6.                            (list (vlax-get x 'Color)
  7.                                  (vlax-get x 'Area)
  8.                            )
  9.                          )
  10.                         (fy:cset->objs)
  11.                 )
  12.             lst        (xd::list:groupbyindex lst 0)
  13.             lst        (mapcar        '(lambda (x)
  14.                            (list (car x) (apply '+ (cdr x)))
  15.                          )
  16.                         lst
  17.                 )
  18.       )
  19.       (princ lst)
  20.     )
  21.   )
  22.   (fy:end)
  23.   (princ)
  24. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2014-8-30 09:42:17 | 显示全部楼层
API   更新后的效果

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2014-8-30 11:02:57 | 显示全部楼层
API 及 函数库 发布新版后再做为 "插件发布"
  1. (defun xd::entity->pickset (el / ss)
  2.   (setq ss (ssadd))
  3.   (foreach x el (ssadd x ss))
  4.   ss
  5. )
  6. (defun c:tt1 (/               e        pts         ss          d           lst
  7.               s1       s2        lst1         cl          nl           lst2
  8.               hl       _carea        _Pnts:IsInside          _Pnt:OneOfIn
  9.               p               _Solid:Make         box
  10.              )
  11.   (defun _Solid:Make (p lst / p1 p2 p3)
  12.     (setq p1 (polar p 0. 2000)
  13.           p2 (polar p (- _pi2) 800)
  14.           p3 (polar p2 0. 2000)
  15.     )
  16.     (if        (zerop (car lst))
  17.       (xdrx_polyline_make t p p1 p3 p2)
  18.       (xdrx_entity_setcolor
  19.         (xdrx_solid_make p p2 p1 p3)
  20.         (if (>= (car lst) 7)
  21.           (1+ (car lst))
  22.           (car lst)
  23.         )
  24.       )
  25.     )
  26.     (xdrx_text_make
  27.       (mapcar '+ p2 '(2200 200 0))
  28.       (strcat "重合 "
  29.               (itoa (car lst))
  30.               " 层, 面积 "
  31.               (rtos (cadr lst) 2 2)
  32.       )
  33.       250.
  34.       0.
  35.     )
  36.   )
  37.   
  38.   (defun _Pnts:IsInside        (e pts)
  39.     (apply 'and
  40.            (mapcar '(lambda (p)
  41.                       (or (xdrx_point_isinside p e);_和图形显示有关,放大
  42.                           (xdrx_point_ison p e)
  43.                       )
  44.                     )
  45.                    pts
  46.            )
  47.     )
  48.   )
  49.   (defun _Pnt:OneOfIn (e / p1 p2)
  50.     (setq p1 (xdrx_curve_getpointatparam e 1.2)
  51.           p2 (xdrx_curve_getpointatparam e 0.8)
  52.           p  (xdrx_line_midp p1 p2)
  53.     )
  54.   )
  55.   (if (and (setq e (car        (xdrx_entsel
  56.                           "\n拾取范围线 "
  57.                           '((0 . "*Polyline,CIRCLE,ELLIPSE,SPLINE"))
  58.                         )
  59.                    )
  60.            )
  61.            (vlax-curve-isclosed e)
  62.            (progn
  63.              (setq box (xdrx_entity_box e))
  64.              (xdrx_document_zoomwindow (car box) (caddr box))
  65.              t
  66.            )
  67.            (setq pts (xdrx_getsamplept e))
  68.            (setq ss (ssget "WP" pts '((0 . "CIRCLE"))))
  69.            (setq d (getdist "\n半径: "))
  70.       )
  71.     (progn
  72.       (setq lst           (mapcar
  73.                      '(lambda (x / p)
  74.                         (setq p (xdrx_getpropertyvalue x "Center"))
  75.                         (setq cl (cons (xdrx_circle_make p d) cl))
  76.                         p
  77.                       )
  78.                      (xdrx_pickset->ents ss)
  79.                    )
  80.             lst1   (cons (ssname (xdrx_entity_copy e) 0) cl)
  81.             s1           (xdrx_curve_intersectbreak (XD::Entity->Pickset lst1) 0)
  82.             s2           (xdrx_geom_searchregions s1 0)
  83.             lst2   (xdrx_pickset->ents s2)
  84.             lst2   (vl-sort lst2
  85.                             '(lambda (x1 x2)
  86.                                (> (car (xdrx_getarea x1))
  87.                                   (car (xdrx_getarea x2))
  88.                                )
  89.                              )
  90.                    )
  91.             _carea (* pi d d)
  92.       )
  93.       (xdrx_entity_delete (car lst2))
  94.       (setq lst2
  95.                  (mapcar
  96.                    '(lambda (x / p)
  97.                       (if (or (_Pnts:Isinside
  98.                                 e
  99.                                 (xdrx_entity_getstretchpoint x)
  100.                               )
  101.                               (> (car (xdrx_getarea x)) _carea)
  102.                           )
  103.                         (progn
  104.                           (setq p (_Pnt:OneOfIn x))
  105.                           (list        (length        (vl-remove-if
  106.                                           '(lambda (a) (> (distance a p) d))
  107.                                           lst
  108.                                         )
  109.                                 )
  110.                                 x
  111.                           )
  112.                         )
  113.                         (progn
  114.                           (xdrx_entity_delete x)
  115.                           nil
  116.                         )
  117.                       )
  118.                     )
  119.                    (cdr lst2)
  120.                  )
  121.             lst2 (vl-remove nil lst2)
  122.             nl         (mapcar
  123.                    '(lambda (x)
  124.                       (list
  125.                         (car x)
  126.                         (apply
  127.                           '+
  128.                           (mapcar 'car (mapcar 'xdrx_getarea (cdr x)))
  129.                         )
  130.                       )
  131.                     )
  132.                    (xd::list:groupbyindex lst2 0)
  133.                  )
  134.       )
  135.       (mapcar '(lambda (x / ent)
  136.                  (if (not (zerop (car x)))
  137.                    (progn (setq ent (xdrx_hatch_make (cadr x)))
  138.                           (setq hl (cons ent hl))
  139.                           (xdrx_entity_setcolor
  140.                             ent
  141.                             (if        (>= (car x) 7)
  142.                               (1+ (car x))
  143.                               (car x)
  144.                             )
  145.                           )
  146.                    )
  147.                  )
  148.                )
  149.               lst2
  150.       )
  151.       (apply 'xdrx_draworder->back hl)
  152.       (xdrx_document_zoomPrevious)
  153.       (if (setq p (getpoint "\nOutput Point: "))
  154.         (mapcar        '(lambda (x)
  155.                    (_Solid:Make p x)
  156.                    (setq p (mapcar '+ '(0 -1200 0) p))
  157.                  )
  158.                 (vl-sort nl '(lambda (l1 l2) (< (car l1) (car l2))))
  159.         )
  160.       )
  161.     )
  162.   )
  163.   (princ)
  164. )

点评

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

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-8-30 11:36:52 | 显示全部楼层
eachy 发表于 2014-8-30 11:02
API 及 函数库 发布新版后再做为 "插件发布"

这个多长时间啊?

点评

xdrx_curve_intersectwith 很快了,瞬间 后面延迟可能是 Hatch_make 加显示稍停顿  详情 回复 发表于 2014-8-30 11:44
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2014-8-30 11:44:29 | 显示全部楼层
newer 发表于 2014-8-30 11:36
这个多长时间啊?

xdrx_curve_intersectwith 很快了,瞬间
后面延迟可能是 Hatch_make 加显示稍停顿

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

使用道具 举报

已领礼包: 75个

财富等级: 招财进宝

 楼主| 发表于 2014-8-30 16:12:55 | 显示全部楼层
本帖最后由 bbswen 于 2014-8-30 16:18 编辑

XDRX_DOCUMENT_ZOOMWINDOW
这个命令也是新增的吗?这个是新的API中的命令吧,

点评

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

使用道具 举报

已领礼包: 75个

财富等级: 招财进宝

 楼主| 发表于 2014-8-30 16:35:51 | 显示全部楼层
st2 (vl-remove nil lst2)
            nl         (mapcar
                   '(lambda (x)
                      (list
                        (car x)
                        (apply
                          '+
                          (mapcar 'car (mapcar 'xdrx_getarea (cdr x)))
                        )
                      )
                    )
                   (xd::list:groupbyindex lst2 0);;
;在执行到这句后,lst2最后一个值后,可能是存在溢出。

;((0 <图元名: 7eb5f0e0>) (1 <图元名: 7eb5f0d0>) (1 <图元名: 7eb5f0d8>))

;上句执行到最后一个值,提示:

;; 错误: 参数类型错误: numberp: (1.0 <图元名: 7eb5f0d8> <图元名: 7eb5f0d0>)

;;API8-10版本

                 )
      )
      (mapcar '(lambda (x / ent)
                 (if (not (zerop (car x)))
                   (progn (setq ent (xdrx_hatch_make (cadr x)))

点评

下载最新的 lisp 函数库,更新了 XD:ist:GroupByIndex ,这个函数源码在 "函数发布“  详情 回复 发表于 2014-8-30 16:43
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

发表于 2014-8-30 16:36:44 | 显示全部楼层
bbswen 发表于 2014-8-30 16:12
XDRX_DOCUMENT_ZOOMWINDOW
这个命令也是新增的吗?这个是新的API中的命令吧,

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

使用道具 举报

已领礼包: 593个

财富等级: 财运亨通

发表于 2014-8-30 16:43:52 | 显示全部楼层
bbswen 发表于 2014-8-30 16:35
st2 (vl-remove nil lst2)
            nl         (mapcar
                   '(lambda (x)


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

使用道具 举报

已领礼包: 75个

财富等级: 招财进宝

 楼主| 发表于 2014-8-31 19:50:48 | 显示全部楼层
感谢信“eachy”的更新,代码简洁,功能明了,不知道“eachy”测试的和发布是否一个版本,
先说下我的电脑城配置
winxp sp3 cad2007
加载开发接口,如下,
***   ≡ AutoCAD 应用程序开发接口XDRX_API For AutoCAD Build 2014.8.30 ≡  ***


AutoCAD Express Tools Copyright ?2002-2004 Autodesk, Inc.

晓东通用LISP函数库Build 2014.08.30加载完毕...Couldn't find OpenDCL.17.arx.

看下“eachy”的代码,在我电脑上的测试图, t1.gif
t2.gif
t3.gif
说下问题:
1,一个内圆时,外部的没有去掉,统计时也没有去了,
2,很多时,偶尔圆外的没有去掉,,
3,内圆很多位置,没有了,变空白了,

点评

在 CAD 2014 上使用正常,在 2008 上有你说的情况存在,经测试的确是 xdrx_point_isinside 函数造成,取点在第三象限时会有内外判断反了情况,等 API 更新  详情 回复 发表于 2014-9-1 08:36
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2014-8-31 20:04:01 | 显示全部楼层
本帖最后由 csharp 于 2014-8-31 20:55 编辑

这个里面用到的点在曲线内,应该有转 Ge ,所以和曲线显示大小有关,可以将 xdrx_doucument_zoomwindow放到生成 searchregions 之后, (apply 'xdrx_document_zoomwindow (xdrx_entity_box s2))

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-23 04:48 , Processed in 0.229969 second(s), 56 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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