明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1255|回复: 11

[讨论] 绕个弯路创建属性块

[复制链接]
发表于 2022-9-17 16:39 | 显示全部楼层 |阅读模式
本帖最后由 cq4920 于 2022-9-21 22:03 编辑

直接创建 属性快 总是不成功,没办法 绕个弯路吧

速度还可以,就是插入的一瞬间有明显的卡顿,优化后的效果还挺好的


简单了解了一下字典,还真是挺好用的,带了记忆功能


  1. (defun c:bh(/ ent date name time)
  2.   (setvar "OrthoMode" 0);;;关闭正交
  3.         (asdf2);;;创建文字样式“新宋体”,没有就DXF组码7的值删改一下!

  4.         (setq name (vlax-ldata-get "字典" "name1")) ;;读取字典数据
  5.         (if (= name nil)
  6.                 (progn ;;则设置
  7.                         (setq name (substr (rtos (getvar "cdate") 2 6) 10)) ;;首次运行,设默认
  8.                         (vlax-ldata-put "字典" "name1" name)
  9.                 )
  10.         )
  11.         (setq newname (getstring (strcat "\n请输入编号<" name ">:")))
  12.         (if (= newname "") (setq newname name)) ;;如果用户直接回车,则使用默认
  13.         (setq name newname)
  14.         (vlax-ldata-put "字典" "name1" newname)

  15.         (if (= (tblsearch "Block" name) nil)
  16.                 (progn
  17.             (setq ent (entlast))     
  18.                                                 (entmake (list '(0 . "LWPOLYLINE") '(100 . "AcDbEntity") '(100 . "AcDbPolyline") '(90 . 6) '(70 . 1)
  19.                                                  '(10 2.5 5.0)                                 
  20.                                                  '(10 25.5 5.0)                                 
  21.                                                  '(10 28.0 2.5)
  22.                                                  '(10 25.5 0.0)
  23.                                                  '(10 2.5 0.0)
  24.                                                  '(10 0.0 2.5)
  25.                                                  '(8 . "W-索引符号")
  26.                                                  '(62 . 211)                                                                                 
  27.                                                   ))               
  28.                                         (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)))                                       
  29.                             (entmake (list '(0 . "ATTDEF")'(100 . "AcDbEntity")'(8 . "W-索引符号")'(62 . 2)'(100 . "AcDbText")
  30.                                                                                         '(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)))                        
  31.           (entmake '((0 . "ATTDEF")(100 . "AcDbEntity")(8 . "W-索引符号")(62 . 2)(100 . "AcDbText")
  32.                                                                                         (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)))
  33.                         
  34.     (COMMAND "-block"  name "0,2.5" (last_ent ent) "")
  35.     (command "ATTREQ" "0")
  36.           (command "INSERT" name '(0 0) "1" "1" "0")
  37.           (COMMAND "MOVE" (entlast)  "" '(0 0) pause)                        
  38.     )
  39.                 (progn               
  40.                 (command "ATTREQ" "0")
  41.           (command "INSERT" name '(0 0) "1" "1" "0")
  42.           (COMMAND "MOVE" (entlast)  "" '(0 0) pause)        )
  43.                
  44.   )
  45.          )
  46.         


  47. ;;40最后生产出的图元
  48. (defun last_ent (en / ss)
  49.         (if en
  50.                 (progn
  51.                         (setq ss (ssadd))
  52.                         (while (setq en (entnext en))
  53.                                 (if (not (member (cdr (assoc 0 (entget en)))
  54.                                                                          '("ATTRIB" "VERTEX" "SEQEND")
  55.                                                                  )
  56.                                                 )
  57.                                         (ssadd en ss)
  58.                                 );if
  59.                         );while
  60.                         (if (zerop (sslength ss)) (setq ss nil))
  61.                         ss
  62.                 );progn
  63.                 (ssget "_x")
  64.         );if
  65. )
  66.         




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2022-9-17 18:42 | 显示全部楼层
大佬总有办法,点赞
发表于 2022-9-17 20:12 | 显示全部楼层
大佬 我是2023  只看到块 没有属性文字啊
 楼主| 发表于 2022-9-18 02:29 | 显示全部楼层
本帖最后由 cq4920 于 2022-9-18 02:36 编辑
liuhe 发表于 2022-9-17 20:12
大佬 我是2023  只看到块 没有属性文字啊

经过对比 应该是文字样式缺失的问题
发表于 2022-9-18 10:30 | 显示全部楼层
cq4920 发表于 2022-9-18 02:29
经过对比 应该是文字样式缺失的问题

大佬 你把last _ent  自定义删掉了
发表于 2022-9-19 08:39 | 显示全部楼层
本帖最后由 aihuyujian 于 2022-9-19 08:41 编辑

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

点评

你用了三条语句,我只用了COMMAND "-block",又好理解!  发表于 2022-9-19 09:45
发表于 2022-9-19 13:21 | 显示全部楼层
aihuyujian 发表于 2022-9-19 08:39
感觉有点麻烦
先entmake block
再entmake (list '(0 . "ATTRIB"))

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

我说了半天 他没明白我啥意思 算了 毕竟我用我自己的属性块插入
发表于 2022-9-19 17:37 | 显示全部楼层
属性块的目的是方便提取,这样每创建一个属性块都是一个不同的块名,对于数据处理是否非常不利?
 楼主| 发表于 2022-9-21 19:23 | 显示全部楼层
wu0146 发表于 2022-9-19 17:37
属性块的目的是方便提取,这样每创建一个属性块都是一个不同的块名,对于数据处理是否非常不利?

首先,块的插入就提示了 要确定块的名字,如果块的名字不同,说明属性也肯定不同!这样的好处本身就是为了使用选择类似对象来批量修改属性的时候,不会对其他的属性块也错误的修改了!那如果你想每次都输入相同的名字,那么在批量的处理的时候还需要再次过滤!当然了,其实可以在输入块名称的时候加一个判定,默认为上一次的块名,如果是首次输入手动确定名称,也可以按时间输出!这样也会节省一定的时间
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-5-18 21:50 , Processed in 0.234679 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表