明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 493|回复: 5

[提问] 删去圆内的圆和块,如何优化代码或者有更快捷的方法?

[复制链接]
发表于 2019-7-28 14:55 | 显示全部楼层 |阅读模式
自己写了一个程序,功能是选择一个圆,然后删去所选圆内的圆和块。
但是处理速度太慢了,如何优化?或者有更快捷的方法?
自写代码,初学者,请各位大佬指教。
(defun c:dw (/ e r layer s n cen in_s lst stye in_p x)
  (vl-load-com)
  (command "_.undo" "be")
  (princ "\n删去所选圆内的圆孔和块.")
  (setq e (car (entsel "\n请选择圆:")))
  (setq r (* (vlax-get (vlax-ename->vla-object e) 'Diameter) 0.5))
  (setq layer (vlax-get (vlax-ename->vla-object e) 'Layer))
  (setq s (ssget "X" (list '(0 . "CIRCLE")(cons 8 layer)(cons 40 r))));选择所有圆
  (setq lst nil)
(repeat (setq n (sslength s));循环每个圆内的圆和块处理
  (setq e (ssname s (setq n (1- n))))
  (setq r (* (vlax-get (vlax-ename->vla-object e) 'Diameter) 0.5))
  (setq layer (vlax-get (vlax-ename->vla-object e) 'Layer))
  (setq cen (vlax-get (vlax-ename->vla-object e) 'Center))
  (setq in_s (ssget "X" (list (cons 8 (strcat "~"layer)))));选择所有物体
  (repeat (setq i (sslength in_s));单个圆内的圆和块处理
    (setq e (ssname in_s (setq i (1- i))))
    (setq stye (cdr (assoc 0 (entget e))))
    (cond ((= "CIRCLE" stye)
      (setq in_p (vlax-get (vlax-ename->vla-object e) 'Center))
      )
          ((= "INSERT" stye)
      (setq in_p (vlax-get (vlax-ename->vla-object e) 'InsertionPoint))
           )
          )
    (if (and (equal (car in_p) (car cen) r)   ;处理符合在圆的范围内的圆和块
             (equal (cadr in_p) (cadr cen) r)
             )
      (setq lst (cons e lst))
      )
    )
  )
(foreach x lst
  (command "erase" x "")
  )
  (command "_.undo" "e")
  (princ)
  )

发表于 2019-7-28 16:21 | 显示全部楼层
数据量太大的时候,lisp再怎么优化也没用,考虑用C#或者C++吧
 楼主| 发表于 2019-7-28 16:40 | 显示全部楼层
satan421 发表于 2019-7-28 16:21
数据量太大的时候,lisp再怎么优化也没用,考虑用C#或者C++吧

不懂C#和C++ 有相关的教程吗?
发表于 2019-7-28 17:05 | 显示全部楼层
一点不懂的话,即使有教程,你短时间也做不出来,得安装Visual Studio,C++开发Arx,不同版本CAD还得用对应版本的VS和SDK。C#简单点,得引用对应版本CAD的库文件。
发表于 2019-7-28 17:32 | 显示全部楼层
未调试证实...

单一图元
个人的常态是调用
(entdel x)  取代 (command "erase" x "")

效益差别不明...

另或可调试 vla-Delete
发表于 2019-7-28 18:43 来自手机 | 显示全部楼层
command能不用尽量不用
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-4 23:40 , Processed in 0.199293 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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