请问修剪内部比外部慢几十甚至百倍。不知道什么问题
很多line或pline,两端通过矩形a.矩形a内部修剪很慢,外部修剪很快,其他地方不变,只是偏移一个图形选内,外,那里变化一下,其他代码均不变,速度相差,上百倍,几千条线实验,(defun pts (SS0 / elist n ptlist) ;端点列表
(setq ptlist nil)
(setq elist (entget SS0))
(foreach n elist
(if(or (= 10 (car n)) (= 11 (car n))) ;同时处理PLINE和 LINE
(setq ptlist (cons (cdr n) ptlist))
)
)
(setq ptlist (reverse ptlist))
)
(defun trim
(na / las obj os ptlist sss x)
(setq os (getvar "osmode"))
(setvar "osmode" 0)
(setq Obj (vlax-ename->vla-object na))
(
vla-offset obj
;-0.3
0.3 ;这里内外偏移防误选
)
(setq las (entlast))
(setq ptlist(pts las))
(entdel las)
(command "ZOOM" "o" na "")
;;------------------------------------------------------
(repeat 2
(command "regen" "")
(if (SETQ
SSS (SSGET "f"
ptlist
'((0 . "LWPOLYLINE,LINE,ARC,CIRCLE,ELLIPSE,hatch"))
)
)
(progn (command ".trim" na "" "f")
(foreach x ptlist (command x))
(command "" "")
) ;progn
)
) ;repeat
;;------------------------------------------------------
(command "zoom" "p")
;;;;;;;;;;
(setvar "osmode" os)
)
(defun c:tt ( / d end-time h m na s start-time ts) ;修剪内部比外部慢几十甚至百倍。不知道什么问题
(setq na (car (entsel "\n pick")))
(setq start-time (* 86400 (getvar "tdusrtimer")))
(trim na)
(if start-time
(progn
(setq end-time (* 86400 (getvar "tdusrtimer"))
ts (- end-time start-time)
d (rtos (fix (/ ts 86400.0)) 2 0)
ts (rem ts 86400)
h (rtos (fix (/ ts 3600.0)) 2 0)
ts (rem ts 3600)
m (rtos (fix (/ ts 60.0)) 2 0)
ts (rem ts 60)
s (rtos ts 2 2)
)
(if (> (distof d) 0)
(princ (strcat "\n用时 : " d "天" h "小时" m "分" s "秒"))
(if (> (distof h) 0)
(princ (strcat "\n用时 : " h "小时" m "分" s "秒"))
(if (> (distof m) 0)
(princ (strcat "\n用时 : " m "分" s "秒"))
(princ (strcat "\n用时 : " s "秒"))
)
)
)
)
)
)
不要用 command,自己想一下算法 就可以解决 的, 提供思路,先求交点,采用几何算法 交点打断,然后重绘,速度 很快 的 pengfei2010 发表于 2018-7-27 08:12
不要用 command,自己想一下算法 就可以解决 的, 提供思路,先求交点,采用几何算法 交点打断,然后重绘 ...
谢谢,我也是这么考虑的.就是不明白修剪内部为什么慢上百倍,外部快得很。 本帖最后由 434939575 于 2018-7-27 11:31 编辑
如果包含circle,spl,el,arc这种计算可能比较繁琐,我想法把修剪边界中间打断为2部分,要修剪部分复制一份,做两次修剪,因为只一个交点的修剪万个都是秒杀,这样也很快了。
页:
[1]