- 积分
- 10444
- 明经币
- 个
- 注册时间
- 2003-3-23
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
;等分点打断非闭合曲线法一
(defun c:dividebreak1 ()
(vl-load-com)
(command "_undo" "be")
(if (null num) (setq num 2))
(setq setnum (getint (strcat "\n请指定要等分点打断的段数<" (rtos num) ">:")))
(if setnum (setq num setnum))
(princ "\n请选择要等分点打断的非闭合曲线:")
(setq ss (ssget)) ;(ssget '((0 . "CIRCLE,ELLIPSE,*LINE,ARC")))
(setq n 0)
(if ss
(repeat (sslength ss)
(setq ssn (ssname ss n))
(setq curve (vlax-ename->vla-object ssn))
(if (vlax-curve-isClosed curve)
(princ "\n所选对象为封闭对象,程序无法处理。")
(progn
(setq len (vlax-curve-getdistatparam curve (vlax-curve-getendparam curve)))
(setq dlen (/ len num))
(repeat (- num 1)
(setq pt (vlax-curve-getPointAtDist curve dlen))
(command "break" ssn pt "@")
(setq ssn (entlast))
(setq curve (vlax-ename->vla-object ssn))
)
)
)
(setq n (1+ n))
)
)
(command "_undo" "e")
(princ)
)
;等分点打断非闭合曲线法二
(defun c:dividebreak2 ()
(vl-load-com)
(command "_undo" "be")
(if (null num) (setq num 2))
(setq setnum (getint (strcat "\n请指定要等分点打断的段数<" (rtos num) ">:")))
(if setnum (setq num setnum))
(princ "\n请选择要等分点打断的非闭合曲线:")
(setq ss (ssget)) ;(ssget '((0 . "CIRCLE,ELLIPSE,*LINE,ARC")))
(setq n 0)
(if ss
(repeat (sslength ss)
(setq ssn (ssname ss n))
(setq curve (vlax-ename->vla-object ssn))
(if (vlax-curve-isClosed curve)
(princ "\n所选对象为封闭对象,程序无法处理。")
(progn
(setq len (vlax-curve-getdistatparam curve (vlax-curve-getendparam curve)))
(setq dlen (/ len num))
(setq ss1 (ssget "x"))
(command "divide" ssn num) ;不加这行多段线会不准确,不知为什么?
(setq ss2 (ssget "x"))
(vl-cmdf "select" ss2 "r" ss1 "")
(setq ssp (ssget "P"))
(repeat (- num 1)
(setq pt (vlax-curve-getPointAtDist curve dlen))
(command "break" ssn pt "@")
(setq ssn (entlast))
(setq curve (vlax-ename->vla-object ssn))
)
(command "_erase" ssp "")
)
)
(setq n (1+ n))
)
)
(command "_undo" "e")
(princ)
)
;为什么法一打断多段线时有时结果不正确,而法二却正确呢。怪事,哪位高手知道是什么回事。加不加(command "divide" ssn num)这行代码能起到什么作用呢,为什么不加就不正确了呢。
|
|