MSasu 发表于 2022-7-5 20:40:33

李,恐怕2007版的PEDIT命令不支持样条线作为输入。
我认为编程上的替代方法是用适当的defame解析样条线实体,并用多段线跟踪它。不知道如何确定诽谤的大小。

kwwong6 发表于 2022-7-5 20:43:06

耶!李当然可以工作。但结果差距很小。我附上一张图给你看。
 
谢谢
样条曲线。拉链

Lt Dan's l 发表于 2022-7-5 20:45:44


(defun tracecurve ( obj di / cycle st )
   (defun cycle ( st stp seg l )
   (cond
       ( (< (+ st seg) stp )
         (cycle (+ seg st) stp seg
         (cons (vlax-curve-getPointAtParam obj st) l)
         )
       )
       ( t
         (and (< st stp)
         (setq l
             (cons (vlax-curve-getPointAtParam obj st) l)
         )
         )
         (reverse
         (cons (vlax-curve-getPointAtParam obj stp) l)
         )
       )
   )
   )
   (if
   (and (not (minusp di))(not (zerop di))
       (vl-position
         (vla-get-objectname
         (cond
             ( (eq 'ENAME (type obj))(vlax-ename->vla-object obj ))
             ( obj )
         )
         ) '("AcDbCircle" "AcDbArc" "AcDbEllipse" "AcDbSpline")
       )
   )
   (cycle
       (setq st (vlax-curve-getStartParam obj))
       (vlax-curve-getEndParam obj)
       (- (vlax-curve-getParamAtDist obj 0.125) st)
       nil
   )
   )
)

 
修改李的建议,虽然我不知道为什么他的方式不适合你。
5

MSasu 发表于 2022-7-5 20:48:22

@kwwong6和Dan少尉的腿:你们是说Lee的代码在你们的AutoCAD 2007上运行吗?!?

kwwong6 发表于 2022-7-5 20:52:43

 
可以,在AutoCAD 2007上运行没有问题。只是有一个小差距,因为我上传后12附图。
 
非常感谢丹中尉的腿。你的代码真的有效!!!!!但是如果选择多条样条线,你能修改你的代码吗?

Lee Mac 发表于 2022-7-5 20:56:22

 
MSasu,
 
我在上一篇文章中提到了第4篇文章,这个解决方案不涉及PEDIT的使用

Lee Mac 发表于 2022-7-5 21:02:46

 
Kwong,
 
使用此方法永远无法获得精确的边界框,因为此方法近似于具有离散点数的连续曲线;要获得真正的精度,需要无穷多的点。当然,您可以通过增加近似中的点数来提高精度,但会严重损失性能。

MSasu 发表于 2022-7-5 21:02:57

那是我的错误。很抱歉给您带来不便!

kwwong6 发表于 2022-7-5 21:07:27

谢谢李提供的信息。但是丹中尉的腿做的代码对我来说真的很好用。有谁能把这个代码做成多选样条?
 
提前谢谢。
页: 1 [2]
查看完整版本: 如何创建边界框