很多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 "秒"))
- )
- )
- )
- )
- )
- )
|