明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1650|回复: 18

[提问] 如何快速实现多个多段线进行标注

[复制链接]
发表于 2022-10-19 17:52 | 显示全部楼层 |阅读模式
25明经币


如图所示,我想让a的内容变成B的内容,标注部分只标注上面和左边,A的内容为封闭的多段线,该如何写这样的程序呢,求大佬解决

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

最佳答案

查看完整内容

(defun c:NM (/ sc h d oldos oldla ss lst n obj minx miny maxx maxy pt1 ss pt2 pt3) (prompt "\n请选择要标注的对象") (setq ss (ssget)) (setq sc (getvar "dimscale")) (setq h (getvar "dimtxt")) (setq d (getvar "dimgap")) (setq oldos (getvar "osmode")) (setq oldla (getvar "clayer")) (command "_.UNDO" "BE") (setvar "cmdecho" 0) (setvar "osmode" 0) (repeat ...
发表于 2022-10-19 17:52 | 显示全部楼层
(defun c:NM (/ sc h d  oldos oldla ss lst n obj minx miny maxx  maxy pt1 ss
                                                        pt2 pt3)                   
  (prompt "\n请选择要标注的对象")
        (setq ss (ssget))  
  (setq sc (getvar "dimscale"))
  (setq h (getvar "dimtxt"))
  (setq d (getvar "dimgap"))
  (setq oldos (getvar "osmode"))
  (setq oldla (getvar "clayer"))
        (command "_.UNDO" "BE")
  (setvar "cmdecho" 0)
  (setvar "osmode" 0)
  (repeat (setq n (sslength ss))
    (setq obj (vlax-ename->vla-object (ssname ss (setq n (1- n)))))
    (vla-getboundingbox obj 'x 'y)
    (setq lst (cons (vlax-safearray->list y)
                                                                (cons (vlax-safearray->list x) lst)
                                                        )
    )
  )
  (setq  minx (car (vl-sort (mapcar 'car lst) '<))
                miny (car (vl-sort (mapcar 'cadr lst) '<))
                maxx (car (vl-sort (mapcar 'car lst) '>))
                maxy (car (vl-sort (mapcar 'cadr lst) '>))
  )
  (setq pt1 (list minx miny))
        (setq pt2 (list minx maxy))
  (setq pt3 (list maxx maxy))
       

  (command "dimlinear"
                pt1
                pt2
                (polar pt1 (+ (* -1.5 pi) (angle pt1 pt2)) (* sc (+ d h h h)))
  )
  (command "dimlinear"
                pt2
                pt3
                (polar pt2 (+ (* -1.5 pi) (angle pt2 pt3)) (* sc (+ d h h h)))
  )
  (setvar "osmode" oldos)
  (setvar "clayer" oldla)
  (setvar "cmdecho" 1)
  (command "_.UNDO" "E")
  (princ)
  (prin1)
)

评分

参与人数 1明经币 +1 收起 理由
tigcat + 1 很给力!

查看全部评分

回复

使用道具 举报

发表于 2022-10-19 18:30 | 显示全部楼层
此版本支持多个多段线对象


(defun c:NM (/ sc h d  oldos oldla ss lst n obj minx miny maxx  maxy pt1 ss
                                                        pt2 pt3)                   
  (prompt "\n请选择要标注的对象")
  (setq sc (getvar "dimscale"))
  (setq h (getvar "dimtxt"))
  (setq d (getvar "dimgap"))
  (setq oldos (getvar "osmode"))
  (setq oldla (getvar "clayer"))
        (command "_.UNDO" "BE")
  (setvar "cmdecho" 0)
  (setvar "osmode" 0)       
        (mapcar '(lambda(a / lst maxx maxy minx miny n obj pt1 pt2 pt3 ss)   
                                                 (setq ss(ssadd a))
                                                 (repeat (setq n (sslength ss))
                                                         (setq obj (vlax-ename->vla-object (ssname ss (setq n (1- n)))))
                                                         (vla-getboundingbox obj 'x 'y)
                                                         (setq lst (cons (vlax-safearray->list y)
                                                                                                         (cons (vlax-safearray->list x) lst)
                                                                                                 )
                                                         )
                                                 )
                                                 (setq  minx (car (vl-sort (mapcar 'car lst) '<))
                                                         miny (car (vl-sort (mapcar 'cadr lst) '<))
                                                         maxx (car (vl-sort (mapcar 'car lst) '>))
                                                         maxy (car (vl-sort (mapcar 'cadr lst) '>))
                                                 )
                                                 (setq pt1 (list minx miny))
                                                 (setq pt2 (list minx maxy))
                                                 (setq pt3 (list maxx maxy))
                                                 
                                                 
                                                 (command "dimlinear"
                                                         pt1
                                                         pt2
                                                         (polar pt1 (+ (* -1.5 pi) (angle pt1 pt2)) (* sc (+ d h h h)))
                                                 )
                                                 (command "dimlinear"
                                                         pt2
                                                         pt3
                                                         (polar pt2 (+ (* -1.5 pi) (angle pt2 pt3)) (* sc (+ d h h h)))
                                                 )
                                         )       
                (vl-remove-if-not '(lambda(x)(= 'ENAME (type x))) (mapcar 'cadr (ssnamex (ssget '((0 . "*LINE,*POLYLINE"))))))
        )
  (setvar "osmode" oldos)
  (setvar "clayer" oldla)
  (setvar "cmdecho" 1)
  (command "_.UNDO" "E")
  (princ)
)

评分

参与人数 1明经币 +1 收起 理由
cj52000 + 1 很好用!

查看全部评分

回复

使用道具 举报

 楼主| 发表于 2022-10-19 18:45 | 显示全部楼层
xj6019 发表于 2022-10-19 17:52
(defun c:NM (/ sc h d  oldos oldla ss lst n obj minx miny maxx  maxy pt1 ss
                                                        pt2 pt3)                   
...

大佬牛,谢谢,学到了
回复

使用道具 举报

发表于 2022-10-19 21:22 | 显示全部楼层
xj6019 发表于 2022-10-19 18:30
此版本支持多个多段线对象

谢谢大师,很实用,工作中需要防呆,所以不能有两个长宽相同的多段线,长宽必须唯一,我在想如果在标注长宽的同时,能不能把长宽一样的多段线用相同的颜色来显示,这样一看就知道是哪两个或哪几个多段线是一样的,一目了然,请帮忙看看,谢谢 !


本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2022-10-19 21:36 | 显示全部楼层
cj52000 发表于 2022-10-19 21:22
谢谢大师,很实用,工作中需要防呆,所以不能有两个长宽相同的多段线,长宽必须唯一,我在想如果在标注长 ...

搞不了,学艺未精, 这玩意判断太费劲了  
回复

使用道具 举报

发表于 2022-10-20 08:33 | 显示全部楼层
向高手学习666
回复

使用道具 举报

发表于 2022-10-21 11:22 | 显示全部楼层
xj6019 发表于 2022-10-19 18:30
此版本支持多个多段线对象

大佬尺寸偏移距离能设置吗?
回复

使用道具 举报

发表于 2022-10-21 11:24 | 显示全部楼层
h806600727 发表于 2022-10-21 11:22
大佬尺寸偏移距离能设置吗?

sc 换成你喜欢的比例就可以改了

本帖子中包含更多资源

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

x
回复

使用道具 举报

发表于 2022-10-21 13:23 | 显示全部楼层
xj6019 发表于 2022-10-21 11:24
sc 换成你喜欢的比例就可以改了

好的,谢谢大佬
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-29 02:29 , Processed in 0.166497 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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