本帖最后由 _rocky 于 2025-11-5 17:34 编辑
复制代码网友答:
用这个
网友答:
块的属性有两种情况,一种情况块本身是没有属性的,通过(66 . 1)方式插入块参照后继续追加属性直到(entmake '((0 . "SEQEND")))结束,这种情况通过tbl相关的函数是获取不到关于属性的任何信息;另一种是定认块主体的时候,和在块内添加一般图元对象一样,通过AddAttribute方法增加属性对象,或者使用相应的entmake也是一样的效果,这样的属性是能通过tbl相关函数获取属性的定义数据的,注意是定义数据,因为插入块参照后,它的属性一般情况下是可以修改的,有可能每个参照的同一属性,值各不相同,比如cass的高程点的高程注记属性(它是通过插入普通的GC200后继续追加的属性)
对于插入参照后追加的属性,需要对块参照图元通过entnext来查询它的后续图元是否为该参照的子图元(属性)来获取,网友答:

GETATTS
_$ (GETATTS(car(entsel)))
(("A" "GM-0921" #<VLA-OBJECT IAcadAttributeReference2 04f74b24>))
函数返回属性的TAG,值,对象,可以自行通过对象获取它的坐标以及属性文字的字体样式,大小,对齐方式等格式相关数据网友答: 其中定义图块正常,插入图块不显示,同样方法定义,其他图块能正常定义和插入,问题出在哪?网友答: (cons 66 1)是属性块吧?
可以参考一下http://bbs.xdcad.net/forum.php?m ... E%E6%80%A7%E5%9D%97网友答: 本帖最后由 _rocky 于 2025-11-4 13:49 编辑
明白了 丢属性数据了 感谢
网友答:
这个块通过快编辑器打开后找不到属性定义,
请问 ,怎么找到通过代码找到它的属性定义?网友答: 参见 entnext e网友答: 本帖最后由 _rocky 于 2025-11-4 14:01 编辑
http://bbs.xdcad.net/forum.php?m ... E%E6%80%A7%E5%9D%97
拿这个函数试过了,也同样丢失属性
上面帖子5楼有把块的cad文件附上,请参照网友答: 你先用(tblsearch "block" name) 看这个块是否存在,假如不存在insert假装插入导入属性,再用entmake插入,插入完之后 attsync一下,或者insert直接插入网友答:
(tblsearch "block" name) 是存在的
entmake插入实现不了时因为块丢失了属性,原因在于遍历BLOCK实体的时候,找不到属性
attsync解决的是属性成功创建,更新属性,没有属性attsync就没有效果
- (entmake
- (list
- (cons 0 "LAYER")
- (cons 100 "AcDbSymbolTableRecord")
- (cons 100 "AcDbLayerTableRecord")
- '(2 . "WINDOW")
- '(70 . 0)
- '(62 . 4)
- '(6 . "Continuous")
- )
- )
- (entmake (list (cons 0 "BLOCK") '(2 . "$DorLib2D$00000009") '(70 . 0) '(4 . "") '(10 0.0 0.0 0.0)))
- (entmake
- (list
- (cons 0 "ARC")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 370 13)
- (cons 100 "AcDbCircle")
- (cons 10 '(0.37165 0.0817319 0.0))
- (cons 40 0.824561)
- (cons 210 '(0.0 0.0 1.0))
- (cons 100 "AcDbArc")
- (cons 50 1.52077)
- (cons 51 3.14284)
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(0.454107 0.0807006 0.0))
- (cons 11 '(0.454107 0.905262 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(0.412878 0.905262 0.0))
- (cons 11 '(0.412878 0.0807006 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(0.412878 0.0807006 0.0))
- (cons 11 '(0.454107 0.0807006 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(0.495335 -0.00175559 0.0))
- (cons 11 '(0.495335 0.0807006 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(0.495335 0.0807006 0.0))
- (cons 11 '(0.454107 0.0807006 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(0.454107 0.0807006 0.0))
- (cons 11 '(0.454107 0.0394725 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(0.454107 0.0394725 0.0))
- (cons 11 '(0.412878 0.0394725 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(0.412878 -0.00175559 0.0))
- (cons 11 '(0.495335 -0.00175559 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(0.495335 -0.00175559 0.0))
- (cons 11 '(0.495335 -0.00175559 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(0.412878 0.0394725 0.0))
- (cons 11 '(0.412878 -0.00175559 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 370 13)
- (cons 100 "AcDbLine")
- (cons 10 '(0.378004 0.782157 0.0))
- (cons 11 '(0.378004 0.623508 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 370 13)
- (cons 100 "AcDbLine")
- (cons 10 '(0.488981 0.782157 0.0))
- (cons 11 '(0.488981 0.623508 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(0.454107 0.905262 0.0))
- (cons 11 '(0.412878 0.905262 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(-0.494139 -0.00175559 0.0))
- (cons 11 '(-0.494139 -0.00175559 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(-0.411683 -0.00175559 0.0))
- (cons 11 '(-0.494139 -0.00175559 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(-0.411683 0.0394725 0.0))
- (cons 11 '(-0.411683 -0.00175559 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(-0.452911 0.0394725 0.0))
- (cons 11 '(-0.411683 0.0394725 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(-0.452911 0.0807006 0.0))
- (cons 11 '(-0.452911 0.0394725 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(-0.494139 0.0807006 0.0))
- (cons 11 '(-0.452911 0.0807006 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(-0.494139 -0.00175559 0.0))
- (cons 11 '(-0.494139 0.0807006 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(0.488981 0.782157 0.0))
- (cons 11 '(0.454107 0.782157 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(0.488981 0.623508 0.0))
- (cons 11 '(0.454107 0.623508 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(0.412878 0.782157 0.0))
- (cons 11 '(0.378004 0.782157 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake
- (list
- (cons 0 "LINE")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 8 "0")
- (cons 100 "AcDbLine")
- (cons 10 '(0.412878 0.623508 0.0))
- (cons 11 '(0.378004 0.623508 0.0))
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- (entmake '((0 . "ENDBLK")))
- (entmake
- (list
- (cons 0 "INSERT")
- (cons 100 "AcDbEntity")
- (cons 67 0)
- (cons 410 "Model")
- (cons 8 "WINDOW")
- (cons 100 "AcDbBlockReference")
- (cons 66 1)
- (cons 2 "$DorLib2D$00000009")
- (cons 10 '(37101.6 265828.0 0.0))
- (cons 41 900.0)
- (cons 42 -900.0)
- (cons 43 900.0)
- (cons 50 1.5708)
- (cons 70 0)
- (cons 71 0)
- (cons 44 0.0)
- (cons 45 0.0)
- (cons 210 '(0.0 0.0 1.0))
- )
- )
- )

- ;;;插入块
- (defun imblk (name pt sc ang / mspace 3dp blk ename)
- (setq mspace (vla-get-modelspace
- (vla-get-activedocument (vlax-get-acad-object))
- )
- )
- (setq 3dp (vlax-3D-point pt))
- (and
- (or (tblsearch "block" name)
- (if (findfile (strcat name ".dwg"))
- (progn
- (setvar 'cmdecho 0)
- (command "-insert" name ^e)
- (setvar 'cmdecho 1)
- )
- )
- )
- (and
- (tblsearch "block" name)
- (setq vlblk (vla-InsertBlock mspace 3dp name sc sc sc ang))
- (setq ename (vlax-vla-object->ename vlblk))
- )
- )
- ename
- )
_rocky 发表于 2025-11-4 15:55
(tblsearch "block" name) 是存在的
entmake插入实现不了时因为块丢失了属性,原因在于遍历BLOCK实体的 ...
块的属性有两种情况,一种情况块本身是没有属性的,通过(66 . 1)方式插入块参照后继续追加属性直到(entmake '((0 . "SEQEND")))结束,这种情况通过tbl相关的函数是获取不到关于属性的任何信息;另一种是定认块主体的时候,和在块内添加一般图元对象一样,通过AddAttribute方法增加属性对象,或者使用相应的entmake也是一样的效果,这样的属性是能通过tbl相关函数获取属性的定义数据的,注意是定义数据,因为插入块参照后,它的属性一般情况下是可以修改的,有可能每个参照的同一属性,值各不相同,比如cass的高程点的高程注记属性(它是通过插入普通的GC200后继续追加的属性)
对于插入参照后追加的属性,需要对块参照图元通过entnext来查询它的后续图元是否为该参照的子图元(属性)来获取,网友答:
_rocky 发表于 2025-11-4 13:35
这个块通过快编辑器打开后找不到属性定义,
请问 ,怎么找到通过代码找到它的属性定义?

- (defun getatts(blk)
- (if(equal(VL-CATCH-ALL-APPLY'vlax-get-property(list(setq blk(if(=(type blk)'ename)(vlax-ename->vla-object blk)blk))'HasAttributes)):vlax-true)
- (mapcar(function(lambda(x)(list(vla-get-TagString x)(vla-get-TextString x)x)))(vlax-safearray->list(vlax-variant-value(vlax-invoke-method blk'GetAttributes))))))
GETATTS
_$ (GETATTS(car(entsel)))
(("A" "GM-0921" #<VLA-OBJECT IAcadAttributeReference2 04f74b24>))
函数返回属性的TAG,值,对象,可以自行通过对象获取它的坐标以及属性文字的字体样式,大小,对齐方式等格式相关数据网友答: 其中定义图块正常,插入图块不显示,同样方法定义,其他图块能正常定义和插入,问题出在哪?网友答: (cons 66 1)是属性块吧?
可以参考一下http://bbs.xdcad.net/forum.php?m ... E%E6%80%A7%E5%9D%97网友答: 本帖最后由 _rocky 于 2025-11-4 13:49 编辑
自贡黄明儒 发表于 2025-11-4 11:51
(cons 66 1)是属性块吧?
可以参考一下http://bbs.xdcad.net/forum.php?mod=viewthread&tid=678178&highli ...
明白了 丢属性数据了 感谢
网友答:
自贡黄明儒 发表于 2025-11-4 11:51
(cons 66 1)是属性块吧?
可以参考一下http://bbs.xdcad.net/forum.php?mod=viewthread&tid=678178&highli ...
这个块通过快编辑器打开后找不到属性定义,
请问 ,怎么找到通过代码找到它的属性定义?网友答: 参见 entnext e网友答: 本帖最后由 _rocky 于 2025-11-4 14:01 编辑
自贡黄明儒 发表于 2025-11-4 13:47
参见 entnext e
http://bbs.xdcad.net/forum.php?m ... E%E6%80%A7%E5%9D%97
拿这个函数试过了,也同样丢失属性
上面帖子5楼有把块的cad文件附上,请参照网友答: 你先用(tblsearch "block" name) 看这个块是否存在,假如不存在insert假装插入导入属性,再用entmake插入,插入完之后 attsync一下,或者insert直接插入网友答:
菜卷鱼 发表于 2025-11-4 15:32
你先用(tblsearch "block" name) 看这个块是否存在,假如不存在insert假装插入导入属性,再用entmake插入, ...
(tblsearch "block" name) 是存在的
entmake插入实现不了时因为块丢失了属性,原因在于遍历BLOCK实体的时候,找不到属性
attsync解决的是属性成功创建,更新属性,没有属性attsync就没有效果