本帖最后由 cabinsummer 于 2016-12-24 15:06 编辑
文字库功能
图形库功能
智能交互标号
近期在开发明细表程序,为了与公司原有的程序兼容,增加了不少难度。这个过程中也学到不少东西,感谢Chen QJ一直以来的大力支持。现在将思路奉献出来,供大家提些建议。
程序开发要满足人操作的方便性,这个是最主要的。因此程序必须有库并且具有导向性,让新人能很快适应。
明细表由“序号”、“代号”、“名称”、和“备注”几项构成。在实际生产过程中,图纸存在大量的复用,这样带来的工艺流程也完全不一样,因此不能简单的将分为加工件和采购件两类。我根据实际情况,将明细分为:
你的局部放大我就很喜欢,只要是你的帖子,都必须顶!!!!网友答: 要是采购材料,怎能没有“尺寸"这一栏呢。建议加上这一项。网友答: 风之影,好样的。和你学了很多的知识。
赞一个!!!!网友答: 公司图纸标准用语,公司形象也提高一截网友答: 精神可嘉!
非常支持!
网友答:
MIMUSI标准件,我有用这个外挂,不过是UG的,网友答:
看不到图片,是不是挂掉了网友答:
本帖最后由 cabinsummer 于 2012-4-9 21:00 编辑
今天再来几个通用函数。说明一下,由于公司内部的块属性不足,所以我添加了扩展数据,所以本程序是属性块和扩展数据混合编程。另外,受CHEN QJ的影响,决定对编程中常用(repeat (sslength ss)采取改进,因为这是LISP中较为低级的方法,高级的应该发挥LISP表处理的优势,大量使用mapcar、apply、lambda和foreach等特有的函数,不但能使程序精练,而且执行速度大大提高。一般对选择集的操作就是选取、添加、删除等,还有就是提取选择集中某个图元,低级的就是针对某个图元操作反复用repeat,既难懂也容易出错,所以我这次将以表处理为主,在以后的编程中将大量使用LISP的高效函数。

未完待续
文字库功能
图形库功能
智能交互标号
近期在开发明细表程序,为了与公司原有的程序兼容,增加了不少难度。这个过程中也学到不少东西,感谢Chen QJ一直以来的大力支持。现在将思路奉献出来,供大家提些建议。
程序开发要满足人操作的方便性,这个是最主要的。因此程序必须有库并且具有导向性,让新人能很快适应。
明细表由“序号”、“代号”、“名称”、和“备注”几项构成。在实际生产过程中,图纸存在大量的复用,这样带来的工艺流程也完全不一样,因此不能简单的将分为加工件和采购件两类。我根据实际情况,将明细分为:
明细表必须对此做出区分,以方便后期人员的操作。分类是个麻烦的事,无论交给设计人员还是交给物料管理人员。尤其是当大量写入表格时总难免不了出错。因此要有常用的文字库便于选择,有常用的图形库且能从中提取信息直接提供给明细表。
仿公司国外的习惯,引出的标号如下图:
仿公司国外的习惯,引出的标号如下图:
说明一下,圆圈类的都是要出图的;分叉上线是双线的表明此号为部件,有下级装配图和明细;单线是配图的;分叉单线是采购用的,根据集团内部组织方式,填写略有区别。程序采用属性块加扩展数据。
由此,定义操作的数据结构,先定义构成数据结构的几个基本函数

标号有左右方向,为防止镜像后文字难以识别,特定义八种属性块

未完待续……
网友答:
支持支持!!!谢谢放送网友答:
定义如此复杂的数据结构,主要是为了和公司原有的习惯相结合。如果全新的思路,必然所有的属性块都用相同的属性,这样便于后期处理。公司里的标准块里不同类型含有数量不等的属性,因为在没有程序编辑的情况下,双击属性块最简单,含有大量的无用的属性反而会带来操作上的失误。为此程序增加了不少难度,但是对于表处理,也有很多值得学习的技巧。网友答:
楼主好样的,奉献出来的都是源码,超赞!由此,定义操作的数据结构,先定义构成数据结构的几个基本函数

- ;;;属性块
- (defun BOM_BLOCK (BlockName)
- (entmake (list '(0 . "BLOCK")'(10 0.0 0.0 0.0)'(70 . 2)(cons 2 BlockName)))
- )
- ;;;圆
- (defun BOM_CIRCLE (CenterPoint Radius)
- (entmake (list '(0 . "CIRCLE")'(100 . "AcDbEntity")'(8 . "0")'(100 . "AcDbCircle")(cons 10 Centerpoint)(cons 40 Radius)))
- )
- ;;;直线
- (defun BOM_LINE (StartPoint EndPoint)
- (entmake (list '(0 . "LINE")'(100 . "AcDbEntity")'(8 . "0")'(100 . "AcDbLine")(cons 10 StartPoint)(cons 11 EndPoint)))
- )
- ;;;属性定义
- (defun BOM_ATTDEF (Height Value Width TextStyle Horizontal AlignPoint Pmpt Tag Visibility Vertical)
- (entmake
- (list
- '(0 . "ATTDEF")
- '(100 . "AcDbEntity")
- '(8 . "TEXT")
- '(100 . "AcDbText")
- '(10 0.0 0.0 0.0)
- (cons 40 Height)
- (cons 1 Value)
- (cons 41 Width)
- (cons 7 TextStyle)
- (cons 72 Horizontal)
- (cons 11 AlignPoint)
- '(100 . "AcDbAttributeDefinition")
- (cons 3 Pmpt)
- (cons 2 Tag)
- (cons 70 Visibility)
- (cons 74 Vertical)
- )
- )
- )
- ;;;小圆点引线
- (defun BOM_LEADER (StartPoint Endpoint AssocBlock)
- (entmake
- (list
- '(0 . "LEADER")
- '(100 . "AcDbEntity")
- '(8 . "DIM")
- '(100 . "AcDbLeader")
- '(71 . 1)
- '(73 . 2)
- '(74 . 0)
- '(76 . 2)
- (cons 10 StartPoint)
- (cons 10 Endpoint)
- (cons 340 AssocBlock)
- (list -3
- (list "ACAD"
- (cons 1000 "DSTYLE")
- (cons 1002 "{")
- (cons 1070 341)
- (cons 1005 (cdr (assoc 5 (entget (cdr (assoc 330 (entget (tblobjname "block" "_dotsmall"))))))))
- (cons 1002 "}")
- )
- )
- )
- )
- )
- ;;;块属性
- (defun BOM_ATTRIB (Height Value Width TextStyle Horizontal AlignPoint Tag Visibility Vertical)
- (entmake
- (list
- '(0 . "ATTRIB")
- '(100 . "AcDbEntity")
- '(8 . "TEXT_ENGLISH")
- '(100 . "AcDbText")
- '(10 0.0 0.0 0.0)
- (cons 40 (* Height scl))
- (cons 1 Value)
- (cons 41 Width)
- (cons 7 TextStyle)
- (cons 72 Horizontal)
- (cons 11 AlignPoint)
- '(100 . "AcDbAttribute")
- (cons 2 Tag)
- (cons 70 Visibility)
- (cons 74 Vertical)
- )
- )
- )
标号有左右方向,为防止镜像后文字难以识别,特定义八种属性块

- ;;;定义出图类的标号形式,插入点在左侧
- (if (not (tblsearch "BLOCK" "DTL-L"))
- (progn
- (BOM_BLOCK "DTL-L")
- (BOM_CIRCLE '(13.0 0.0 0.0) 8.0)
- (BOM_ATTDEF 4.5 "00" 1.0 "BOLD" 4 '(13.0 0.0 0.0) "Detail number" "CODE_ID" 0 0)
- (BOM_ATTDEF 2.5 "" 1.0 "STANDARD" 4 '(13.0 -6.0 0.0) "Description" "DESCR" 1 0)
- (BOM_ATTDEF 2.5 "1" 0.85 "STANDARD" 1 '(2.5 1.0 0.0) "Amount" "AMT" 0 0)
- (BOM_ATTDEF 2.5 "N" 1.0 "STANDARD" 4 '(13.0 6.0 0.0) "Spare part" "SPARE_PART" 1 0)
- (BOM_LINE '(5.0 0.0 0.0)'(0.0 0.0 0.0))
- (entmake '((0 . "ENDBLK")))
- )
- )
- ;;;定义出图类的标号形式,插入点在右侧
- (if (not (tblsearch "BLOCK" "DTL-R"))
- (progn
- (BOM_BLOCK "DTL-R")
- (BOM_CIRCLE '(-13.0 0.0 0.0) 8.0)
- (BOM_ATTDEF 4.5 "00" 1.0 "BOLD" 4 '(-13.0 0.0 0.0) "Detail number" "CODE_ID" 0 0)
- (BOM_ATTDEF 2.5 "" 1.0 "STANDARD" 4 '(-13.0 -6.0 0.0) "Description" "DESCR" 1 0)
- (BOM_ATTDEF 2.5 "1" 0.85 "STANDARD" 1 '(-2.5 1.0 0.0) "Amount" "AMT" 0 0)
- (BOM_ATTDEF 2.5 "N" 1.0 "STANDARD" 4 '(-13.0 6.0 0.0) "Spare part" "SPARE_PART" 1 0)
- (BOM_LINE '(-5.0 0.0 0.0)'(0.0 0.0 0.0))
- (entmake '((0 . "ENDBLK")))
- )
- )
- ;;;定义采购类的标号形式,插入点在左侧
- (if (not (tblsearch "BLOCK" "STD-L"))
- (progn
- (BOM_BLOCK "STD-L")
- (BOM_ATTDEF 4.0 "" 1.0 "BOLD" 2 '(94.0 5.0 0.0) "Standard Code #" "CODE_ID" 0 1)
- (BOM_ATTDEF 3.0 "" 0.9 "BOLD" 2 '(94.0 -5.0 0.0) "Description #1" "DESCR_1" 0 1)
- (BOM_ATTDEF 3.0 "" 0.9 "BOLD" 2 '(94.0 -10.0 0.0) "Description #2" "DESCR_2" 0 1)
- (BOM_ATTDEF 2.5 "1" 0.85 "STANDARD" 1 '(2.5 1.0 0.0) "Amount" "AMT" 0 0)
- (BOM_ATTDEF 2.5 "" 0.85 "STANDARD" 1 '(-2.5 -3.5 0.0) "Spare part" "SPARE_PART" 1 0)
- (BOM_LINE '(5.0 0.0 0.0)'(0.0 0.0 0.0))
- (BOM_LINE '(5.0 5.0 0.0)'(5.0 -5.0 0.0))
- (BOM_LINE '(5.0 5.0 0.0)'(95.0 5.0 0.0))
- (BOM_LINE '(5.0 -5.0 0.0)'(95.0 -5.0 0.0))
- (entmake '((0 . "ENDBLK")))
- )
- )
- ;;;定义采购类的标号形式,插入点在右侧
- (if (not (tblsearch "BLOCK" "STD-R"))
- (progn
- (BOM_BLOCK "STD-R")
- (BOM_ATTDEF 4.0 "" 1.0 "BOLD" 0 '(-94.0 5.0 0.0) "Standard Code #" "CODE_ID" 0 1)
- (BOM_ATTDEF 3.0 "" 0.9 "BOLD" 0 '(-94.0 -5.0 0.0) "Description #1" "DESCR_1" 0 1)
- (BOM_ATTDEF 3.0 "" 0.9 "BOLD" 0 '(-94.0 -10.0 0.0) "Description #2" "DESCR_2" 0 1)
- (BOM_ATTDEF 2.5 "1" 0.85 "STANDARD" 1 '(-2.5 1.0 0.0) "Amount" "AMT" 0 0)
- (BOM_ATTDEF 2.5 "" 0.85 "STANDARD" 1 '(-2.5 -3.5 0.0) "Spare part" "SPARE_PART" 1 0)
- (BOM_LINE '(-5.0 0.0 0.0)'(0.0 0.0 0.0))
- (BOM_LINE '(-5.0 5.0 0.0)'(-5.0 -5.0 0.0))
- (BOM_LINE '(-5.0 5.0 0.0)'(-95.0 5.0 0.0))
- (BOM_LINE '(-5.0 -5.0 0.0)'(-95.0 -5.0 0.0))
- (entmake '((0 . "ENDBLK")))
- )
- )
- ;;;定义配图类的标号形式,插入点在左侧
- (if (not (tblsearch "BLOCK" "IDT-L"))
- (progn
- (BOM_BLOCK "IDT-L")
- (BOM_ATTDEF 4.0 "" 1.0 "BOLD" 2 '(70.0 0.0 0.0) "Included detail #" "CODE_ID" 0 1)
- (BOM_ATTDEF 2.5 "1" 0.85 "STANDARD" 1 '(2.5 1.0 0.0) "Amount" "AMT" 0 0)
- (BOM_LINE '(0.0 0.0 0.0)'(70.0 0.0 0.0))
- (entmake '((0 . "ENDBLK")))
- )
- )
- ;;;定义配图类的标号形式,插入点在右侧
- (if (not (tblsearch "BLOCK" "IDT-R"))
- (progn
- (BOM_BLOCK "IDT-R")
- (BOM_ATTDEF 4.0 "" 1.0 "BOLD" 0 '(-70.0 0.0 0.0) "Included detail #" "CODE_ID" 0 1)
- (BOM_ATTDEF 2.5 "1" 0.85 "STANDARD" 1 '(-2.5 1.0 0.0) "Amount" "AMT" 0 0)
- (BOM_LINE '(0.0 0.0 0.0)'(-70.0 0.0 0.0))
- (entmake '((0 . "ENDBLK")))
- )
- )
- ;;;定义部件类的标号形式,插入点在左侧
- (if (not (tblsearch "BLOCK" "ASM-L"))
- (progn
- (BOM_BLOCK "ASM-L")
- (BOM_ATTDEF 4.0 "" 1.0 "BOLD" 2 '(94.0 5.0 0.0) "Included Assembly #" "CODE_ID" 0 1)
- (BOM_ATTDEF 3.0 "" 0.9 "BOLD" 2 '(94.0 -5.0 0.0) "Description #1" "DESCR_1" 0 1)
- (BOM_ATTDEF 3.0 "" 0.9 "BOLD" 2 '(94.0 -10.0 0.0) "Description #2" "DESCR_2" 0 1)
- (BOM_ATTDEF 2.5 "1" 0.85 "STANDARD" 1 '(2.5 1.0 0.0) "Amount" "AMT" 0 0)
- (BOM_LINE '(5.0 0.0 0.0)'(0.0 0.0 0.0))
- (BOM_LINE '(5.0 5.0 0.0)'(5.0 -5.0 0.0))
- (BOM_LINE '(5.0 5.0 0.0)'(95.0 5.0 0.0))
- (BOM_LINE '(5.0 4.0 0.0)'(95.0 4.0 0.0))
- (BOM_LINE '(5.0 -5.0 0.0)'(95.0 -5.0 0.0))
- (entmake '((0 . "ENDBLK")))
- )
- )
- ;;;定义部件类的标号形式,插入点在右侧
- (if (not (tblsearch "BLOCK" "ASM-R"))
- (progn
- (BOM_BLOCK "ASM-R")
- (BOM_ATTDEF 4.0 "" 1.0 "BOLD" 0 '(-94.0 5.0 0.0) "Included Assembly #" "CODE_ID" 0 1)
- (BOM_ATTDEF 3.0 "" 0.9 "BOLD" 0 '(-94.0 -5.0 0.0) "Description #1" "DESCR_1" 0 1)
- (BOM_ATTDEF 3.0 "" 0.9 "BOLD" 0 '(-94.0 -10.0 0.0) "Description #2" "DESCR_2" 0 1)
- (BOM_ATTDEF 2.5 "1" 0.85 "STANDARD" 1 '(-2.5 1.0 0.0) "Amount" "AMT" 0 0)
- (BOM_LINE '(-5.0 0.0 0.0)'(0.0 0.0 0.0))
- (BOM_LINE '(-5.0 5.0 0.0)'(-5.0 -5.0 0.0))
- (BOM_LINE '(-5.0 5.0 0.0)'(-95.0 5.0 0.0))
- (BOM_LINE '(-5.0 4.0 0.0)'(-95.0 4.0 0.0))
- (BOM_LINE '(-5.0 -5.0 0.0)'(-95.0 -5.0 0.0))
- (entmake '((0 . "ENDBLK")))
- )
- )
未完待续……
你的局部放大我就很喜欢,只要是你的帖子,都必须顶!!!!网友答: 要是采购材料,怎能没有“尺寸"这一栏呢。建议加上这一项。网友答: 风之影,好样的。和你学了很多的知识。
赞一个!!!!网友答: 公司图纸标准用语,公司形象也提高一截网友答: 精神可嘉!

非常支持!
网友答:
MIMUSI标准件,我有用这个外挂,不过是UG的,网友答:
看不到图片,是不是挂掉了网友答:
本帖最后由 cabinsummer 于 2012-4-9 21:00 编辑 今天再来几个通用函数。说明一下,由于公司内部的块属性不足,所以我添加了扩展数据,所以本程序是属性块和扩展数据混合编程。另外,受CHEN QJ的影响,决定对编程中常用(repeat (sslength ss)采取改进,因为这是LISP中较为低级的方法,高级的应该发挥LISP表处理的优势,大量使用mapcar、apply、lambda和foreach等特有的函数,不但能使程序精练,而且执行速度大大提高。一般对选择集的操作就是选取、添加、删除等,还有就是提取选择集中某个图元,低级的就是针对某个图元操作反复用repeat,既难懂也容易出错,所以我这次将以表处理为主,在以后的编程中将大量使用LISP的高效函数。

- ;;;定义对齐点
- (defun algpnt (PNT VEC)
- (mapcar '+ PNT (list (* scl (car VEC)) (* scl (cadr VEC)) 0.0))
- )
- ;;;插入属性块DTL-L
- (defun INS_DTL-L (PNT CODE DESCR AMT SPARE)
- (INS_ATT_BLK "DTL-L" PNT)
- (BOM_ATTRIB 4.5 CODE 1.0 "BOLD" 4 (algpnt PNT '(13.0 0.0 0.0)) "CODE_ID" 0 0)
- (BOM_ATTRIB 2.5 DESCR 1.0 "STANDARD" 4 (algpnt PNT '(13.0 -6.0 0.0)) "DESCR" 1 0)
- (BOM_ATTRIB 2.5 AMT 0.85 "STANDARD" 1 (algpnt PNT '(2.5 1.0 0.0)) "AMT" 0 0)
- (BOM_ATTRIB 2.5 SPARE 1.0 "STANDARD" 4 (algpnt PNT '(13.0 6.0 0.0)) "SPARE_PART" 1 0)
- (entmake '((0 . "SEQEND")))
- )
- ;;;插入属性块DTL-R
- (defun INS_DTL-R (PNT CODE DESCR AMT SPARE)
- (INS_ATT_BLK "DTL-R" PNT)
- (BOM_ATTRIB 4.5 CODE 1.0 "BOLD" 4 (algpnt PNT '(-13.0 0.0 0.0)) "CODE_ID" 0 0)
- (BOM_ATTRIB 2.5 DESCR 1.0 "STANDARD" 4 (algpnt PNT '(-13.0 -6.0 0.0)) "DESCR" 1 0)
- (BOM_ATTRIB 2.5 AMT 0.85 "STANDARD" 1 (algpnt PNT '(-2.5 1.0 0.0)) "AMT" 0 0)
- (BOM_ATTRIB 2.5 SPARE 1.0 "STANDARD" 4 (algpnt PNT '(-13.0 6.0 0.0)) "SPARE_PART" 1 0)
- (entmake '((0 . "SEQEND")))
- )
- ;;;插入属性块STD-L
- (defun INS_STD-L (PNT CODE DESCR_1 DESCR_2 AMT SPARE)
- (INS_ATT_BLK "STD-L" PNT)
- (BOM_ATTRIB 4.0 CODE 1.0 "BOLD" 2 (algpnt PNT '(94.0 5.0 0.0)) "CODE_ID" 0 1)
- (BOM_ATTRIB 3.0 DESCR_1 0.9 "BOLD" 2 (algpnt PNT '(94.0 -5.0 0.0)) "DESCR_1" 0 1)
- (BOM_ATTRIB 3.0 DESCR_2 0.9 "BOLD" 2 (algpnt PNT '(94.0 -10.0 0.0)) "DESCR_2" 0 1)
- (BOM_ATTRIB 2.5 AMT 0.85 "STANDARD" 1 (algpnt PNT '(2.5 1.0 0.0)) "AMT" 0 0)
- (BOM_ATTRIB 2.5 SPARE 0.85 "STANDARD" 1 (algpnt PNT '(2.5 -3.5 0.0)) "SPARE_PART" 1 0)
- (entmake '((0 . "SEQEND")))
- )
- ;;;插入属性块STD-R
- (defun INS_STD-R (PNT CODE DESCR_1 DESCR_2 AMT SPARE)
- (INS_ATT_BLK "STD-R" PNT)
- (BOM_ATTRIB 4.0 CODE 1.0 "BOLD" 0 (algpnt PNT '(-94.0 5.0 0.0)) "CODE_ID" 0 1)
- (BOM_ATTRIB 3.0 DESCR_1 0.9 "BOLD" 0 (algpnt PNT '(-94.0 -5.0 0.0)) "DESCR_1" 0 1)
- (BOM_ATTRIB 3.0 DESCR_2 0.9 "BOLD" 0 (algpnt PNT '(-94.0 -10.0 0.0)) "DESCR_2" 0 1)
- (BOM_ATTRIB 2.5 AMT 0.85 "STANDARD" 1 (algpnt PNT '(-2.5 1.0 0.0)) "AMT" 0 0)
- (BOM_ATTRIB 2.5 SPARE 0.85 "STANDARD" 1 (algpnt PNT '(-2.5 -3.5 0.0)) "SPARE_PART" 1 0)
- (entmake '((0 . "SEQEND")))
- )
- ;;;插入属性块IDT-L
- (defun INS_IDT-L (PNT CODE AMT)
- (INS_ATT_BLK "IDT-L" PNT)
- (BOM_ATTRIB 4.0 CODE 1.0 "BOLD" 2 (algpnt PNT '(70.0 0.0 0.0)) "CODE_ID" 0 1)
- (BOM_ATTRIB 2.5 AMT 0.85 "STANDARD" 1 (algpnt PNT '(2.5 1.0 0.0)) "AMT" 0 0)
- (entmake '((0 . "SEQEND")))
- )
- ;;;插入属性块IDT-R
- (defun INS_IDT-R (PNT CODE AMT)
- (INS_ATT_BLK "IDT-R" PNT)
- (BOM_ATTRIB 4.0 CODE 1.0 "BOLD" 0 (algpnt PNT '(-70.0 0.0 0.0)) "CODE_ID" 0 1)
- (BOM_ATTRIB 2.5 AMT 0.85 "STANDARD" 1 (algpnt PNT '(-2.5 1.0 0.0)) "AMT" 0 0)
- (entmake '((0 . "SEQEND")))
- )
- ;;;插入属性块ASM-L
- (defun INS_ASM-L (PNT CODE DESCR_1 DESCR_2 AMT)
- (INS_ATT_BLK "ASM-L" PNT)
- (BOM_ATTRIB 4.0 CODE 1.0 "BOLD" 2 (algpnt PNT '(94.0 5.0 0.0)) "CODE_ID" 0 1)
- (BOM_ATTRIB 3.0 DESCR_1 0.9 "BOLD" 2 (algpnt PNT '(94.0 -5.0 0.0)) "DESCR_1" 0 1)
- (BOM_ATTRIB 3.0 DESCR_2 0.9 "BOLD" 2 (algpnt PNT '(94.0 -10.0 0.0)) "DESCR_2" 0 1)
- (BOM_ATTRIB 2.5 AMT 0.85 "STANDARD" 1 (algpnt PNT '(2.5 1.0 0.0)) "AMT" 0 0)
- (entmake '((0 . "SEQEND")))
- )
- ;;;插入属性块ASM-R
- (defun INS_ASM-R (PNT CODE DESCR_1 DESCR_2 AMT)
- (INS_ATT_BLK "ASM-R" PNT)
- (BOM_ATTRIB 4.0 CODE 1.0 "BOLD" 0 (algpnt PNT '(-94.0 5.0 0.0)) "CODE_ID" 0 1)
- (BOM_ATTRIB 3.0 DESCR_1 0.9 "BOLD" 0 (algpnt PNT '(-94.0 -5.0 0.0)) "DESCR_1" 0 1)
- (BOM_ATTRIB 3.0 DESCR_2 0.9 "BOLD" 0 (algpnt PNT '(-94.0 -10.0 0.0)) "DESCR_2" 0 1)
- (BOM_ATTRIB 2.5 AMT 0.85 "STANDARD" 1 (algpnt PNT '(-2.5 1.0 0.0)) "AMT" 0 0)
- (entmake '((0 . "SEQEND")))
- )
- ;;;插入属性块
- (defun INS_ATT_BLK (BlockName PNT)
- (entmake (list '(0 . "INSERT")(cons 2 BlockName)'(8 . "DIM")'(66 . 1)(cons 10 PNT)(cons 41 scl)(cons 42 scl)))
- )
- ;;;提取选择集中的所有图元名
- (defun ss->entlist (SelectionSet / n entlist)
- (setq n 0)
- (repeat (setq n (sslength SelectionSet))
- (setq entlist (cons (ssname SelectionSet (setq n (1- n))) entlist))
- )
- )
- ;;;提取图元的DXF组码
- (defun entdxf (ename dxf)
- (cdr (assoc dxf (entget ename)))
- )
- ;;;提取表中所有图元的某个DXF组码
- (defun entlist->dxflist (entlist dxf)
- (mapcar '(lambda (x) (entdxf x dxf)) entlist)
- )
- ;;;获得应用程序app附加于图元的扩展数据
- (defun GET_XDATA (ename app)
- (cdadr (assoc -3 (entget ename (list (eval app)))))
- )
- ;;;删除应用程序app附加于图元的扩展数据
- (defun REM_XDATA (ename app / edata)
- (if (assoc -3 (setq edata (entget ename (list (eval app)))))(entmod (subst (list -3 (list (eval app))) (assoc -3 edata) edata)))
- )
- ;;;添加应用程序app附加于图元的扩展数据
- (defun ADD_XDATA (ename app xdata)
- (setq edata (GET_XDATA ename app))
- (entmod (append (entget ename) (list (list -3 (cons (eval app) (append edata (list (cons 1000 xdata))))))))
- )
未完待续