cq4920 发表于 2022-9-17 16:39:38

绕个弯路创建属性块

本帖最后由 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
)
      




lxl217114 发表于 2022-9-17 18:42:09

大佬总有办法,点赞

liuhe 发表于 2022-9-17 20:12:18

大佬 我是2023只看到块 没有属性文字啊

cq4920 发表于 2022-9-18 02:29:48

本帖最后由 cq4920 于 2022-9-18 02:36 编辑

liuhe 发表于 2022-9-17 20:12
大佬 我是2023只看到块 没有属性文字啊
经过对比 应该是文字样式缺失的问题

liuhe 发表于 2022-9-18 10:30:56

cq4920 发表于 2022-9-18 02:29
经过对比 应该是文字样式缺失的问题

大佬 你把last _ent自定义删掉了

aihuyujian 发表于 2022-9-19 08:39:18

本帖最后由 aihuyujian 于 2022-9-19 08:41 编辑

感觉有点麻烦
先entmake block
再entmake (list '(0 . "ATTRIB"))
最后 (entmake '((0 . "SEQEND")))
应该就可以了

liuhe 发表于 2022-9-19 13:21:25

aihuyujian 发表于 2022-9-19 08:39
感觉有点麻烦
先entmake block
再entmake (list '(0 . "ATTRIB"))


你之所以卡大概率是因为command命令,我用command冻结图层时,就会很卡

aihuyujian 发表于 2022-9-19 15:07:23

liuhe 发表于 2022-9-19 13:21
你之所以卡大概率是因为command命令,我用command冻结图层时,就会很卡

我说了半天 他没明白我啥意思 算了 毕竟我用我自己的属性块插入

wu0146 发表于 2022-9-19 17:37:46

属性块的目的是方便提取,这样每创建一个属性块都是一个不同的块名,对于数据处理是否非常不利?

cq4920 发表于 2022-9-21 19:23:01

wu0146 发表于 2022-9-19 17:37
属性块的目的是方便提取,这样每创建一个属性块都是一个不同的块名,对于数据处理是否非常不利?

首先,块的插入就提示了 要确定块的名字,如果块的名字不同,说明属性也肯定不同!这样的好处本身就是为了使用选择类似对象来批量修改属性的时候,不会对其他的属性块也错误的修改了!那如果你想每次都输入相同的名字,那么在批量的处理的时候还需要再次过滤!当然了,其实可以在输入块名称的时候加一个判定,默认为上一次的块名,如果是首次输入手动确定名称,也可以按时间输出!这样也会节省一定的时间
页: [1] 2
查看完整版本: 绕个弯路创建属性块