明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: ddqzmpaxlozc

[提问] 可否实现智能标注

[复制链接]
发表于 2020-3-17 21:03 | 显示全部楼层
vla方法稍微快点

  1. (defun c:test2
  2.          (/ ss1 n  en ent lst1a lst1b ss2 lst2 lst3 m p pa  pb pc
  3.     adoc acspc)
  4.   (prompt "\n选择定位线:")
  5.   (setq ss1 (ssget '((0 . "line"))))
  6.   (repeat (setq n (sslength ss1))
  7.     (setq en  (ssname ss1 (setq n (1- n)))
  8.     ent (entget en)
  9.     )
  10.     (if  (equal (car (cdr (assoc 10 ent)))
  11.          (car (cdr (assoc 11 ent)))
  12.          1e-6
  13.   )
  14.       (setq lst1a (cons en lst1a))
  15.       (setq lst1b (cons en lst1b))
  16.     )
  17.   )
  18.   (prompt "\n选择标示物:")
  19.   (setq ss2 (ssget '((0 . "*line,point,circle,arc"))))
  20.   (repeat (setq n (sslength ss2))
  21.     (setq en  (ssname ss2 (setq n (1- n)))
  22.     ent (entget en)
  23.     )
  24.     (cond ((member (cdr (assoc 0 ent)) '("POINT" "CIRCLE"))
  25.      (setq lst2 (cons (cdr (assoc 10 ent)) lst2))
  26.     )
  27.     ((member (cdr (assoc 0 ent)) '("LINE" "ARC"))
  28.      (setq lst2 (cons (vlax-curve-getstartpoint en) lst2))
  29.      (setq lst2 (cons (vlax-curve-getendpoint en) lst2))
  30.     )
  31.     ((member (cdr (assoc 0 ent)) '("LWPOLYLINE" "POLYLINE"))
  32.      (setq m (vlax-curve-getendParam en))
  33.      (while (>= m 0)
  34.        (setq lst2  (cons (vlax-curve-getpointatparam en m) lst2)
  35.        m  (1- m)
  36.        )
  37.      )
  38.     )
  39.     )
  40.   )
  41.   (while lst2
  42.     (setq p    (car lst2)
  43.     lst  (cdr lst2)
  44.     lst3 (cons p lst3)
  45.     )
  46.     (if  lst2
  47.       (setq lst2 (vl-remove-if '(lambda (x) (equal p x 1e-6)) lst2))
  48.     )
  49.   )
  50.   (setq  lst3 (vl-sort lst3
  51.           '(lambda (p1 p2)
  52.        (if (equal (car p1) (car p2) 1e-6)
  53.          (< (cadr p1) (cadr p2))
  54.          (< (car p1) (car p2))
  55.        )
  56.            )
  57.        )
  58.   )
  59.   (setq n (car lst3))
  60.   (foreach n lst3
  61.     (setq
  62.       lst2 (mapcar
  63.        '(lambda (x) (list n (vlax-curve-getclosestpointto x n t)))
  64.        lst1a
  65.      )
  66.       lst2 (vl-sort lst2
  67.         '(lambda (p1 p2)
  68.            (< (distance (car p1) (cadr p1))
  69.         (distance (car p2) (cadr p2))
  70.            )
  71.          )
  72.      )
  73.     )
  74.     (setq acdoc  (vla-get-activedocument (vlax-get-acad-object))
  75.     acspc  (vlax-get-property
  76.       acdoc
  77.       (if (= 1 (getvar 'CVPORT))
  78.         'Paperspace
  79.         'Modelspace
  80.       )
  81.     )
  82.     )
  83.     (setq p  (car lst2)
  84.     pa (car p)
  85.     pb (cadr p)
  86.     pc (polar pa (* 0.5 pi) 500)
  87.     )
  88.     (vla-AddDimRotated
  89.       acspc
  90.       (vlax-3d-point pa)
  91.       (vlax-3d-point pb)
  92.       (vlax-3d-point pc)
  93.       0
  94.     )
  95.     (setq
  96.       lst2 (mapcar
  97.        '(lambda (x) (list n (vlax-curve-getclosestpointto x n t)))
  98.        lst1b
  99.      )
  100.       lst2 (vl-sort lst2
  101.         '(lambda (p1 p2)
  102.            (< (distance (car p1) (cadr p1))
  103.         (distance (car p2) (cadr p2))
  104.            )
  105.          )
  106.      )
  107.     )
  108.     (setq p  (car lst2)
  109.     pa (car p)
  110.     pb (cadr p)
  111.     pc (polar pa 0 500)
  112.     )
  113.     (vla-AddDimRotated
  114.       acspc
  115.       (vlax-3d-point pa)
  116.       (vlax-3d-point pb)
  117.       (vlax-3d-point pc)
  118.       (* 0.5 pi)
  119.     )
  120.   )
  121. )




本帖子中包含更多资源

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

x
回复

使用道具 举报

 楼主| 发表于 2020-3-17 21:15 | 显示全部楼层
x_s_s_1 发表于 2020-3-17 21:03
vla方法稍微快点

大佬,你能再帮着研究下标注之间避让的功能吗,你做的这个真是太合我心意了!!!
回复

使用道具 举报

发表于 2020-3-17 21:18 | 显示全部楼层
不好定避让规则
回复

使用道具 举报

 楼主| 发表于 2020-3-17 21:22 | 显示全部楼层
x_s_s_1 发表于 2020-3-17 21:18
不好定避让规则

麻烦您开动下脑筋想想呗,这个功能对我特别实用
回复

使用道具 举报

 楼主| 发表于 2020-3-17 21:30 | 显示全部楼层
x_s_s_1 发表于 2020-3-17 21:18
不好定避让规则

大佬,我再追加50悬赏您看可以吗

点评

我说了不要悬赏,谢谢。而且我确实无精力解决避让。  发表于 2020-3-17 21:34
回复

使用道具 举报

发表于 2020-3-18 00:07 | 显示全部楼层
本帖最后由 x_s_s_1 于 2020-3-18 00:32 编辑
ddqzmpaxlozc 发表于 2020-3-17 21:30
大佬,我再追加50悬赏您看可以吗

你给个避让规则吧,我来根据规则编,实际上都标出来了,避让不避让无所谓了,手工调整就是的


本帖子中包含更多资源

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

x

点评

早点休息吧,我再琢磨琢磨有什么比较容易判定的条件,明天再交流  发表于 2020-3-18 00:46
回复

使用道具 举报

 楼主| 发表于 2020-3-18 00:17 | 显示全部楼层
x_s_s_1 发表于 2020-3-18 00:07
你给个避让规则吧,我来根据规则编,实际上都标出来了,避让不避让无所谓了,手工调整就是的

谢谢大佬,稍等一下,我编辑

点评

尺寸标注稍微改了一下,另外上传了一个移动尺寸,配合着用吧  发表于 2020-3-18 00:34
看16楼  发表于 2020-3-18 00:33
回复

使用道具 举报

 楼主| 发表于 2020-3-18 00:36 | 显示全部楼层
x_s_s_1 发表于 2020-3-18 00:07
你给个避让规则吧,我来根据规则编,实际上都标出来了,避让不避让无所谓了,手工调整就是的

一、可以实现标注线之间相互避让,例如同方向的标注尺寸线之间距离最少为标注字高的1.5倍以上,如图1,2二、同一点的横纵向标注也应该避让,如图3,4

本帖子中包含更多资源

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

x

点评

重新下载一下16楼的test2,速度快一些  发表于 2020-3-18 00:41
看我16楼的动图,你会发现有无法避让的情况  发表于 2020-3-18 00:40
有时你会发现无法避让,不是那么简单的,我还是建议手工拖曳,反正最耗时的步骤已经解决了  发表于 2020-3-18 00:39
回复

使用道具 举报

 楼主| 发表于 2020-3-18 00:42 | 显示全部楼层
本帖最后由 ddqzmpaxlozc 于 2020-3-18 00:43 编辑
x_s_s_1 发表于 2020-3-18 00:07
你给个避让规则吧,我来根据规则编,实际上都标出来了,避让不避让无所谓了,手工调整就是的

需要不通过手工再调的,既是为了批量生成同轴线之间的定位标注,标注之间要避让开,这样确保打印出来可以看清楚,其实原则说白了就一点,标注线之间尽可能没有交叉,尺寸标注之间也互相避让。

点评

睡觉了,您自己试着改吧,白白  发表于 2020-3-18 00:43
回复

使用道具 举报

发表于 2020-3-18 09:04 | 显示全部楼层
避让规则很简单,按顺序标注,标注时候检测原来是否已有标注,有的话就向外增长一个值再放、再检测,直到无重叠为止。
当然编起来就比较费劲了。
参看我的管线标注避让。
避让规则很简单,按顺序标注,标注时候检测原来是否已有标注,有的话就向外增长一个值再放、再检测,直到无重叠为止。
当然编起来就比较费劲了。
参看我的管线标注避让。

本帖子中包含更多资源

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

x
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-20 21:00 , Processed in 0.650119 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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