偏移2行添加尺寸
我想要一个lisp,可以在平面图中添加带束。我看到它工作的方式是我选择一个网格,它在一个叫做混凝土的层上每侧偏移1200mm的线,并设置为线型“awthidden2”。我希望它也能自动添加2400的维度,以及一个我们称之为SYM-SlabTag的块(不确定这个是否可行,以及编写lisp的人是否需要查看该块) 你能上传一个样本吗 如果你能上传一个你想要完成的事情的样本,那么这个模块将真正有助于理解正在发生的事情。 干得好。目前,我只是将其全部放在一个dwg上,但实际情况是网格将出现在外部参照上,以及我想要在新图形上的所有其他项目上。因此,我将打开一个没有任何内容的新图形,在网格中进行外部参照,启动lisp,它将请求网格,我选择网格(选择网格的顶部和底部),它将两条绿线放在(网格每侧1200)上,带有尺寸和“slab tag”谢谢大家测验图纸 很难在外部参照的每一侧偏移线,这就是我发现的问题。
因为,很明显,对于块,无法从块本身偏移任何线。 我的措辞有点糟糕;它不必偏移这些线。我看到的是,我们有一条网格线,lisp可以要求我们提供中心线(选择网格的最底部和最顶部点),然后它知道最外面的线将是我们选择的点的任意一边1200。然后在中间添加尺寸和标签。在某种程度上,它就像一条多行,其中有两条虚线,多行的中心是网格(除了我不想要多行,这只是一个例子),希望这能解决问题。 试试这个:
(defun c:gridline (/ *error* varLst oldVars tpt bpt ang llpt l1 lrpt l2 l1mid l2mid)
; --- Error Trap ---
(defun *error* (msg)
(mapcar 'setvar varLst oldVars)
(if (= msg "")
(princ "\nFunction Complete.")
(princ "\nError or Esc pressed... ")
) ;_end if
(princ)
) ; end of *error*
(setq varLst(list "CMDECHO" "CLAYER" "OSMODE")
oldVars (mapcar 'getvar varLst)
) ; end setq
; --- Error Trap ---
(setvar "cmdecho" 0)
(defun makelay (x)
(if (not (tblsearch "Layer" x))
(command "-layer" "m" x "")
) ;_end if
) ;_end defun
(if (and
(setq tpt (getpoint "\nSelect Top Point of Gridline: "))
(setq bpt (getpoint "\nSelect Base Point of Gridline: "))
) ;_end and
(progn
(setq ang (angle tpt bpt))
(setvar "osmode" 0)
(makelay "Concrete")
(setvar "clayer" "Concrete")
(command "_line"
(setq llpt (polar tpt (+ ang (/ pi 2)) 1200))
(polar llpt ang (distance tpt bpt))
""
) ;_end command
(setq l1 (entlast))
(command "_line"
(setq lrpt (polar tpt (- ang (/ pi 2)) 1200))
(polar lrpt ang (distance tpt bpt))
""
) ;_end command
(setq l2 (entlast))
(command "_chprop" l1 l2 "" "lt" "awthidden2" "")
(setq l1mid (polar llpt ang (/ (distance tpt bpt) 2)))
(setq l2mid (polar lrpt ang (/ (distance tpt bpt) 2)))
(makelay "Dimensions")
(setvar "clayer" "Dimensions")
(command "_dimaligned" l1mid l2mid l1mid)
(alert
"\nI'm not sure what you would like done with the block...
\nCheers
\nLee Mac."
) ;_end alert
) ;_end progn
(alert "\nProgram Requires Two Selected Points.")
) ;_end if
(*error* "")
) ;_end defun
太棒了,李,你是冠军。唯一的问题是它不会插入块(你知道的,因为对话框会告诉我),我只想将块插入标注下,在标注的中间(只要它不与标注冲突,就可以)。这可能吗?谢谢你的帮助。
我可以补充一下,但块是存储在特定的文件路径下,还是仅存储在ACAD搜索目录中?如果在搜索目录中,我只需要块名,如果在其他地方,我需要块名和完整文件路径来添加到LISP。或者我可以把那部分留白让你填写。 现在没有太多的时间来寻找它,但是如果你留下我需要填写的区域(可能用粗体字,比如在这里添加文件路径/名称),这样我就不用再麻烦你问它放在哪里了
页:
[1]
2