明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1690|回复: 3

[经验] 分享:entmake创建水平标注垂直标注

[复制链接]
发表于 2019-9-30 08:14:31 | 显示全部楼层 |阅读模式
本帖最后由 小万LISP 于 2019-9-30 08:38 编辑

entmake创建标注的时候,似乎某些列表的顺序不能乱,否则出错。看我的搞法:

  • ;水平标注测试
  • (defun c:tt(/ a b )
  •   (setq
  •     a(getpoint "\n 指定起点:")
  •     b(getpoint "\n 指定终点:")
  •   )
  •   (DimX a b 1)
  •   (DimX a b 2)
  •   (DimX a b 3)
  •   (DimX a b 4)
  •   (DimX a b 1000)  ;需要多高写多高
  •   (DimX a b -1500)  ;需要多高写多高
  •   (princ)
  • )


  • ;自定义函数-水平标注,起点、终点、高度编号(上1、2,下3、4),图层=3制图_标注
  • (defun DimX(a b h)
  •   (setq h
  •     (cond
  •       ((= h 1)250)  ;图形上方第1层标注高度
  •       ((= h 2)550)  ;图形上方第2层标注高度
  •       ((= h 3)-370)  ;图形下方第1层标注高度
  •       ((= h 4)-740)  ;图形下方第2层标注高度
  •       (t h)
  •     )
  •   )
  •   (setq a (trans a 1 0) b (trans b 1 0) ) ;把点坐标从当前坐标系转换为世界坐标系
  •   (entmake
  •     (list
  •       '(0 . "DIMENSION")
  •       '(100 . "AcDbEntity")
  •       '(8 . "3制图_标注")  ;图层
  •       '(100 . "AcDbDimension")
  •       (cons 10 (list(car a)(+(cadr a)h)))  ;标注线高度定义点坐标
  •       '(70 . 32)  ;垂直/水平标注为32,倾斜标注为33
  •       '(1 . "")  ;文字替代内容,默认为空
  •       '(3 . "DIM_200")  ;标注样式
  •       '(100 . "AcDbAlignedDimension")
  •       (cons 13 a)  ;标注起点坐标
  •       (cons 14 b) ;标注终点坐标
  •       ;'(50 . 1.5708) ;旋转弧度,垂直=1.5708,水平时=0可删除此项
  •       '(100 . "AcDbRotatedDimension")
  •     )
  •   )
  • )





 楼主| 发表于 2019-9-30 08:27:32 | 显示全部楼层
如果要想创建垂直标注,只要把
'(50 . 1.5708) ;旋转弧度,垂直=1.5708,水平时=0可删除此项
加入到
'(100 . "AcDbRotatedDimension")
前面一行,即可。
发表于 2019-9-30 14:09:39 | 显示全部楼层
谢谢谢谢楼主分享好程序
发表于 2021-4-14 08:25:26 | 显示全部楼层
小万LISP 发表于 2019-9-30 08:27
如果要想创建垂直标注,只要把
'(50 . 1.5708) ;旋转弧度,垂直=1.5708,水平时=0可删除此项
加入到

大佬们  这段源码标注的文字是水平的  怎么修改为增加可选项 ,有水平或垂直标注的选择?  多谢了





(defun c:zbbz (/ LC:TEXTLENGTH TEXTSTYLE-BAK TEXTSIZE-BAK TEXTHIGH XSWS PT1 PT2 STRLST TEXTLENGTH PT3 LST)
  (defun LC:TextLength (String / Tbox)
    (setq Tbox (textbox (list (cons 1 String))))
    (distance (car Tbox) (cadr Tbox))
  )
  (setq TEXTSTYLE-bak(getvar "TEXTSTYLE"))
  (setvar "TEXTSTYLE" "Standard")
  (setq textsize-bak (Getvar "textsize")) ;字高系统变量
  (setq texthigh (getreal "\n  请输入文字高度<1.5>: "))
  (if (null texthigh) (setq texthigh 1.5))
  (Setvar "textsize" texthigh)
  (setq xsws (getint "\n 请输入小数位数<3>: "))
  (if (null xsws) (setq xsws 3))
  (while (setq pt1 (getpoint "\n 指定注记点: "))
    (setq pt2 (getpoint "注记位置: "))  
    (setq strlst (mapcar'strcat'("Y= " "X= " "H= ")(mapcar '(lambda (x) (rtos x 2 xsws)) pt1)))
    (setq textlength (apply 'MAX (mapcar '(lambda (x) (LC:TextLength x)) strlst)));文字最大长度
    (setq pt3 (if (> (car pt2) (car pt1))
                  (polar pt2 0 (+ textlength 1))
                  (polar pt2 pi (+ textlength 1))
              )
    )
    (setq lst (list pt1 pt2 pt3))
    (entmake (list '(0 . "TEXT")'(41 . 1.0)(cons 1 (cadr strlst)) (cons 10 (polar (polar (IF (>= (car pt2) (car pt1)) pt2 pt3) 0 0.5) (* 0.5 pi) (* texthigh 0.2))) (cons 40 texthigh)))
    (entmake (list '(0 . "TEXT")'(41 . 1.0) (cons 1 (car strlst)) (cons 10 (polar (polar (IF (>= (car pt2) (car pt1)) pt2 pt3) 0 0.5) (* 1.5 pi) (+ (* texthigh 0.2) texthigh))) (cons 40 texthigh)))
    (entmake (list '(0 . "TEXT") '(41 . 1.0)(cons 1 (last strlst)) (cons 10 (polar (polar (IF (>= (car pt2) (car pt1)) pt2 pt3) 0 0.5) (* 1.5 pi) (+ (* texthigh 0.4) (* texthigh 2.0)))) (cons 40 texthigh)))
    (entmake (append (list '(0 . "LWPOLYLINE")'(100 . "AcDbEntity")'(100 . "AcDbPolyline")(cons 90 (length lst)))(mapcar '(lambda (pt) (cons 10 pt)) lst)))
  )
  (Setvar "textsize" textsize-bak) ;还原字高系统变量
  (setvar "TEXTSTYLE" TEXTSTYLE-bak) ;还原字体系统变量
)

您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-16 22:31 , Processed in 0.176341 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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