据我所知,演示lisp将为您提供正确的长度。
麻烦?以什么方式CafeJr?是否一次性选择所有实体?我们可以修改代码,以识别哪些行放在哪里,如果您希望这样做的话。
干得好:
(Defun c:demo (/ pt ent len sp ep pt1)
(if (setq pt nil
ss (ssget '((0 . "CIRCLE,ARC,*LINE")))
)
(repeat (setq i (sslength ss))
(setq ent (ssname ss (Setq i (1- i)))
len (vlax-curve-getDistAtParam ent (vlax-curve-getEndParam ent))
sp (Vlax-curve-getstartpoint ent)
ep (Vlax-curve-getendpoint ent)
)
(if (null pt)
(setq pt (getpoint "\nPick start point:"))
)
(entmakex
(list (cons 0 "LINE")
(cons 10
(setq pt1 (list (min (Car sp) (car ep)) (cadr pt)))
)
(cons 11 (polar pt1 (* pi 1.5) len))
)
)
)
)
(princ)
) pBe,我现在不能尝试。。。明天我会做的。。。所以,问题是原始多段线的长度与创建的线不同,正如我在这里展示的第二个文件!。。。我不知道为什么会这样,所以,线条的长度与普林斯不匹配。。。 只要实体不重叠并水平排列,这将起作用。
(defun C:test (/ ss p l i d v)
(setq ss (ssget "_:L" '((0 . "CIRCLE,ARC,*OLYLINE")))
p(getpoint "\nPick a point")
d(getdist p "\nDistance between lines ; ")
)
(foreach x
(vl-sort
(repeat (setq i (sslength ss))
(setq i (1- i)
l (cons (ssname ss i) l)
)
)
(function
(lambda (x1 x2)
(<
(car
(cdr
(assoc 10
(entget x1)
)
)
)
(car
(cdr
(assoc 10
(entget x2)
)
)
)
)
)
)
)
(setq v (vlax-ename->vla-object x)
l (cond
((vlax-property-available-p v 'length) (vla-get-length v))
((vlax-property-available-p v 'circumference) (vla-get-circumference v))
((vlax-property-available-p v 'arclength) (vla-get-arclength v))
)
)
(entmake
(list
(cons 0"LINE")
(cons 10 p)
(cons 11 (polar p (* pi 1.5) l))
)
)
(setq p (polar p 0 d))
)
(princ)
)
(vl-load-com) 现在它开始工作了。。。谢谢pBe和jandiala,做一个应用程序对我有很大帮助!。。。我很感激!!!。。。我在文件2上只有一行(附在另一篇帖子上),长度不太长,但没问题。。。
很高兴它对你有用。
这一次会是什么? 别担心pBe。。。你写的代码帮了我很大的忙!!!。。。那么,给你看看我在说什么见附件!。。。项目103。。。
再次感谢并问候。。。
PLs 3的长度。图纸 pBe,可以在写之前检查长度吗?。。。要确认长度数据?!。。。
正如jdiala所说。只要实体不重叠。简单地说,第103位有2项。实际上是135和134
为什么需要检查长度?该程序为您实现了这一点。
pBe,非常感谢您的帮助!!!。。。它的工作,因为我需要好!。。。我真的很惭愧,第103项上有2个实体,因为我没有看到它!。。。好吧,我错了!。。。“检查”只是确认读取和拉出了多少物体的一种方法,这可能有助于避免它,也可能是另一个人重复同样的错误。。。
页:
1
[2]