mkp6486 发表于 2022-7-6 07:54:54

LISP需要重命名空格b

大家好,我是新来的,希望能找到一些帮助。我在AutoCAD MEP中使用空间,我希望能够通过选择空间,然后选择建筑师提供的房间名称/编号文本,轻松重命名我的空间。这将节省大量时间,因为必须键入数百个房间的名称和编号来重命名这些空间。
 
为了清晰起见,我附上了一张图片。
 
这将允许我导出清晰标记的gbXML空间/分区数据,以进行冷/热负荷分析。
 
如果不存在这样的lisp例程,有人能为我指出将选定文本插入属性的lisp的正确方向吗?
 
非常感谢您的帮助!

MSasu 发表于 2022-7-6 08:10:09

看起来您愿意用AutoLISP修改MEP的自定义图元-我不知道Vanilla AutoCAD中有空间图元。因此,也很容易从使用MEP的人那里获得支持。
为了查看此实体的关联列表是否可以访问和修改,请将下面的代码粘贴到命令行,选择一个空格项并将结果发布在此处。非常感谢。
(entget (car (entsel)))

mkp6486 发表于 2022-7-6 08:18:05

谢谢你的回复。以下是命令的结果:
 
Command: (entget (car (entsel)))
Select object: ((-1 . <Entity name: 7ffff265c00>) (0 . "AEC_SPACE") (5 .
"5BD0") (102 . "{ACAD_XDICTIONARY") (360 . <Entity name: 7ffff265c10>) (102 .
"}") (330 . <Entity name: 7ffff2459f0>) (100 . "AcDbEntity") (67 . 0) (410 .
"Model") (8 . "G-Spce"))

MSasu 发表于 2022-7-6 08:26:25

不幸的是,该实体的功能似乎没有直接公开,因此,如果没有访问MEP,将非常需要调试代码来修改它。

mkp6486 发表于 2022-7-6 08:32:54

好的,明白了。无论如何,谢谢你抽出时间。
 
也许MEP的其他人可以提供一些见解。

BlackBox 发表于 2022-7-6 08:44:03

欢迎来到CADTutor!
 
如果文本实体没有任何不可靠的格式,则应该可以:
 

(defun c:RS () (c:RenameMepSpace))
(defun c:RenameMepSpace(/ *error* _Nomutt)
(princ "\rRENAMEMEPSPACE ")
(vl-load-com)

(defun *error*(msg)
   (and oldNomutt (setvar 'nomutt oldNomutt))
   (if acDoc
   (vla-endundomark acDoc))
   (cond ((not msg))                                                   ; Normal exit
         ((member msg '("Function cancelled" "quit / exit abort")))    ; <esc> or (quit)
         ((princ (strcat "\n** Error: " msg " ** "))))               ; Fatal error, display it
   (princ))

(defun _Nomutt(on /)
   (if on
   (setvar 'nomutt 0)
   (setvar 'nomutt 1)))

((lambda (acDoc oldNomutt / ssSpace ssText name)
    (if (and (_Nomutt T)
             (princ "\nSelect space object to name: ")
             (_Nomutt nil)
             (setq ssSpace (ssget ":S:E:L" '((0 . "AEC_SPACE"))))
             (_Nomutt T)
             (princ "\nSelect text to name space object: ")
             (_Nomutt nil)
             (setq ssText (ssget ":S:E:L" '((0 . "MTEXT,TEXT")))))
      (progn
      (vla-startundomark acDoc)
      (setq name (vla-get-textstring
                     (vlax-ename->vla-object
                     (ssname ssText 0))))
      (while (vl-string-search "\\P" name)
          (setq name (vl-string-subst " " "\\P" name)))
      (vla-put-name
          (vlax-ename->vla-object (ssname ssSpace 0))
          name)
      (_Nomutt T)
      (prompt (strcat "\n\nMEP Space renamed>>" name))
      (*error* nil))
      (cond (ssText (*error* "No space selected"))
            ((*error* nil)))))
   (vla-get-activedocument (vlax-get-acad-object))
   (getvar 'nomutt)))

 
**使用AutoCAD MEP 2012测试

mkp6486 发表于 2022-7-6 08:48:14

哇,太快了!非常感谢!

BlackBox 发表于 2022-7-6 09:02:05

 
很乐意帮忙。
页: [1]
查看完整版本: LISP需要重命名空格b