明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 18493|回复: 55

标注线段长度【文字方式】

  [复制链接]
发表于 2012-8-6 14:36 | 显示全部楼层 |阅读模式
本帖最后由 仲文玉 于 2012-8-11 08:30 编辑

  1. (defun C:kxbz ()
  2.   (COMMAND "UCS" "")
  3.   (setq cmdecho_bak (getvar "cmdecho"))
  4.   (setq AcadObject   (vlax-get-acad-object)
  5. AcadDocument (vla-get-ActiveDocument Acadobject)
  6. mSpace      (vla-get-ModelSpace Acaddocument)
  7.   )
  8.   ;;选取需要测量的样条曲线、圆弧、直线、椭圆
  9.   (setq en (ssget (list '(0 . "spline,arc,line,ellipse,LWPOLYLINE"))))
  10.   (setq i 0)
  11.   ;;获取系统参数textsize
  12.   (setq shh (getvar "textsize"))
  13.   (setq str_hh (strcat "\n文字高度 <" (rtos shh 2) ">: "))
  14.   (setq hh (getdist str_hh))
  15.   (while hh
  16.     (setvar "textsize" hh)
  17.     (setq hh nil)
  18.   )
  19.   ;;输入标注文字高度
  20.   ;;循环开始
  21.   (repeat (sslength en)
  22.     (setq ss (ssname en i))
  23.     (setq endata (entget ss))
  24.     (command "lengthen" ss "")
  25.     (setq dd (getvar "perimeter"))
  26.     (princ (strcat "\n长度=" (rtos dd 2)))
  27.     ;;寻找代表图层的字符串
  28.     (setq aa (assoc 0 endata))
  29.     ;;获取图层名称
  30.     (setq aa1 (cdr aa))
  31.     ;;判断线条种类
  32.     (cond
  33.       ((= aa1 "SPLINE")
  34.        ;;如果是spline
  35.        (progn
  36.   (setq arcObj (VLAX-ENAME->VLA-OBJECT ss))
  37.   (setq startPnt1 (vla-get-ControlPoints arcObj))
  38.   (setq p1
  39.   (vlax-safearray->list (vlax-variant-value startPnt1))
  40.   )
  41.   (setq x1 (car p1))
  42.   (setq y1 (cadr p1))
  43.   (setq z1 (caddr p1))
  44.   (setq pp1 (list x1 y1 z1))
  45.   (repeat (- (/ (length p1) 3) 1)
  46.     ;;循环,寻找最后一个控制点
  47.     (setq p1 (cdddr p1))
  48.     (setq x2 (car p1))
  49.     (setq y2 (cadr p1))
  50.     (setq z2 (caddr p1))
  51.   )
  52.   (setq pp2 (list x2 y2 z2))
  53.        )
  54.       )
  55.       ((= aa1 "LWPOLYLINE")
  56.        ;;如果是LWPOLYLINE
  57.        (progn
  58.   (setq arcObj (VLAX-ENAME->VLA-OBJECT ss))
  59.   (setq startPnt1 (vla-get-Coordinates arcObj))
  60.   (setq p1 (vlax-safearray->list (vlax-variant-value startPnt1)))
  61.   (setq x1 (car p1))
  62.   (setq y1 (cadr p1))
  63.   (setq z1 (caddr p1))
  64.   (setq pp1 (list x1 y1 z1))
  65.   (repeat (- (/ (length p1) 3) 1)
  66.     ;;循环,寻找最后一个控制点
  67.     (setq p1 (cdddr p1))
  68.     (setq x2 (car p1))
  69.     (setq y2 (cadr p1))
  70.     (setq z2 (caddr p1))
  71.   )
  72.   (setq pp2 (list x2 y2 z2))
  73.        )
  74.       )
  75.       (t
  76.        (princ)
  77.        ;;如果是其他种类线条
  78.        (progn
  79.   (setq arcObj (VLAX-ENAME->VLA-OBJECT ss))
  80.   (setq startPnt1 (vla-get-StartPoint arcObj))
  81.   ;;获取起点
  82.   (setq endPnt1 (vla-get-EndPoint arcObj))
  83.   ;;获取终点
  84.   (setq pp1
  85.   (vlax-safearray->list (vlax-variant-value startPnt1))
  86.   )
  87.   (setq
  88.     pp2 (vlax-safearray->list (vlax-variant-value endPnt1))
  89.   )
  90.        )
  91.       )
  92.     )
  93.     (setq x1 (car pp1))
  94.     (setq y1 (cadr pp1))
  95.     (setq z1 (caddr pp1))
  96.     (setq x2 (car pp2))
  97.     (setq y2 (cadr pp2))
  98.     (setq z2 (caddr pp2))
  99.     (setq x (/ (+ x1 x2) 2))
  100.     (setq y (/ (+ y1 y2) 2))
  101.     (setq z (/ (+ z1 z2) 2))
  102.     (setq pt (list x y z))
  103.     ;;取得线段两端的中点
  104.     (setq ang (angle pp1 pp2))
  105.     ;;获取角度
  106.     (if (> (* (/ ang pi) 180) 180)
  107.       (setq ang (+ ang pi))
  108.     )
  109.     (command "text"
  110.       "j"
  111.       "bc"
  112.       pt
  113.       ""
  114.       (* (/ ang pi) 180)
  115.       (strcat "" (rtos dd 2))
  116.     )
  117.     (princ)
  118.     (setq i (1+ i))
  119.   )
  120.   (princ)
  121.   (setvar "cmdecho" cmdecho_bak)
  122.   (princ)
  123. )

本帖子中包含更多资源

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

x

评分

参与人数 1明经币 +1 收起 理由
lisp爱好者 + 1 赞一个!

查看全部评分

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2020-8-20 14:00 | 显示全部楼层
香田里浪人 发表于 2014-12-6 17:51
;;;多义线边长标注
(defun HH:Remove (en / NEWDATA)
  (foreach e (entget en)

Auto CAD 2020 正常使用,但是会乱码
发表于 2020-9-7 20:28 | 显示全部楼层
我是win10 64位  CAD2010 错误: 输入的字符串有缺陷,班主咋搞呢
发表于 2022-5-25 10:07 | 显示全部楼层
有无让标注文字别跑那么远的修改编码?
 楼主| 发表于 2012-8-6 14:38 | 显示全部楼层
本帖最后由 仲文玉 于 2012-8-6 14:39 编辑

忘了备注作者信息,代码版权归原作者所有;鉴于很多会员们需要,贴出来,见谅
发表于 2012-8-6 14:43 | 显示全部楼层
老大这个利害!多谢了!

点评

别叫老大,朋友即可  发表于 2012-8-6 14:46
发表于 2012-8-6 14:44 | 显示全部楼层
多谢版主!好东西,收藏了!
发表于 2012-8-6 16:38 | 显示全部楼层

本帖子中包含更多资源

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

x

评分

参与人数 2明经币 +2 收起 理由
随梦而飞 + 1 很给力!
仲文玉 + 1 很给力!

查看全部评分

发表于 2012-8-6 19:10 | 显示全部楼层
这个 必须顶~~
发表于 2012-8-6 21:09 | 显示全部楼层
谢谢斑竹的分享!
收藏了。
谢谢!
发表于 2012-8-6 21:42 | 显示全部楼层
为什么我试用的时候,除了椭圆,其它的标设都乱飞到一边去
发表于 2012-8-6 21:46 | 显示全部楼层
而且程序头部少了(vl-load-com),建议补充或者加上
发表于 2012-8-7 10:17 | 显示全部楼层
标注乱发,楼主调整一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-4-20 22:02 , Processed in 0.441604 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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