【Visual Lisp】块专题
;;关于块
;;(0)模型空间→块表记录→块图元:顶层的是模型空间→模型空间下有很多图元和一些块表记录→块表记录又有很多图元(此时块表记录就相当于模型空间),一个块表记录可以有多个insert块→同一块表记录的insert块之间的属性可以不同,其他相同。
;;(1)图中entsel获取到的是insert块图元名
;;(2)块中可能含有属性,通过这个insert块图元名来获取和修改这个块的属性
;;(3)块中属性图元的上级对象是这个insert块;属性图元组码表的330对应就是这个Insert块图元名
;;(4)块中非属性图元的上级对象是对应的"BLOCK_RECORD"对象,但是用nentsel点选块内非属性图元,获取到的表最后一个就是当前Insert块的图元名。
;;(5)修改除了属性外的任何东西要用"BLOCK_RECORD"对象的的方法(比如块名)或者在块内新画一些图元(相当于在ModelSpace中作图)。
;;(6)insert块和块表记录对象的Name属性都是块名(vla-get-name 块图元名) (vla-get-name 块表记录对象)
;;在块内新增一个200的圆
00))200)
;;块表记录
;;01.图纸内块表记录(AcDbBlockTableRecord)集合(包括ModelSpace和所有PaperSpace以及用户定义的块表记录)
(setq *Blocks* (vla-get-Blocks (vla-get-ActiveDocument (vlax-get-acad-object))))
;;02.创建可用的临时块名
(setq blockNameStrLst nil)
(vlax-for temptBlock *Blocks*
(setq blockNameStrLst (cons (vla-get-Name temptBlock) blockNameStrLst))
)
(setq blockNameStrST T)
(while blockNameStrST
(setq temptBlockNameStr (vl-filename-base (vl-filename-mktemp nil nil nil)))
(if (not (member temptBlockNameStr blockNameStrLst))
(progn
(setq blockNameStr temptBlockNameStr)
(setq blockNameStrST nil)
)
)
)
;;03.块表记录集合中新增块表记录(AcDbBlockTableRecord) blockNameStr
(vla-add *Blocks* (vlax-3D-point '(0 0 0)) blockNameStr)
;;04.根据块表记录名获取块表记录对象
(setq newBlockTableRecordObject (vla-Item *Blocks* blockNameStr))
;;05.在新增的块表记录中新增一个圆对象
(setq newCircleObject (vla-AddCircle newBlockTableRecordObject (vlax-3D-point '(0 0 0)) 1000))
;;06.在新增的块表记录中新增一个单行文字属性对象
(setq newTextAttributeObject (vla-AddAttribute newBlockTableRecordObject 300 acAttributeModeVerify "提示1" (vlax-3D-point '(60 -370 0)) "单行-关键字" "单行-默认值"))
;;07.在新增的块表记录中新增一个多行文字属性对象
(setq newMTextAttributeObject (vla-AddAttribute newBlockTableRecordObject 300 acAttributeModeVerify "提示2" (vlax-3D-point '(75 -820 0)) "多行-关键字" "多行-默认值"))
(vlax-put-property newMTextAttributeObject "MTextAttribute" -1) ;;将文字设置为多行文字属性
(vlax-put-property newMTextAttributeObject "MTextBoundaryWidth" 4400) ;;设置多行文本的宽度
;;-----------------------------------------------------------------------------------------------------------
;;块
;;在模型空间中插入之前定义的块表记录为块(用块表记录名→即块名来插入)
(vla-InsertBlock *ModelSpace* (vlax-3D-point (getpoint)) blockNameStr 1 1 1 0)
;;关于块中属性的获取和修改参照如下函数进行处理(属性的修改→通过属性对象进行)
;;功 能:获取块的属性列表
;;参 数:块图元名(ename)
;;返回值:nil或者块属性列表'(("属性名1" "属性值1" 属性对象1) ("属性名2" "属性值2" 属性对象2) ...)
(defun HQ::GetInsertBlockAttributesLst(blockEntName / blockattributeslst blockobject)
(setq blockAttributesLst nil)
(if blockEntName
(if (= (cdr (assoc 0 (entget blockEntName))) "INSERT")
(if (= (vla-get-HasAttributes (setq blockObject (vlax-ename->vla-object blockEntName))) :vlax-true)
(setq blockAttributesLst (mapcar '(lambda (x) (list (vla-get-TagString x) (vla-get-TextString x) x)) (vlax-safearray->list (vlax-variant-value (vla-getAttributes blockObject)))))
)
)
)
blockAttributesLst
)
<<END>>
【Visual Lisp】块专题的更多相关文章
- 在Visual Lisp中处理自动化错误
Handling Automation errors in Visual LISP 翻译自原文Kean's blog:http://through-the-interface.typepad.com/ ...
- 【Visual Lisp】Visual Lisp属性与方法
说明:Visual Lisp属性的获取.赋值和方法的执行有多种形式.然而对于初学者来说一次性就要全部掌握显然是没有必要的,有时候每种方法都是通用的功能都一样我们就没有必要把所有方法都记住.我们只需要掌 ...
- 【Visual Lisp】图元选择集专题
图元选择集专题;;★★★01.选择集操作★★★(setq ss (ssadd));;创建一个空选择集(ssadd (car(entsel)) ss);;将点取的图元添加到ss选择集中,可以不用setq ...
- 【Visual Lisp】表处理专题
表处理大全;;★★★01.创建表★★★(setq lst '());;创建一个空表(list 1 2 3 4) '(1 2 3 4) ;;构造表的两种形式(vl-list* 1 "TT&qu ...
- 【Visual Lisp】人机交互与数据处理(表除外)-lisp
;;本专题所讲述的内容是人机交互以及常规数据处理技术;;★★★01.人机交互★★★;;△△△键盘输入交互△△△(getint "请输入整数");;从键盘输入整数,如果不是整数则重复 ...
- 【Visual Lisp】两种出错处理方式
两种出错处理方式:一种是对出错函数进行重定义,一种是对错误进行捕捉处理. ;;============================================================= ...
- 【Visual Lisp】驱动器、目录、文件和注册表
;;驱动器.目录.文件.和注册表;;★★★01.获取并创建驱动器盘符组成的表★★★(setq Drives (vlax-get-property (vlax-create-object "S ...
- 【Visual Lisp】变体与安全数组
(vlax-make-variant) ;;创建一个未初始化的变体 ;;01.整型值变体(setq myvar (vlax-make-variant 10)) ;;创建整型值变体,返回 #<va ...
- Visual Lisp获得网络时间的方法
(defun c:tt (/ ie-obj) (setq ie-obj (vlax-get-or-create-object "Msxml2.xmlhttp")) ) (vlax- ...
随机推荐
- dataguru(炼数成金)大数据培训基地印象
dataguru访问地址:http://f.dataguru.cn/?fromuid=99611 课程优惠码:C4B6 这段时间一直在dataguru(炼数成金)上学习<hadoop数据分析平 ...
- NPOI MVC 模型导出Excel通用类
通用类: public enum DataTypeEnum { Int = , Float = , Double = , String = , DateTime = , Date = } public ...
- js对象使用格式
var initEvent = { list:['editor'], editor:function () { var obj = $("[dataType = 'text']") ...
- 还是要好好研究开源的php
听说facebook是php写的,还是要静下心来好好研究一番的嘛,踏踏实实点点滴滴的做起来!加油
- c++ cout介绍与实现自己的cout
C++编程语言互换流中的标准输出流,需要iostream支持.读为 "c out([si:‘aʊt]". 名字 cout 类型 std::ostream 读为 "c ou ...
- web页面全角&半角
根据Unicode编码,全角空格为12288,半角空格为32 : 其他字符半角(33-126)与全角(65281-65374)的对应关系是:均相差65248 全角-->半角函数 //半角转换 ...
- MVC4 本地正常运行,发布到IIS7->403 - 禁止访问: 访问被拒绝。
代码编写完成,计划发布一个版本测试,没想到发布到IIS7 竟然报错“403-禁止访问”.还真第一次遇到这种问题..... 折腾了半天,终于解决. 1.提示报错403: 禁止访问: 访问被拒绝.您无权使 ...
- C++中数据对齐
大体看了看数据对齐,不知道是否正确,总结如下: struct A { char name; double dHeight; int age; }; sizeof(A) = (1+7+8+4+4) = ...
- SUSE zypper failed to work
记录解决的一个问题. 在SUSE 中zypper 不能使用,错误如下: hostname~ # zypper install make Refreshing service 'packman'.Une ...
- 消除a标签点击后产生的虚线框
为a标签添加这条属性: a:focus {outline:none;-moz-outline:none;}