434939575 发表于 2018-7-26 21:10:46

请问修剪内部比外部慢几十甚至百倍。不知道什么问题

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

pengfei2010 发表于 2018-7-27 08:12:57

不要用 command,自己想一下算法 就可以解决 的, 提供思路,先求交点,采用几何算法 交点打断,然后重绘,速度 很快 的

434939575 发表于 2018-7-27 08:33:36

pengfei2010 发表于 2018-7-27 08:12
不要用 command,自己想一下算法 就可以解决 的, 提供思路,先求交点,采用几何算法 交点打断,然后重绘 ...

谢谢,我也是这么考虑的.就是不明白修剪内部为什么慢上百倍,外部快得很。

434939575 发表于 2018-7-27 11:28:26

本帖最后由 434939575 于 2018-7-27 11:31 编辑

如果包含circle,spl,el,arc这种计算可能比较繁琐,我想法把修剪边界中间打断为2部分,要修剪部分复制一份,做两次修剪,因为只一个交点的修剪万个都是秒杀,这样也很快了。
页: [1]
查看完整版本: 请问修剪内部比外部慢几十甚至百倍。不知道什么问题