whosa 发表于 2022-7-5 16:01:04

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
 
非常感谢
窗户。图纸

Roy_043 发表于 2022-7-5 16:17:36

dwg中没有块。我所看到的是由两行组成的多行文字。

whosa 发表于 2022-7-5 16:27:20

对不起,是多行文字,但您可以根据需要更改。
 
谢谢

Roy_043 发表于 2022-7-5 16:39:37

(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)
)

whosa 发表于 2022-7-5 16:57:33

谢谢
 
我稍微修改了你的代码:
 
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")
)

Roy_043 发表于 2022-7-5 17:12:42

确实没有理由更改UCS。代码中对trans函数的调用将点从当前UCS转换为WCS。
页: [1]
查看完整版本: Windows维度