与块插入点的距离
我正在尝试使用LISP来确定选定对象到最近直线的距离,然后将该值放入相应的属性值,称为“偏移”。我有将值放入偏移属性的代码,但在如何确定块到最近直线的距离方面遇到了问题。
为了确定基线,我的代码是:
(defun EXAOS_CreateBaselineSet ()
(setq exaosBaselineSet
(ssget "_X"
(list
(cons 0 "ARC,CIRCLE,ELLIPSE,LINE,LWPOLYLINE,POLYLINE,SPLINE")
(cons 8 "GPS-ROAD,BASELINE,EOG,EOP,FOGLINE,FOC")
)))
)
现在,它只是在计算如何获得从块的插入到上面基线集最近点的距离。 可能使用以下功能:
(defun ShortestDistanceFromPointtoSet(sset pt/i lst)(vl load com)(if sset(repeat(setq i(sslength sset))(setq lst(cons(distance pt(vlax curve getClosestPointto(ssname sset(setq i(1-i)))pt))lst))(car(vl sort lst' 谢谢李,这很有帮助。
但是,我在代码中遇到了一个错误,无法将值插入到我的块中,如果有人可以帮助我了解其中的位置和原因的话。
我选择要应用距离的块,然后选择点,得到一个错误“错误:ActiveX服务器返回错误:未知名称:名称”。
还有,如果我在不同的距离选择多个块,有没有办法得到它,它会根据插入点在属性中输入每个块的距离值?
纤维标记试验。图纸
EXAOS_Main-0039。LSP 选择曲线对象后,包含块的SelectionSet不再是“ActiveSelectionSet”。
试试这个:
(定义c:测试(/blocks di e i o pt s s1 s2)(vl负载com)(setq blocks’(“光纤标记管STA”)i-1)(if(和(setq s1(ssget(list’(0。“INSERT”)(cons 2(应用‘strcat(cons”`*U*“(mapcar’(lambda(s)(strcat,s))块)))))(setq s2(ssget“_X”(list(cons 0“圆弧、圆、椭圆、直线、*多段线、样条”)(cons 8“GPS-ROAD、基线、EOG、EOP、FOGLINE、FOC”)(setq pt(getpoint“\n选择点:)(setq di(ShortestDistanceFromPointtoSet s2(trans pt 1 0)))(而(setq e(ssname s1(setq i(1+i)))))(if(和(vl位置(strcase(vlax get property)(setq o(vlax ename->vla object e))(if(vlax-property-available-p o'EffectiveName'EffectiveName'Name))(blocks)(eq(vla get isDynamicBlock o):vlax true))(LM:SetDynamicPropValue o“Offset”di))(princ))(defun shortestdistance frompointtoset(sset pt/i lst)(vl load com)(if sset(repeat(setq i(sslength sset))(setq lst(cons(距离pt(vlax curve GetClosestPoint to(ssname sset(setq i(1-i)))pt))lst)))(car(vl sort lst' 我已将你的网站添加到书签。顺便说一句,网站很好!
使用上述代码后,我通过“错误:错误参数类型:VLA-OBJECT nil”得到了一个错误
谢谢
哎呀!我更改了vlax for循环,但没有更改变量“x”。更新于^ 谢谢,这太棒了!我现在唯一的问题是:
如果我在不同的距离选择多个块,有没有办法得到它,它会根据插入点在属性中输入每个块的距离值?
理想情况下,我希望能够分组选择距离直线不同的几个块,并填充每个值,而无需选择块点。
我试着做(cdr(assoc 10 s1))而不是提示块的get点,但它不喜欢这样。这是我的书中用来获取中心点的一个例子。我试过谷歌搜索,有没有一个地方列出了做“cons”和“assoc”的组码?
http://docs.autodesk.com/ACD/2011/ENU/filesDXF/WSfacf1429558a55de185c428100849a0ab7-5df0.htm
我稍后会看一下代码 令人惊叹的谢谢 快速修改,未经测试:
(定义c:测试(/blocks di e i o pt s s1 s2)(vl负载com)(setq blocks’(“光纤标记管STA”)i-1)(if(和(setq s1(ssget(list’(0。“INSERT”)(cons 2(应用‘strcat(cons”`*U*“(mapcar’(lambda(s)(strcat,s))块)))))(setq s2(ssget“_X”(list(cons 0“圆弧、圆、椭圆、直线、*多段线、样条”)(cons 8“GPS-ROAD、基线、EOG、EOP、FOGLINE、FOC”))(而(setq e(ssname s1(setq i(1+i))))(if(和(vl位置(strcase)(vlax get property(setq o(vlax ename->vla object e))(if(vlax-property-available-p o‘EffectiveName)’EffectiveName)))块)(等式(vla get isDynamicBlock o):vlax true)(setq di(shortestdistancefromppointtoset s2(trans(cdr(assoc 10(entget e)))e 0))(LM:SetDynamicPropValue o“Offset”di))(princ))(defun shortestdistancefromppointtoset(sset pt/i lst)(vl load com)(if sset(repeat(setq i(sslength sset))(setq lst(cons(距离pt(vlax curve getClosestPointto(ssname sset(setq i(1-i)))pt))lst))(car(vl sort lst'
页:
[1]
2