admin1 发表于 2024-4-5 16:09:29

[基础] 使用普通标注代替你的引线标注

ACAD的引线标注对象的逻辑本身是很奇怪的.
它是用箭头,直线和文字使用反应器组在一起的.
虽然DIMENSION对象实际上也是这样依靠反应器绑定在一起的,
但引线标注和其他的线性角度尺寸的标注却不是一个统一的对象分类.
这就造成了很大困扰.
对于绘图来说,我们自然而然地会认为引线标注也是标注,
它理应和其他标注是一个统一的东西.
只有这样这样我们对标注批量操作,批量选择,
比如标注依图层一键归层,
或者使用样式替代,系统变量去灵活控制标注的各种呈现方式时才会更方便,
而不是标注对象是一个东西,引线标注又是另外一个东西,
即便你可以通过代码去分别操作,但这也是一种不值得的行为,毕竟本来可以不需要多这些事情的.
后来我发现,标注里的半径和直径本来就可以引出尺寸,引出文字等等操作.
实际上和引线标注的方式是一样的,只不过你用文字去替代自动生成的直径或者半径值就好了.
当然,这样一来,这个尺寸就是所谓的"假尺寸"了,
但是引线标注本来就是说明性标注,并不存在实际测量的需求,所以完全可以替代引线标注
这样一来就把引线标注全部统一到了DIMENSION对象.
动态显示,注释性啥的就都是一样的了.
你所有的对于DIMENSION操作的程序都对现在这个"引线标注"是生效的,而不需要另外编写代码


里面还加入了一个建立标注样式的内容,
方便你自行调整,但是可能不全,
因为我个人习惯是使用样式替代去后期灵活调整尺寸,
最后使用标准检查来对每一个文档进行统一化,
初始样式对我而言并不重要.
不需要的话就自己删了吧

p.s.方法是通过建立了一个小半径的圆来作为产生半径标注的依据,
缺点是引线箭头的位置点和实际标注点的距离会有这么一个小半径的距离.
但是只要这个半径足够小,对引线标注来说就无所谓了.
当然,如果你是强迫症,你应该可以找到方法来修正,我就不费那个脑筋了.(defun c:TEST( / creatdimstyleforleader enc entc pts text)
(defun CreatDimstyleForLeader()
    (command "-style" "gbenor" "gbenor,gbcbig" "0" "1" "5" "n" "n" "" )
    (command "dimblk" "_open30");; 改变箭头样式需要像这样先引入到符号表
    (entmakex
      (list
          (cons   0"dimstyle")
          (cons 100 "AcDbSymbolTableRecord")
          (cons 100 "AcDbDimStyleTableRecord")
          (cons2"半径替代引线标注");标注名称
          (cons700);
          (cons 340 (tblobjname "STYLE" "gbenor"));
      )
      )
    (entmakex
      (list
      (cons   0"dimstyle")
      (cons 100 "AcDbSymbolTableRecord")
      (cons 100 "AcDbDimStyleTableRecord")
      (cons2"半径替代引线标注$4")   ;; "半径替代引线标注"必须和主样式名称一样    "$4"->代表半径子样式
      (cons700)
      (cons 340 (tblobjname "STYLE" "gbenor"))
      (cons 1403);"dimtxt" 文字高度
      (cons 178 40 );"dimclrt"文字颜色
      (cons 147 0.8); "dimgap"文字偏移
      (cons 74 1);"dimtoh"0 将文字与尺寸线对齐 1水平绘制文字
      (cons 271 3) ;"dimdec" 标注精度
      (cons 179 1) ;"dimadec"角度小数位
      (cons 272 3);"dimtdec"标注公差值小数位
      (cons 288 0);"dimupt"不允许手动移动标注文字位置
      (cons 170 0) ;"dimalt"单制尺寸,1为标注自动显示双制尺寸
      (cons 176 72) ;"dimclrd" 尺寸线颜色
      (cons 177 72) ;"dimclre" 尺寸界线颜色
      (cons 77 1);"dimtad" 文字位于尺寸线上方,0中,1上,2下
      (cons 78 8) ;"dimzin"消后0
      (cons 41 1);"dimasz"箭头大小
      (cons 342 (cdr (assoc 330 (entget (tblobjname "BLOCK" "_Open30"))))) ;dimblk箭头样式
      (cons 275 0); "dimaunit"角度标注的单位格式0十进制,1度分秒,2百分度,3弧度
      (cons 279 0);"dimtmove"标注文字的移动规则
      (cons 42 0.1);"dimexo"尺寸界线偏离原点的距离
      (cons 44 0.4);"dimexe" 尺寸线超出尺寸界线的距离
      (cons 43 0);"dimdli" 尺寸线间距
      (cons 283 1);"dimtolj"公差垂直位置0下,1中,2上
      (cons 278 0); "dimdsep" 小数点样式
      (cons 141 0); "dimcen" 圆心标记
      (cons 146 0.8);"dimtfac" 公差文字缩放比例
      (cons 284 8); "dimtzin" 公差值消0
      )
    )   
)

;;main
(CreatDimstyleForLeader)
(vla-put-activedimstyle
    (vla-get-activedocument (vlax-get-acad-object))
    (vlax-ename->vla-object (tblobjname "DIMSTYLE" "半径替代引线标注")));;如果你的主标注样式的半径引出和你想要的引线样式在形式上是一致的,可以不用单独建立一个引线标注样式,你也可以单独拿出来,不用每回都运行一遍样式创建

(setq text (getstring "<输入注释文字的内容>"))
(setq pts (getpoint"指定引线的起点"))
(entmake (list(cons 0 "circle")(cons 10 (trans pts 1 0) )(cons 40 0.005)))
(setq entc (entlast))
(setq enc(list entc pts))
(vl-cmdf "_.dimradius" enc"t" textpause )
(entdel entc)
(princ)
)
页: [1]
查看完整版本: [基础] 使用普通标注代替你的引线标注