明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: gcho

[源码] 求增减直线长度的工具

  [复制链接]
发表于 2011-7-26 08:50 | 显示全部楼层
本帖最后由 gbhsu 于 2011-7-26 08:52 编辑

回复 ljpnb 的帖子
可能是写错了,标注这个词我也不太明白!
应是,点选尺寸线的一端,可以伸长或缩短!
 楼主| 发表于 2011-7-26 09:03 | 显示全部楼层
本帖最后由 gcho 于 2011-7-26 10:25 编辑

类似将标注延长(或修剪)一样,看动画:

动画是为了表示清楚,添加了辅助线然后用了延伸_extend命令!
最好能和增减直线合并到一个命令zz(即选择对象可以为直线、也可以为标注),还有一点就是选择时提供一次框选多个对象。请ljpnb 再帮忙一下,谢谢!

本帖子中包含更多资源

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

x
发表于 2011-7-26 09:04 | 显示全部楼层

  1. (defun c:len ()
  2.   (setvar "cmdecho" 0)
  3.   (setq en (entsel "\n选择需要修改的标注:"))
  4.   (setq lengthen (getreal "\n输入需增加或减少的长度:"))
  5.   (setq pt1 (cadr en))
  6.   (setq ent (entget (car en)))
  7.   (setq        pta (cdr (assoc 13 ent))
  8.         ptb (cdr (assoc 14 ent))
  9.   )
  10.   (if (> (distance pta pt1) (distance pt1 ptb))
  11.     (progn (setq pt2 (polar ptb (angle pta ptb) lengthen))
  12.            (setq ent1 (cons 14 pt2))
  13.            (setq ent (subst ent1 (assoc 14 ent) ent))
  14.            (entmod ent)
  15.     )
  16.     (progn (setq pt2 (polar pta (angle ptb pta) lengthen))
  17.            (setq ent1 (cons 13 pt2))
  18.            (setq ent (subst ent1 (assoc 13 ent) ent))
  19.            (entmod ent)
  20.     )
  21.   )
  22.   (setvar "cmdecho" 1)
  23.   (princ)
  24. )

点评

呵呵,反应好快!  发表于 2011-7-26 10:50

评分

参与人数 1金钱 +20 收起 理由
gcho + 20 不错,要是能和增减直线合并到一个命令len就.

查看全部评分

发表于 2011-7-26 21:42 | 显示全部楼层
直线长度增减,支持框选


本帖子中包含更多资源

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

x

评分

参与人数 1金钱 +20 收起 理由
gcho + 20 好程序

查看全部评分

发表于 2011-7-26 22:46 | 显示全部楼层
gcho 发表于 2011-7-26 09:03
类似将标注延长(或修剪)一样,看动画:

动画是为了表示清楚,添加了辅助线然后用了延伸_extend命令!
...

