Windows维度
你好我想使用lisp,使用元素的z值为窗口添加维度。
我使用由以下组成的“标准块”(附件):
WS和WH。WS=地板和窗台之间的高度WH=窗户的高度。
这个lisp可以这样工作:
选择“标准块”,并通过单击更改“标准文本值WS=11.11 WH=22.22”。
类似于:
拾取标准块
1单击=捕捉地板(拾取地板的z值)
2单击=捕捉窗台(拾取窗台的z值)
3单击=捕捉窗口顶部(拾取窗口顶部的z值)
WS=窗台z-地板z
WH=窗户顶部的z-窗台的z
非常感谢
窗户。图纸 dwg中没有块。我所看到的是由两行组成的多行文字。 对不起,是多行文字,但您可以根据需要更改。
谢谢 (defun c:Test ( / *error* doc enm obj ptBot ptTop)
(defun *error* (msg)
(vla-endundomark doc)
)
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(vla-endundomark doc)
(vla-startundomark doc)
(while
(and
(setq enm (car (entsel "\nSelect mtext: ")))
(or
(= "AcDbMText" (vla-get-objectname (setq obj (vlax-ename->vla-object enm))))
(prompt "\nError: not an mtext ")
)
(setq ptBot (getpoint "\nBottom of frame: "))
(setq ptTop (getpoint ptBot "\nTop of frame: "))
(setq ptBot (trans ptBot 1 0)) ; in WCS.
(setq ptTop (trans ptTop 1 0))
)
(vla-put-textstring
obj
(strcat ; "WS=11.11\\PWH=22.22"
"WS=" (rtos (caddr ptBot) 2 2)
"\\P"
"WH=" (rtos (- (caddr ptTop) (caddr ptBot)) 2 2)
)
)
)
(vla-endundomark doc)
(princ)
) 谢谢
我稍微修改了你的代码:
WS=底部框架-地板标高
再次感谢
(defun c:Test ( / doc enm obj ptFloor ptBot ptTop)
(command "UCS" "world")
(setq doc (vla-get-activedocument (vlax-get-acad-object)))
(vla-endundomark doc)
(vla-startundomark doc)
(while
(and
(setq enm (car (entsel "\nSelect mtext or Enter to quit: ")))
(or
(= "AcDbMText" (vla-get-objectname (setq obj (vlax-ename->vla-object enm))))
(prompt "\nError: not an mtext ")
)
(setq ptFloor (getpoint "\nFloor level: "))
(setq ptBot (getpoint "\nBottom of frame: "))
(setq ptTop (getpoint ptBot "\nTop of frame: "))
(setq ptFloor (trans ptFloor 1 0))
(setq ptBot (trans ptBot 1 0))
(setq ptTop (trans ptTop 1 0))
)
(vla-put-textstring
obj
(strcat ; "WS=11.11\\PWH=22.22"
"WS=" (rtos (/ (- (caddr ptBot) (caddr ptFloor)) 1000.) 2 2)
"\\P"
"WH=" (rtos (/ (- (caddr ptTop) (caddr ptBot)) 1000.) 2 2)
)
)
)
(vla-endundomark doc)
(princ)
(command "UCS" "_p")
)
确实没有理由更改UCS。代码中对trans函数的调用将点从当前UCS转换为WCS。
页:
[1]