这个口齿不清需要帮助
大家好!我必须在现有块(RMELDER.dwg)的顶部放置一个块(BISATT.dwg)。
我在这个论坛上找到了一个lisp(FOO.lsp),它可以把一个块放在一个已有的块上。然而,它每次只能进行1次拦截。我想选择所有RMELDER块,运行lisp将BISATT块放在所有RMELDER块的顶部,接管块比例,并从激活块RMELDER复制属性(TAG1和HYPERLINK)
提前感谢
傅。lsp
测试。图纸
比萨特。图纸 pmxcad,
在这里,但要小心,因为在您的绘图中的每个块
将覆盖块BISATT。
ymg公司
(defun c:test ()
; Be careful with this routine as Every Block in your Drawing will be;
; Overlayed with block BISATT ;
(if (and (setq ss (ssget "_X" '((0 . "INSERT"))))
(findfile "BISATT.dwg")
)
(repeat (setq i (sslength ss))
(command "._-insert""BISATT" (cdr (assoc 10 (entget (ssname ss (setq i (1- i)))))) 1.0 1.0 0.0)
)
(cond
(ss (prompt "\n** \"BISATTdwg\" cannot be found ** "))
(t(prompt "\n** Nothing selected ** "))
)
)
)
好的,谢谢你的回答,但是。。。。。。。。
我只需要在所选块的顶部使用BISATT块,如果可能的话,可以将属性数据从BISATT块下的块复制到BISATT块。
提前感谢
Pmxcad pmxcad,
当我在随附的图纸上运行它时,我确实在门的原点插入了bisatt块。
但是,图形中的任何块似乎都没有属性。
此外,似乎还有块的重影插入点,因为正在插入额外的bisatt。
所以给我们一个运行Lisp前后的图形,并给我们一些门的属性。
目前,Bissatt只有两个属性,其中一个是超链接
ymg公司 YMG,我画了3张图:
-之前=开始绘图
-之后=使用插入的BISATT块绘制。
-最终=关闭某个图层后的最终结果绘图。
最终的图纸是我喜欢的。
黄色/红色块是火灾探测器,在最终图纸中,该层已关闭。这些BIS-ATT块获得一个超链接,并链接到带有火灾报警系统的系统。我将图形打印为DWF。DWF显示在建筑系统中,在BIS-ATT广场上的监视器屏幕上显示闪烁的火灾图标。万一发生火灾。
谢谢
PmxCAD 当然还有图纸。。。。。。。。。。
之前图纸
之后图纸
最终的图纸 试试这个,
;; getblkename by ymg ;
;; ;
;; Original Code by Tim Wiley ;
;; Argument: Block Name ;
;;Returns: list of enames Block in Drawing ;
(defun getblkename (blkname / blklst)
(vlax-for obj (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-Acad-Object)))
(if (and (= (vla-get-ObjectName obj) "AcDbBlockReference")
(= (vla-get-EffectiveName obj) blkname)
)
(setq blkLst (cons (vlax-vla-object->ename obj) blkLst))
)
)
)
(defun c:test (/ al bl el en pos stl svl)
(setq bl (getblkename "RMELDER")
al nil
)
(foreach ent bl
(vl-cmdf "._-insert""BISATT" (cdr (assoc 10 (entget ent))) 100.0 100.0 0.0)
(setq al (cons (entlast) al))
)
(setq al (reverse al))
(foreach e bl
(setq en (entnext e)
svl nil
stl nil
)
(while (= (cdr (assoc 0 (setq el (entget en)))) "ATTRIB")
(setq stl (cons (cdr (assoc 2 el)) stl)
svl (cons (cdr (assoc 1 el)) svl)
en (entnext en)
)
)
(setq en (entnext (car al))
al (cdr al)
)
(while (= (cdr (assoc 0 (setq el (entget en)))) "ATTRIB")
(if (setq pos (vl-position (cdr (assoc 2 el)) stl))
(entmod (subst (cons1 (nth pos svl)) (assoc 1 el) el))
)
(setq en (entnext en))
)
)
)
是的。。。YMG。。。。。。。。几乎
这些是动态块,有自己的匿名名称。Lisp程序不需要所有的块,只有2个。这些是副本。
是否有方法更改lisp以使其与动态块配合良好,或者是否有可能更改lisp以影响选定的块?
如按图层或块名快速选择,在选择后运行lisp。
谢谢
PmxCAD pmxcad,
函数GetBlkEname()通常返回给定动态块名的所有名称的列表。
当我运行它与您之前的绘图4“RMELDER”块被发现并替换。
所以,我不太明白你在说什么。
现在,如果您有不同于“RMELDER”的块,则需要指定它们。
ymg公司 嗨,YMG
这是之前lisp的结果。图纸。两个街区的顶部是比萨特。这些属性不会从bmelder块中获取/复制正确的数据。看起来很重要。
PmxCAD
Acad 2014
在_2之前。图纸
页:
[1]
2