这个像是尺寸驱动。貌似没有好的成熟的程序。
发表于 2011-7-27 12:43 | 显示全部楼层
简单的标注操作:

  1. (defun c:ddi (/        control        dim_ss mod refer refer_pt n m ent a_pt1        a_pt2 pta ptb pta1 ptb1        e_pt e_pt1
  2.               pt1 pt2 pt1a pt2a         jpt1 jpt2 lengthen ang en
  3.              )
  4.   (initget "H R UP A E")
  5.   (setq        control        (getkword
  6.                   "\n请选择操作方式:[复位(H)/还原(R)/更新(UP)/对齐(A)/延伸(E)]<退出>"
  7.                 )
  8.   )
  9.   (cond        ((= control "H")
  10.          (princ "\n选择需修改的标注 :")
  11.          (setq dim_ss (ssget '((0 . "DIMENSION"))))
  12.          (command "dimedit" "h" dim_ss "")
  13.         )
  14.         ((= control "R")
  15.          (princ "\n选择需修改的标注 :")
  16.          (setq dim_ss (ssget '((0 . "DIMENSION"))))
  17.          (command "dimedit" "n" "" dim_ss "")
  18.         )
  19.         ((= control "UP")
  20.          (princ "\n选择需修改的标注 :")
  21.          (setq dim_ss (ssget '((0 . "DIMENSION"))))
  22.          (command "-DIMSTYLE" "a" dim_ss "")
  23.         )
  24.         ((= control "A")
  25.          (initget "D L")
  26.          (setq mode (getkword "\n请选择对齐方式:[尺寸线(D)/延伸线(L)]<L>"))
  27.          (cond ((= mode "D")
  28.                 (setq refer (entsel "\n选择参考标注:"))
  29.                 (princ "\n选择需对齐的标注 :")
  30.                 (setq dim_ss (ssget '((0 . "DIMENSION"))))
  31.                 (setq refer_pt (assoc 10 (entget (car refer))))
  32.                 (setq n (sslength dim_ss))
  33.                 (setq m 0)
  34.                 (while (/= m n)
  35.                   (setq ent (entget (ssname dim_ss m)))
  36.                   (setq ent (subst refer_pt (assoc 10 ent) ent))
  37.                   (entmod ent)
  38.                   (setq m (1+ m))
  39.                 )
  40.                )
  41.                ((= mode "L")
  42.                 (setq a_pt1 (getpoint "\n指定对齐点:"))
  43.                 (princ "\n选择需对齐的标注 :")
  44.                 (setq dim_ss (ssget '((0 . "DIMENSION"))))
  45.                 (setq n (sslength dim_ss))
  46.                 (setq m 0)
  47.                 (while (/= m n)
  48.                   (setq ent (entget (ssname dim_ss m)))
  49.                   (setq        pta (cdr (assoc 10 ent))
  50.                         pt1 (cdr (assoc 13 ent))
  51.                         pt2 (cdr (assoc 14 ent))
  52.                   )
  53.                   (setq ang (angle pta pt2))
  54.                   (setq a_pt2 (polar a_pt1 (+ ang (* 0.5 pi)) 1.0))
  55.                   (setq pt1a (inters pt1 (polar pt1 ang 1.0) a_pt1 a_pt2 nil))
  56.                   (setq ent (subst (cons 13 pt1a) (assoc 13 ent) ent))
  57.                   (setq pt2a (inters pt2 pta a_pt1 a_pt2 nil))
  58.                   (setq ent (subst (cons 14 pt2a) (assoc 14 ent) ent))
  59.                   (entmod ent)
  60.                   (setq m (1+ m))
  61.                 )
  62.                )
  63.          )
  64.         )
  65.         ((= control "E")
  66.          (setq lengthen (getreal "\n输入需增加或减少的长度:<图中点取>"))
  67.          (if (= lengthen nil)
  68.            (setq e_pt (getpoint "\n延伸至:"))
  69.          )
  70.          (while        (setq en (entsel "\n选择需要修改的标注:"))
  71.            (setq pt1 (cadr en))
  72.            (setq ent (entget (car en)))
  73.            (setq pta (cdr (assoc 13 ent))
  74.                  ptb (cdr (assoc 14 ent))
  75.                  ptc (cdr (assoc 10 ent))
  76.                  ang (angle ptc ptb)
  77.            )
  78.            (if (= lengthen nil)
  79.              (progn (setq e_pt1        (polar e_pt ang 1.0)
  80.                           pta1        (polar pta (+ ang (* 0.5 pi)) 1.0)
  81.                           ptb1        (polar ptb (+ ang (* 0.5 pi)) 1.0)
  82.                     )
  83.                     (setq jpt1 (inters pta pta1 e_pt e_pt1 nil)
  84.                           jpt2 (inters ptb ptb1 e_pt e_pt1 nil)
  85.                     )
  86.                     (if        (< (distance pta jpt1) (distance ptb jpt2))
  87.                       (setq ent (subst (cons 13 jpt1) (assoc 13 ent) ent))
  88.                       (setq ent (subst (cons 14 jpt2) (assoc 14 ent) ent))
  89.                     )
  90.                     (entmod ent)
  91.              )
  92.              (progn
  93.                (if (> (distance pta pt1) (distance pt1 ptb))
  94.                  (progn        (setq pt2 (polar ptb (angle pta ptb) lengthen))
  95.                         (setq ent1 (cons 14 pt2))
  96.                         (setq ent (subst ent1 (assoc 14 ent) ent))
  97.                         (entmod ent)
  98.                  )
  99.                  (progn        (setq pt2 (polar pta (angle ptb pta) lengthen))
  100.                         (setq ent1 (cons 13 pt2))
  101.                         (setq ent (subst ent1 (assoc 13 ent) ent))
  102.                         (entmod ent)
  103.                  )
  104.                )
  105.              )
  106.            )
  107.          )
  108.         )
  109.   )
  110.   (setvar "cmdecho" 1)
  111.   (princ)
  112. )

评分

参与人数 1金钱 +20 收起 理由
gcho + 20 好程序

查看全部评分

发表于 2011-7-27 15:40 | 显示全部楼层
刚好需要啊,谢谢
发表于 2011-7-27 22:58 | 显示全部楼层
本帖最后由 ljpnb 于 2011-7-28 08:09 编辑

更新对象用直接修改DXF数据效率高,这里提供了另一种"拉伸"的方式来实现

  1. (defun c:tt ()
  2.   (setq en (entsel "\n选择一线性标注:"))
  3.   (setq        ent (car en)
  4.         dxf (entget ent)
  5.         pt  (cadr en)
  6.   )
  7.   (setq        p1  (cdr (assoc 10 dxf))
  8.         p3  (cdr (assoc 13 dxf))
  9.         p4  (cdr (assoc 14 dxf))
  10.         len (cdr (assoc 42 dxf))
  11.         txt (cdr (assoc 1 dxf))
  12.   )
  13.   (setq        len0 (getreal (strcat "\n当前尺寸的实际值为<"
  14.                               (rtos len)
  15.                               ">,请输入新的尺寸值:"
  16.                       )
  17.              )
  18.   )
  19.   (if (/= txt "")
  20.     (progn
  21.       (setq dxf (subst (cons 1 "") (assoc 1 dxf) dxf))
  22.       (entmod dxf)
  23.     )
  24.   )
  25.   (setq ang (angle p4 p1))
  26.   (cond        ((= ang (* pi 0.5)) (setq ang1 0))
  27.         ((= ang pi) (setq ang1 (* pi 0.5)))
  28.         (T (setq ang1 (angle p3 p4)))
  29.   )
  30.   (setq l (- len0 len))
  31.   (setq os (getvar "osmode"))
  32.   (setvar "osmode" 0)
  33.   (setvar "cmdecho" 0)
  34.   (if (< (distance pt p4) (distance pt p3))
  35.     (progn
  36.       (setq p44 (polar p4 ang1 l))
  37.       (command "stretch" "c" p4 p4 "" p4 p44)
  38.     )
  39.     (progn
  40.       (setq p33 (polar p3 (+ ang1 pi) l))
  41.       (command "stretch" "c" p3 p3 "" p3 p33)
  42.     )
  43.   )
  44.   (setvar "osmode" os)
  45.   (setvar "cmdecho" 1)
  46.   (princ)
  47. )

评分

参与人数 1金钱 +20 收起 理由
gcho + 20 此方法也很好啊!

查看全部评分

发表于 2011-8-7 10:23 | 显示全部楼层
这个思路不错哟
发表于 2011-12-9 23:57 | 显示全部楼层
精品哦。学习了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-2 01:35 , Processed in 0.454004 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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