明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5292|回复: 14

[源码] 尺寸对齐

[复制链接]
发表于 2013-6-27 11:55:02 | 显示全部楼层 |阅读模式
本帖最后由 自贡黄明儒 于 2013-6-28 12:07 编辑

我是想一次框选,差不多在一条线的尺寸均对齐
对于尺寸,我只进行了一次预处理(vlax-put x 'TextMovement 0),应该还有别的,等各位高手完善一下
  1.   ;;2.1 首先假定一张图上标注字体是同样大小,小于字高2X认为在同一行(列)
  2.   ;;2.2 以选择或者生成的第一个对象作为基准对象
  3.   ;;2.3 (100 . "AcDbAlignedDimension")才能用以对齐
  4.   (defun DimensionDimDQ        (/ SS TXTHT)
  5.     ;;1 错误处理
  6.     (defun *error* (s)
  7.       (if (= 8 (logand (getvar "undoctl") 8))
  8.         (command "_.undo" "_e")
  9.       )
  10.       (setvar "nomutt" 0)
  11.     )
  12.     ;;2 旋转一个点pnt   
  13.     (defun rotate_pnt (pnt p1 ang)
  14.       (polar p1 (+ (angle p1 pnt) ang) (distance p1 pnt))
  15.     )
  16.     ;;3 对齐
  17.     (defun HH:dimAliDo (SS     /      ANGL0  ANGLN  DIS           EN0          ENTLIS I
  18.                         OB0    P10    P10A   P10N   P10T   P11          P11A         P11N
  19.                         P11P   P11PT  P14    P14N   SS1
  20.                        )
  21.       (setq en0           (ssname ss 0)
  22.             ob0           (vlax-ename->vla-object en0)
  23.             entlis (entget en0)
  24.             p10           (cdr (assoc 10 entlis))
  25.             P14           (cdr (assoc 14 entlis))
  26.             P11           (cdr (assoc 11 entlis))
  27.       )
  28.       (ssdel en0 ss)
  29.       (setq p10a (rotate_pnt p14 p10 (/ pi 2.0))) ;p14绕p10转90度
  30.       (setq p11a (mapcar '+ (mapcar '- p11 p10) p10a)) ;文字方向另一点
  31.       (setq angl0 (abs (angle p10 p14)))          ;角度
  32.       (if (> angl0 Pi)
  33.         (setq angl0 (rem angl0 Pi))
  34.       )
  35.       (if TxtHT
  36.         nil
  37.         (setq TxtHT
  38.                (* (vlax-get ob0 'ScaleFactor) (vlax-get ob0 'TextHeight))
  39.         )
  40.                                                   ;组码10误差在此内是同行(列)
  41.       )
  42.       (setq ss1 (ssadd))
  43.       (repeat (setq i (sslength ss))
  44.         (setq en0    (ssname ss (setq i (1- i)))
  45.               entlis (entget en0)
  46.               p10N   (cdr (assoc 10 entlis))
  47.               P14N   (cdr (assoc 14 entlis))
  48.               P11N   (cdr (assoc 11 entlis))
  49.         )
  50.         ;;但愿基准对象的p10 p14是不等的
  51.         (if (equal p10N P14N 0.001)
  52.           (setq        p10N p10
  53.                 P14N P14
  54.           )
  55.         )
  56.         (setq anglN (abs (angle p10N p14N)))
  57.         (if (> anglN pi)
  58.           (setq anglN (rem anglN pi))
  59.         )
  60.         (setq P10T (inters p10 p10a p10N p14N nil))
  61.         (setq dis (distance P10T p10N))
  62.         ;;如果标注角度相同,高度小于字高一倍
  63.         (if (and (equal anglN angl0 0.001) (< dis TxtHT))
  64.           (progn
  65.             (setq entlis (subst (cons 10 P10T) (assoc 10 entlis) entlis))
  66.             (setq p11P (mapcar '+ (mapcar '- p11N p10N) p14N))
  67.             (setq P11PT (inters p11P P11N p11 P11a nil))
  68.             (entmod (subst (cons 11 P11PT) (assoc 11 entlis) entlis))
  69.           )
  70.           (setq ss1 (ssadd en0 ss1))
  71.         )
  72.       )

  73.       (if (and ss1 (> (sslength ss1) 1))
  74.         (HH:dimAliDo ss1)
  75.       )
  76.     )
  77.     ;;4 主程序
  78.     (princ "\n 第一选择或者生成的尺寸为对齐基准,请框选尺寸:")
  79.     (setvar "nomutt" 1)
  80.     (setq ss (ssget '((0 . "DIMENSION") (100 . "AcDbAlignedDimension"))))
  81.     (setvar "nomutt" 0)
  82.     (command "_.undo" "be")
  83.     (if        (and ss (> (sslength ss) 1))
  84.       (progn
  85.         (vlax-for x
  86.                     (vla-get-ActiveSelectionSet
  87.                       (vla-get-ActiveDocument (vlax-get-acad-object))
  88.                     )
  89.           (vlax-put x 'TextMovement 0)
  90.         )
  91.         (HH:dimAliDo ss)
  92.       )
  93.     )
  94.     (command "_.undo" "e")
  95.     (gc)
  96.     (princ)
  97.   )

本帖子中包含更多资源

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

x
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2023-8-22 08:48:07 | 显示全部楼层
不是没有,是这个功能单一而已
发表于 2023-9-10 15:04:13 | 显示全部楼层

支持楼主,收藏备用!!!!!
发表于 2018-9-4 06:06:09 来自手机 | 显示全部楼层
感謝樓主無私分享
发表于 2013-6-27 12:50:41 | 显示全部楼层
假如水平方向有多层标注情况呢?

点评

多层对齐的在这里http://bbs.mjtd.com/forum.php?mod=viewthread&tid=90592  发表于 2013-6-28 00:01
各层对齐各层,只要误差不差不超过字高2倍  发表于 2013-6-27 12:57
发表于 2013-6-27 16:41:35 | 显示全部楼层
坐标标注有效否、
发表于 2013-6-27 21:24:16 | 显示全部楼层
谢谢楼主
先占个位置,日后用得着
 楼主| 发表于 2013-6-27 21:45:47 来自手机 | 显示全部楼层
yaokui25 发表于 2013-6-27 21:24
谢谢楼主
先占个位置,日后用得着

明经和晓东论坛,目前都没有完善的程序,我想有两种原因,一是高手们不屑一顾,二是有点难。我这个也是明显缺陷的
发表于 2013-6-27 21:49:43 | 显示全部楼层
自贡黄明儒 发表于 2013-6-27 21:45
明经和晓东论坛,目前都没有完善的程序,我想有两种原因,一是高手们不屑一顾,二是有点难。我这个也是明 ...

楼主也是高手中的高手
做了这么多方便工作的程序,大家已经很感谢您了

点评

其实离高手差远了,不要乱哄抬.  发表于 2013-6-28 10:54
其实高高手差远了,不要乱哄抬。  发表于 2013-6-28 10:53
发表于 2013-6-28 10:45:31 | 显示全部楼层
谢谢楼主
发表于 2013-7-4 09:51:38 | 显示全部楼层
谢谢楼主  谢谢楼主
发表于 2013-7-5 10:17:23 | 显示全部楼层
支持楼主,收藏备用
发表于 2015-9-30 15:28:46 | 显示全部楼层
支持楼主,收藏备用!!!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-17 04:48 , Processed in 0.209093 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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