绕个弯路创建属性块
本帖最后由 cq4920 于 2022-9-21 22:03 编辑直接创建 属性快 总是不成功,没办法 绕个弯路吧
速度还可以,就是插入的一瞬间有明显的卡顿,优化后的效果还挺好的
简单了解了一下字典,还真是挺好用的,带了记忆功能
(defun c:bh(/ ent date name time)
(setvar "OrthoMode" 0);;;关闭正交
(asdf2);;;创建文字样式“新宋体”,没有就DXF组码7的值删改一下!
(setq name (vlax-ldata-get "字典" "name1")) ;;读取字典数据
(if (= name nil)
(progn ;;则设置
(setq name (substr (rtos (getvar "cdate") 2 6) 10)) ;;首次运行,设默认
(vlax-ldata-put "字典" "name1" name)
)
)
(setq newname (getstring (strcat "\n请输入编号<" name ">:")))
(if (= newname "") (setq newname name)) ;;如果用户直接回车,则使用默认
(setq name newname)
(vlax-ldata-put "字典" "name1" newname)
(if (= (tblsearch "Block" name) nil)
(progn
(setq ent (entlast))
(entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '(90 . 6) '(70 . 1)
'(10 2.5 5.0)
'(10 25.5 5.0)
'(10 28.0 2.5)
'(10 25.5 0.0)
'(10 2.5 0.0)
'(10 0.0 2.5)
'(8 . "W-索引符号")
'(62 . 211)
))
(entmake (list '(0 . "LINE") '(100 . "AcDbEntity") '(8 . "W-索引符号") '(62 . 211) '(100 . "AcDbLine") '(10 12.5 5.0 0.0) '(11 12.5 0.0 0.0)))
(entmake (list '(0 . "ATTDEF")'(100 . "AcDbEntity")'(8 . "W-索引符号")'(62 . 2)'(100 . "AcDbText")
'(10 2.40891 0.790438 0.0)'(40 . 3.375)(CONS 1 NAME)'(50 . 0.0)'(41 . 0.831213)'(51 . 0.0)'(7 . "新宋体")'(71 . 0)'(72 . 5)'(11 12.4392 0.790438 0.0)'(210 0.0 0.0 1.0)'(100 . "AcDbAttributeDefinition")'(280 . 0)'(3 . "")'(2 . "编号")'(70 . 8)'(73 . 0)'(74 . 0)'(280 . 0)))
(entmake '((0 . "ATTDEF")(100 . "AcDbEntity")(8 . "W-索引符号")(62 . 2)(100 . "AcDbText")
(10 12.5 0.789728 0.0)(40 . 3.375)(1 . "乳胶漆")(50 . 0.0)(41 . 0.831213)(51 . 0.0)(7 . "新宋体")(71 . 0)(72 . 5)(11 25.5 0.789728 0.0)(210 0.0 0.0 1.0)(100 . "AcDbAttributeDefinition")(280 . 0)(3 . "")(2 . "名称")(70 . 8)(73 . 0)(74 . 0)(280 . 0)))
(COMMAND "-block"name "0,2.5" (last_ent ent) "")
(command "ATTREQ" "0")
(command "INSERT" name '(0 0) "1" "1" "0")
(COMMAND "MOVE" (entlast)"" '(0 0) pause)
)
(progn
(command "ATTREQ" "0")
(command "INSERT" name '(0 0) "1" "1" "0")
(COMMAND "MOVE" (entlast)"" '(0 0) pause) )
)
)
;;40最后生产出的图元
(defun last_ent (en / ss)
(if en
(progn
(setq ss (ssadd))
(while (setq en (entnext en))
(if (not (member (cdr (assoc 0 (entget en)))
'("ATTRIB" "VERTEX" "SEQEND")
)
)
(ssadd en ss)
);if
);while
(if (zerop (sslength ss)) (setq ss nil))
ss
);progn
(ssget "_x")
);if
)
大佬总有办法,点赞 大佬 我是2023只看到块 没有属性文字啊 本帖最后由 cq4920 于 2022-9-18 02:36 编辑
liuhe 发表于 2022-9-17 20:12
大佬 我是2023只看到块 没有属性文字啊
经过对比 应该是文字样式缺失的问题 cq4920 发表于 2022-9-18 02:29
经过对比 应该是文字样式缺失的问题
大佬 你把last _ent自定义删掉了 本帖最后由 aihuyujian 于 2022-9-19 08:41 编辑
感觉有点麻烦
先entmake block
再entmake (list '(0 . "ATTRIB"))
最后 (entmake '((0 . "SEQEND")))
应该就可以了
aihuyujian 发表于 2022-9-19 08:39
感觉有点麻烦
先entmake block
再entmake (list '(0 . "ATTRIB"))
你之所以卡大概率是因为command命令,我用command冻结图层时,就会很卡 liuhe 发表于 2022-9-19 13:21
你之所以卡大概率是因为command命令,我用command冻结图层时,就会很卡
我说了半天 他没明白我啥意思 算了 毕竟我用我自己的属性块插入 属性块的目的是方便提取,这样每创建一个属性块都是一个不同的块名,对于数据处理是否非常不利? wu0146 发表于 2022-9-19 17:37
属性块的目的是方便提取,这样每创建一个属性块都是一个不同的块名,对于数据处理是否非常不利?
首先,块的插入就提示了 要确定块的名字,如果块的名字不同,说明属性也肯定不同!这样的好处本身就是为了使用选择类似对象来批量修改属性的时候,不会对其他的属性块也错误的修改了!那如果你想每次都输入相同的名字,那么在批量的处理的时候还需要再次过滤!当然了,其实可以在输入块名称的时候加一个判定,默认为上一次的块名,如果是首次输入手动确定名称,也可以按时间输出!这样也会节省一定的时间
页:
[1]
2