幽兰聆雨 发表于 2024-6-2 20:45:45

批量创建标注样式源码

刚学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)
)

tranque 发表于 2024-6-2 21:49:39

你有种再说一遍 发表于 2024-6-2 21:13
学到组码缺失性,然后觉得奇怪,
再学学vla觉得怎么两个模样,
再学学多线程,怎么这个没得学...


惊惊大佬高强度冲浪:lol

你有种再说一遍 发表于 2024-6-2 21:45:05

幽兰聆雨 发表于 2024-6-2 21:23
是准备有空学学C#,lisp好用的编辑器都难找,没代码自动补全,比较难受。
不是专业的,lisp目前来说够用 ...

其实不专业才需要用c#,因为百度就能找到的答案,而lisp要来论坛才行...语法的简单掩盖了操作的复杂...

幽兰聆雨 发表于 2024-6-2 21:23:49

你有种再说一遍 发表于 2024-6-2 21:13
学到组码缺失性,然后觉得奇怪,
再学学vla觉得怎么两个模样,
再学学多线程,怎么这个没得学...


是准备有空学学C#,lisp好用的编辑器都难找,没代码自动补全,比较难受。
不是专业的,lisp目前来说够用了,没空的话可能也不会学C#。

你有种再说一遍 发表于 2024-6-2 21:13:01

学到组码缺失性,然后觉得奇怪,
再学学vla觉得怎么两个模样,
再学学多线程,怎么这个没得学...
然后处理图层名的时候发现奇怪utf8被ascii读取,每次都是乱码...
然后就放弃了,转入c#大家庭

moranyuyan 发表于 2024-6-2 21:54:22

谢谢分享

自贡黄明儒 发表于 2024-6-2 22:39:51

以当前标注来创建其它标注,最简单,修改不同的几项就行了

sachindkini 发表于 2024-6-3 15:38:35

thanks for sharing

幽兰聆雨 发表于 2024-6-3 17:17:34

自贡黄明儒 发表于 2024-6-2 22:39
以当前标注来创建其它标注,最简单,修改不同的几项就行了

主要是为了方便在不同图纸快速创建习惯的标注样式,获取当前标注的话还得先手动搞一个,感觉麻烦一点

幽兰聆雨 发表于 2024-6-15 14:54:18

你有种再说一遍 发表于 2024-6-2 21:13
学到组码缺失性,然后觉得奇怪,
再学学vla觉得怎么两个模样,
再学学多线程,怎么这个没得学...


转战C#了
页: [1] 2 3
查看完整版本: 批量创建标注样式源码