pmxcad 发表于 2022-7-6 08:43:06

将块移动到其他层

你好
是否有lisp可以根据属性值在其他层上放置块?
我有几个绘图块放在错误的图层上。这些块都有一个属性层。我可以从Excel(Autocad electrical)导入值。因此,他们可以在该属性中获得新的层名称。
 
 
谢谢
 
pmxcad

Tharwat 发表于 2022-7-6 08:56:17

你的意思是属性值是层名称本身吗?如果有多个属性值,应该考虑哪个值?
 
如果图层名不存在于图形中怎么办?应该制作吗?(颜色、线宽和线型如何)。
 
当做

Tharwat 发表于 2022-7-6 09:08:27

这是根据我认为可能是你的需要。如果没有,请用例行公事阐明你的目标。
 

(defun c:TesT (/ col ss i sset att value e)
;; Tharwat 05. Nov. 2011 ;;
(if
   (setq col 1
         ss(ssget "_x" '((0 . "INSERT") (66 . 1)))
   )
    (repeat (setq i (sslength ss))
      (setq sset (ssname ss (setq i (1- i))))
      (setq
      att
         (vlax-invoke (vlax-ename->vla-object sset) "Getattributes")
      )
      (foreach x att
      (setq value (vla-get-textstring x))
      (if (not (tblsearch "LAYER" value))
          (entmakex (list '(0 . "LAYER")
                        '(100 . "AcDbSymbolTableRecord")
                        '(100 . "AcDbLayerTableRecord")
                        (cons 2 Value)
                        (cons 70 0)
                        (cons 62 col)
                  )
          )
      )
      (setq col (1+ col))
      )
      (entmod
      (subst (cons 8 value) (assoc 8 (setq e (entget sset))) e)
      )
    )
    (princ)
)
(princ)
)

 
塔瓦特

pBe 发表于 2022-7-6 09:26:08

我认为有一个特定的标记要搜索(比如标记名“LAYER”),并使用该属性的字符串值作为层名。否则,如果块具有多个属性,例如3,它将使用最后一个属性值作为层名称tharwat
 
(defun c:测试(/aDoc lyrs TagToSearch ss atb lynm)(vl load com)(setq aDoc(vla get ActiveDocument(vlax get acad object))lyrs(vla get layers aDoc))(setq TagToSearch“LAYER”);

pmxcad 发表于 2022-7-6 09:42:22

SuperRRRR。。。。。。。。pBe,塔尔瓦特。
效果很好。
 
谢谢
 
PmxCAD

Tharwat 发表于 2022-7-6 09:50:56

不客气。
 
我真的很高兴它为你所需要的工作。
 
塔瓦特
页: [1]
查看完整版本: 将块移动到其他层