明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2540|回复: 22

[源码] 批量创建标注样式源码

[复制链接]
发表于 2024-6-2 20:45:45 | 显示全部楼层 |阅读模式
刚学lisp,参考大佬的帖子写了个简单的创建标注样式插件



功能:输入字体样式、标注比例,批量创建标注样式。
改进计划:有时间的话打算加一个自动加载仿宋字体、判断输入字体是否存在的功能
其他:补充了一个“角度标注-精度”群码

PS:想问一下有比较全的群码表吗?之前站内找的不太全,感觉好多都没写

参考:(发不了链接...)
1、标注样式组码,entmake创建标注样式,应该是目前最全的 - AutoLISP/Visual LISP 编程技术 - AutoCAD论坛 - 明经CAD社区
2、AutoLISP笔记——常用代码片断-CSDN
  1. ;------------------------------------------------------------------------------------------------------;
  2. ;创建单个标注样式
  3. (defun pzj:add-dimstyle (name scale jtsize textstyle texth)
  4.   ;创建标注样式,参考:<span style="background-color: rgb(255, 255, 255);">1、标注样式组码,entmake创建标注样式,应该是目前最全的 - AutoLISP/Visual LISP 编程技术 - AutoCAD论坛 - 明经CAD社区</span>
  5.   (entmake
  6.     (list
  7.       '(0 . "DIMSTYLE")
  8.       '(100 . "AcDbSymbolTableRecord")
  9.       '(100 . "AcDbDimStyleTableRecord")
  10.       (cons 2 name)   ; 标注样式名,不支持这些符号 \ < > / ? " : ; * | , = '

  11.       
  12.       ;线
  13.       '(176 . 256)  ;尺寸线-颜色:256=ByLayer,0=ByBlock,1=红色……
  14.       (cons 345 (tblobjname "LTYPE" "Bylayer")) ;尺寸线-线型=Bylayer,ByBlock=此项消失…
  15.       '(371 . -1)    ;尺寸线-线宽:ByLayer=-1,ByBlock=此项消失,25=0.25mm…
  16.       '(46 . 0)      ;尺寸线-超出标记 的距离
  17.       '(43 . 0)   ;尺寸线-基线间距
  18.       '(281 . 0)     ;尺寸线-隐藏:尺寸线1,0=显示,1=隐藏
  19.       '(282 . 0)    ;尺寸线-隐藏:尺寸线2,0=显示,1=隐藏
  20.       '(177 . 256)  ;延申线-颜色:256=ByLayer,0=ByBlock,1=红色……
  21.       (cons 346 (tblobjname "LTYPE" "Bylayer")) ;延伸线-线型1=Bylayer,ByBlock=此项消失…
  22.       (cons 347 (tblobjname "LTYPE" "Bylayer")) ;延伸线-线型1=Bylayer,ByBlock=此项消失…
  23.       '(372 . -1)    ;延申线-线宽:ByLayer=-1,ByBlock=此项消失,25=0.25mm…
  24.       '(44 . 2)   ;延申线-超出尺寸线 的距离
  25.       '(42 . 2)   ;延申线-起点偏移量,标注点到延伸线的距离
  26.       '(75 . 0)      ;延申线-隐藏:延伸线1,0=显示,1=隐藏
  27.       '(76 . 0)      ;延申线-隐藏:延伸线2,0=显示,1=隐藏
  28.       '(290 . 1)    ;延申线-固定长度的延伸线,0=不勾选,1=勾选此项
  29.       '(49 . 2)      ;延申线-固定长度的延伸线-长度
  30.    
  31.    
  32.       ;符号和箭头
  33.       '(5 . "ArchTick") ;;箭头-第一个,实心闭合=此项消失?,空心闭合="ClosedBlank",建筑标记="ArchTick",实心圆点="Dot"
  34.       (cons 41 jtsize)    ;;箭头-箭头大小
  35.       '(141 . 0)     ;;圆心标记,0=无,正数=标记,负数=直线
  36.       ;'(90 . 0)    ;;弧长符号:标注文字的上方=1,无=2,标注文字的前缀=此项消失
  37.       ;缺:箭头-第二个、箭头-引线、折断大小、折弯半径、折弯高度因子
  38.    
  39.    
  40.       ;文字
  41.       (cons 340 (tblobjname "style" textstyle)) ;文字外观-文字样式
  42.       '(178 . 256)    ;文字外观-文字颜色:256=ByLayer,0=ByBlock,7=白色……
  43.       '(69 . 0)      ;文字外观-填充颜色类型:0=不填充,1=背景色,2=使用颜色编号
  44.       '(70 . 256)    ;文字外观-填充颜色:256=ByLayer,0=ByBlock,1红2黄……使用颜色编号时此项必备
  45.       (cons 140 texth)  ;文字外观-文字高度
  46.       '(77 . 1)     ;文字位置-垂直:1=上,0=居中,4=下……
  47.       '(280 . 0)    ;文字位置-水平:0=居中,1=第一条延伸线……
  48.       '(147 . 1)   ;文字位置-从尺寸线偏移,填入负数时,“绘制文字边框”项会被勾选
  49.       '(73 . 0)      ;文字对齐:水平=1,与尺寸线对齐=0,ISO标准=0
  50.       '(74 . 0)      ;文字对齐:水平=1,与尺寸线对齐=0,ISO标准=1
  51.       ;缺:文字外观-分数高度比例
  52.       ;文字位置-观察方向、文字位置-观察方向

  53.       
  54.       ;调整
  55.       '(174 . 1)  ;调整选项:文字始终在延伸线之间=1,文字=0,箭头=0,文字和箭头=0,文字或箭头=0
  56.       '(289 . 2)  ;调整选项:文字始终在延伸线之间=2,文字=2,箭头=1,文字和箭头=0,文字或箭头=此项消失
  57.       '(175 . 0)  ;调整选项-若箭头不能放在延伸线内则将其消除,不勾选=0,勾选=1
  58.       '(279 . 1)  ;文字位置:尺寸线上方不带引线=2,尺寸线上方带引线=1,尺寸线旁边=0
  59.       '(40 . 1)   ;标注特征比例:将标注缩放到布局=0,使用全局比例>0,
  60.       '(288 . 0)  ;优化:手动放置文字,不勾选=0,勾选=1
  61.       '(172 . 0)  ;优化:在延伸线之间绘制尺寸线,不勾选=0,勾选=1
  62.    
  63.    
  64.       ;主单位
  65.       '(270 . 2)  ;线性标注-单位格式:科学=1,小数=2,工程=3……
  66.       '(271 . 0)  ;线性标注-精度:0=0,0.0=1,0.00=2…
  67.       '(271 . 0)  ;线性标注-精度:0=0,0.0=1,0.00=2…(不是我重复,组码表就是列出了2个)
  68.       '(272 . 0)  ;线性标注-舍入:0=0,0.0=1,0.00=2…
  69.       (cons 144 scale)  ;线性标注-测量单位比例-比例因子
  70.       ;'(78 . 8)   ;线性标注-消零-后续:勾选=8
  71.       '(275 . 0)  ;角度标注-单位格式:十进制=0
  72.       '(179 . 2)  ;角度标注-精度:0=0,1=0.0,2=0.00…
  73.       ;'(79 . 2)   ;角度标注-消零-后续:勾选=2
  74.       ;缺:线性标注-前缀、线性标注-后缀、线性标注-测量单位比例-仅应用到布局、线性标注-消零-前导
  75.       ;    角度标注-精度、角度标注-消零-前导
  76.    
  77.       ;缺:
  78.       ;换算单位
  79.       ;公差
  80.     )
  81.   )
  82.   (princ)
  83. )
  84. ;------------------------------------------------------------------------------------------------------;
  85. ;搬运(懒得写^_^),原文链接:<span style="background-color: rgb(255, 255, 255);">2、AutoLISP笔记——常用代码片断-CSDN</span>
  86. ;按指定字符分割字符串,返回字符串列表
  87. (defun split (str delim / lst pos)
  88.   (while (setq pos (vl-string-search delim str))
  89.     (setq lst (append lst (list (substr str 1 pos))))
  90.     (setq str (substr str (+ 2 pos)))
  91.   )
  92.   (if (> (strlen str) 0)
  93.     (append lst (list str))
  94.     lst
  95.   )
  96. )
  97. ;------------------------------------------------------------------------------------------------------;
  98. ;批量创建标注样式
  99. (defun c:addbz( / textstyle strlst scalelst)
  100.   (setq scalelst nil)
  101.   (setq
  102.     textstyle (getstring "\n输入文字样式名称(默认为仿宋):")
  103.     strlst  (split (getstring "\n输入创建的标注比例,多个比例间以英文逗号分隔(回车创建默认比例):")  ",")
  104.   )
  105.   (if (not (= strlst nil))
  106.     (foreach scale strlst (setq scalelst (cons (atof scale) scalelst)))
  107.   )
  108.   (or (not (= textstyle "")) (setq textstyle "仿宋"))
  109.   (or scalelst  (setq scalelst (list 20 50 100 200 300 400 500 600 700 800 900 1000)))
  110.   (foreach scale scalelst
  111.     (if (not (tblsearch "dimstyle" (strcat "pzj-1:" (rtos scale 2 0))))
  112.       (pzj:add-dimstyle (strcat "1:" (rtos scale 2 0)) scale 2 textstyle 2.5)
  113.     )
  114.   )
  115.   (princ)
  116. )

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

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

惊惊大佬高强度冲浪
回复 支持 1 反对 0

使用道具 举报

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

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

使用道具 举报

 楼主| 发表于 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#大家庭
发表于 2024-6-2 22:39:51 来自手机 | 显示全部楼层
以当前标注来创建其它标注,最简单,修改不同的几项就行了
发表于 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#了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 06:42 , Processed in 0.210074 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表