批量创建标注样式源码
刚学lisp,参考大佬的帖子写了个简单的创建标注样式插件。功能:输入字体样式、标注比例,批量创建标注样式。
改进计划:有时间的话打算加一个自动加载仿宋字体、判断输入字体是否存在的功能
其他:补充了一个“角度标注-精度”群码
PS:想问一下有比较全的群码表吗?之前站内找的不太全,感觉好多都没写
参考:(发不了链接...)
1、标注样式组码,entmake创建标注样式,应该是目前最全的 - AutoLISP/Visual LISP 编程技术 - AutoCAD论坛 - 明经CAD社区
2、AutoLISP笔记——常用代码片断-CSDN
;------------------------------------------------------------------------------------------------------;
;创建单个标注样式
(defun pzj:add-dimstyle (name scale jtsize textstyle texth)
;创建标注样式,参考:<span style="background-color: rgb(255, 255, 255);">1、标注样式组码,entmake创建标注样式,应该是目前最全的 - AutoLISP/Visual LISP 编程技术 - AutoCAD论坛 - 明经CAD社区</span>
(entmake
(list
'(0 . "DIMSTYLE")
'(100 . "AcDbSymbolTableRecord")
'(100 . "AcDbDimStyleTableRecord")
(cons 2 name) ; 标注样式名,不支持这些符号 \ < > / ? " : ; * | , = '
;线
'(176 . 256);尺寸线-颜色:256=ByLayer,0=ByBlock,1=红色……
(cons 345 (tblobjname "LTYPE" "Bylayer")) ;尺寸线-线型=Bylayer,ByBlock=此项消失…
'(371 . -1) ;尺寸线-线宽:ByLayer=-1,ByBlock=此项消失,25=0.25mm…
'(46 . 0) ;尺寸线-超出标记 的距离
'(43 . 0) ;尺寸线-基线间距
'(281 . 0) ;尺寸线-隐藏:尺寸线1,0=显示,1=隐藏
'(282 . 0) ;尺寸线-隐藏:尺寸线2,0=显示,1=隐藏
'(177 . 256);延申线-颜色:256=ByLayer,0=ByBlock,1=红色……
(cons 346 (tblobjname "LTYPE" "Bylayer")) ;延伸线-线型1=Bylayer,ByBlock=此项消失…
(cons 347 (tblobjname "LTYPE" "Bylayer")) ;延伸线-线型1=Bylayer,ByBlock=此项消失…
'(372 . -1) ;延申线-线宽:ByLayer=-1,ByBlock=此项消失,25=0.25mm…
'(44 . 2) ;延申线-超出尺寸线 的距离
'(42 . 2) ;延申线-起点偏移量,标注点到延伸线的距离
'(75 . 0) ;延申线-隐藏:延伸线1,0=显示,1=隐藏
'(76 . 0) ;延申线-隐藏:延伸线2,0=显示,1=隐藏
'(290 . 1) ;延申线-固定长度的延伸线,0=不勾选,1=勾选此项
'(49 . 2) ;延申线-固定长度的延伸线-长度
;符号和箭头
'(5 . "ArchTick") ;;箭头-第一个,实心闭合=此项消失?,空心闭合="ClosedBlank",建筑标记="ArchTick",实心圆点="Dot"
(cons 41 jtsize) ;;箭头-箭头大小
'(141 . 0) ;;圆心标记,0=无,正数=标记,负数=直线
;'(90 . 0) ;;弧长符号:标注文字的上方=1,无=2,标注文字的前缀=此项消失
;缺:箭头-第二个、箭头-引线、折断大小、折弯半径、折弯高度因子
;文字
(cons 340 (tblobjname "style" textstyle)) ;文字外观-文字样式
'(178 . 256) ;文字外观-文字颜色:256=ByLayer,0=ByBlock,7=白色……
'(69 . 0) ;文字外观-填充颜色类型:0=不填充,1=背景色,2=使用颜色编号
'(70 . 256) ;文字外观-填充颜色:256=ByLayer,0=ByBlock,1红2黄……使用颜色编号时此项必备
(cons 140 texth);文字外观-文字高度
'(77 . 1) ;文字位置-垂直:1=上,0=居中,4=下……
'(280 . 0) ;文字位置-水平:0=居中,1=第一条延伸线……
'(147 . 1) ;文字位置-从尺寸线偏移,填入负数时,“绘制文字边框”项会被勾选
'(73 . 0) ;文字对齐:水平=1,与尺寸线对齐=0,ISO标准=0
'(74 . 0) ;文字对齐:水平=1,与尺寸线对齐=0,ISO标准=1
;缺:文字外观-分数高度比例
;文字位置-观察方向、文字位置-观察方向
;调整
'(174 . 1);调整选项:文字始终在延伸线之间=1,文字=0,箭头=0,文字和箭头=0,文字或箭头=0
'(289 . 2);调整选项:文字始终在延伸线之间=2,文字=2,箭头=1,文字和箭头=0,文字或箭头=此项消失
'(175 . 0);调整选项-若箭头不能放在延伸线内则将其消除,不勾选=0,勾选=1
'(279 . 1);文字位置:尺寸线上方不带引线=2,尺寸线上方带引线=1,尺寸线旁边=0
'(40 . 1) ;标注特征比例:将标注缩放到布局=0,使用全局比例>0,
'(288 . 0);优化:手动放置文字,不勾选=0,勾选=1
'(172 . 0);优化:在延伸线之间绘制尺寸线,不勾选=0,勾选=1
;主单位
'(270 . 2);线性标注-单位格式:科学=1,小数=2,工程=3……
'(271 . 0);线性标注-精度:0=0,0.0=1,0.00=2…
'(271 . 0);线性标注-精度:0=0,0.0=1,0.00=2…(不是我重复,组码表就是列出了2个)
'(272 . 0);线性标注-舍入:0=0,0.0=1,0.00=2…
(cons 144 scale);线性标注-测量单位比例-比例因子
;'(78 . 8) ;线性标注-消零-后续:勾选=8
'(275 . 0);角度标注-单位格式:十进制=0
'(179 . 2);角度标注-精度:0=0,1=0.0,2=0.00…
;'(79 . 2) ;角度标注-消零-后续:勾选=2
;缺:线性标注-前缀、线性标注-后缀、线性标注-测量单位比例-仅应用到布局、线性标注-消零-前导
; 角度标注-精度、角度标注-消零-前导
;缺:
;换算单位
;公差
)
)
(princ)
)
;------------------------------------------------------------------------------------------------------;
;搬运(懒得写^_^),原文链接:<span style="background-color: rgb(255, 255, 255);">2、AutoLISP笔记——常用代码片断-CSDN</span>
;按指定字符分割字符串,返回字符串列表
(defun split (str delim / lst pos)
(while (setq pos (vl-string-search delim str))
(setq lst (append lst (list (substr str 1 pos))))
(setq str (substr str (+ 2 pos)))
)
(if (> (strlen str) 0)
(append lst (list str))
lst
)
)
;------------------------------------------------------------------------------------------------------;
;批量创建标注样式
(defun c:addbz( / textstyle strlst scalelst)
(setq scalelst nil)
(setq
textstyle (getstring "\n输入文字样式名称(默认为仿宋):")
strlst(split (getstring "\n输入创建的标注比例,多个比例间以英文逗号分隔(回车创建默认比例):")",")
)
(if (not (= strlst nil))
(foreach scale strlst (setq scalelst (cons (atof scale) scalelst)))
)
(or (not (= textstyle "")) (setq textstyle "仿宋"))
(or scalelst(setq scalelst (list 20 50 100 200 300 400 500 600 700 800 900 1000)))
(foreach scale scalelst
(if (not (tblsearch "dimstyle" (strcat "pzj-1:" (rtos scale 2 0))))
(pzj:add-dimstyle (strcat "1:" (rtos scale 2 0)) scale 2 textstyle 2.5)
)
)
(princ)
)
你有种再说一遍 发表于 2024-6-2 21:13
学到组码缺失性,然后觉得奇怪,
再学学vla觉得怎么两个模样,
再学学多线程,怎么这个没得学...
惊惊大佬高强度冲浪:lol 幽兰聆雨 发表于 2024-6-2 21:23
是准备有空学学C#,lisp好用的编辑器都难找,没代码自动补全,比较难受。
不是专业的,lisp目前来说够用 ...
其实不专业才需要用c#,因为百度就能找到的答案,而lisp要来论坛才行...语法的简单掩盖了操作的复杂... 你有种再说一遍 发表于 2024-6-2 21:13
学到组码缺失性,然后觉得奇怪,
再学学vla觉得怎么两个模样,
再学学多线程,怎么这个没得学...
是准备有空学学C#,lisp好用的编辑器都难找,没代码自动补全,比较难受。
不是专业的,lisp目前来说够用了,没空的话可能也不会学C#。 学到组码缺失性,然后觉得奇怪,
再学学vla觉得怎么两个模样,
再学学多线程,怎么这个没得学...
然后处理图层名的时候发现奇怪utf8被ascii读取,每次都是乱码...
然后就放弃了,转入c#大家庭 谢谢分享 以当前标注来创建其它标注,最简单,修改不同的几项就行了 thanks for sharing
自贡黄明儒 发表于 2024-6-2 22:39
以当前标注来创建其它标注,最简单,修改不同的几项就行了
主要是为了方便在不同图纸快速创建习惯的标注样式,获取当前标注的话还得先手动搞一个,感觉麻烦一点 你有种再说一遍 发表于 2024-6-2 21:13
学到组码缺失性,然后觉得奇怪,
再学学vla觉得怎么两个模样,
再学学多线程,怎么这个没得学...
转战C#了