更改多边形的长度
我刚刚开始使用AutoLisp,已经为此奋斗了一段时间,但仍然不知道从哪里开始。我被要求创建一个例程,该例程将根据线型将多边形线条缩短到设定数量的最近倍数,缩短距离选择位置最远的一端。我们需要这样做,以便可以重新调整虚线的大小,使其在开始和结束时具有完整的虚线。
这需要应用于5种集合线类型。
我将看到它的工作原理如下:
1) 用户选择末端的一条线保持不变
2) Autocad缩短该线,使其以一个完整的破折号开始和结束。
3) 结束
我可以使用lengthen命令和DE选项(以及一个计算器)来完成这项工作,但我不知道如何实现自动化。
如果你能给我任何帮助,我将不胜感激。 如果您知道计算结果,只需使用Length total并选择对象。 我希望使用以下内容:
(命令“lengthen”暂停“de”
计算不是问题,我只是不知道如何得到原始长度,然后插入调整。
我们必须在绘图中经常这样做,试图用眼睛来做,或者计算调整是很痛苦和耗时的。 试试这个。你没有给我计算结果,所以你必须改变那部分。
(defun c:Test (/ #Ent #Value)
(vl-load-com)
(and (setq #Ent (entsel "\nSelect *line: ")) ; select object
(vl-position (cdr (assoc 0 (entget (car #Ent)))) '("LWPOLYLINE" "LINE")) ; verify object type
(setq #Value (* 0.5 (vla-get-length (vlax-ename->vla-object (car #Ent))))) ; convert to vla-object, extract length and make calculations
(vl-cmdf "_.lengthen" "_total" #Value #Ent) ; execute lengthen command on selected object
(princ (strcat "\nNew Length: " (vl-princ-to-string #Value))) ; print results to command line
) ;_ and
(princ)
) ;_ defun Alanjt,
非常感谢你这么快的回复,这正是我想要的。
只有一个问题,公式必须根据所选的线型进行更改,那么可以检索线型以在if/true语句中使用吗?
LtRimmer公司 没问题。
见上文,我更新了评论。
线型是在对象级别还是在图层级别设置? 它们被设置在一个对象上,即它们都在同一层上,线型发生了变化。 尝试以下操作:
(defun c:Test (/ #Ent #Obj #Length #LType #Value)
(vl-load-com)
(and (setq #Ent (entsel "\nSelect *line: "))
(vl-position (cdr (assoc 0 (entget (car #Ent)))) '("LWPOLYLINE" "LINE"))
(setq #Obj (vlax-ename->vla-object (car #Ent))
#Length (vla-get-length #Obj)
#LType(strcase (vla-get-linetype #Obj))
) ;_ setq
(cond
;; hidden2
((eq #LType "HIDDEN2") (setq #Value (* 0.5 #Length)))
;; phantom2
((eq #LType "PHANTOM2") (setq #Value (+ 3 #Length)))
;; no match
(T (alert "No matching Linetypes!"))
) ;_ cond
(vl-cmdf "_.lengthen" "_total" #Value #Ent "")
(princ (strcat "\nNew Length: " (vl-princ-to-string #Value)))
) ;_ and
(princ)
) ;_ defun 现在看起来不错,
最后一个问题是,如果在不退出命令的情况下选择具有不同线型的第二条直线,则会将长度更改为前一种线型的长度。
是否可以在更改每条线的长度后再次启动该功能,或者干脆一起退出?
我真的很感激这一点,我已经推迟了很长时间看它,这都是因为我张开了嘴,说应该有办法;-)
哎呀,忘记了一个“”(代码在上面更新了)。
很高兴它对你有用。
页:
[1]
2