明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2002|回复: 8

[讨论] 快速关闭尺寸界线

[复制链接]
发表于 2021-5-28 12:11:52 | 显示全部楼层 |阅读模式
在明经里看到一个大师的作品,想知道能否实现如下图我点选1这边就自动关1这边,点先2那一边则自动2那边。

  • (defun chdim (fs en / oldds cs)
  •   (command"undo" "be")
  •   (if (= "1" fs)
  •     (setq cs "2")
  •     (setq cs "1")
  •   )
  •   (setq oldds (getvar "dimstyle"))
  •   (command "dimstyle" "restore" "" en)
  •   (setq oldv (getvar (strcat "dimblk" cs)))
  •   (if (= "" oldv)
  •     (setq oldv (getvar "dimblk"))
  •   )
  •   (if (= "" oldv)
  •     (setq oldv ".")
  •   )
  •   (setvar "dimsah" 1)
  •   (setvar "dimblk" ".")
  •   (setvar (strcat "dimblk" fs) ".")
  •   (setvar (strcat "dimblk" cs) oldv)
  •   (setvar (strcat "dimse" fs) 1)
  •   ;;;  (setvar "dimblk" oldv)
  •   (command "dimstyle" "a" en "")
  •   (command "dimstyle" "r" oldds)
  •   (command"undo" "e")
  • )
  • (defun c:cdt (/ ss fs)
  •   (initget "1 2")
  •   (setq fs (getkword "\n请输入要改变的箭头[左<1>或右<2>]:"))
  •   (setq ss (ssget '((0 . "dimension"))))
  •   (if ss
  •     (progn
  •       (setq n -1)
  •       (repeat (sslength ss)
  •         (setq en (ssname ss (setq n (1+ n))))
  •         (chdim fs en)
  •       )
  •     )
  •   )
  •   (princ)
  • )

本帖子中包含更多资源

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

x
发表于 2021-5-29 20:43:00 | 显示全部楼层
判断出距离拾取点最近点位,然后关闭相应的界限和尺寸线即可。
 楼主| 发表于 2021-5-30 10:41:05 | 显示全部楼层
LPACMQ 发表于 2021-5-29 20:43
判断出距离拾取点最近点位,然后关闭相应的界限和尺寸线即可。

理论大家都懂
发表于 2021-5-31 15:13:25 | 显示全部楼层
(defun chdim (fs en / oldds cs)
  
  (if (= "1" fs)
    (setq cs "2")
    (setq cs "1")
  )
  (setq oldds (getvar "dimstyle"))
  (command "dimstyle" "restore" "" en)
  (setq oldv (getvar (strcat "dimblk" cs)))
  (if (= "" oldv)
    (setq oldv (getvar "dimblk"))
  )
  (if (= "" oldv)
    (setq oldv ".")
  )
  (setvar "dimsah" 1)
  (setvar "dimblk" ".")
  (setvar (strcat "dimblk" fs) ".")
  (setvar (strcat "dimblk" cs) oldv)
  (setvar (strcat "dimse" fs) 1)
  ;;;  (setvar "dimblk" oldv)
  (command "dimstyle" "a" en "")
  (command "dimstyle" "r" oldds)
  
)
(defun c:tt5 (/ en fs n ptx ss)
(command"undo" "be")
        (setq ss (ssget '((0 . "dimension"))))
        (setq ptx (getpoint "\n选择隐藏边:"))
       
  ;(setq fs (getkword "\n请输入要改变的箭头[左<1>或右<2>]:"))
  
  (if ss
    (progn
      (setq n -1)
      (repeat (sslength ss)
        (setq en (ssname ss (setq n (1+ n))))
                                (if (< (distance ptx (cdr (assoc 13 (entget en)))) (distance ptx (cdr (assoc 14 (entget en))))) (setq fs "1") (setq fs "2"))
        (chdim fs en)
      )
    )
  )
        (command"undo" "e")
  (princ)
)
发表于 2021-5-31 16:46:34 | 显示全部楼层
箭头不是也要顺带隐藏的吗
 楼主| 发表于 2021-5-31 20:12:58 | 显示全部楼层
start4444 发表于 2021-5-31 15:13
(defun chdim (fs en / oldds cs)
  
  (if (= "1" fs)

谢谢,有没有可能ptx可以根据ssget的时候的选择点来获得呢?我的三脚猫功夫没整成功

  (setq ss (ssget '((0 . "dimension"))))
  (setq t_ent (car ss))
  (setq t_sel_point (cadr ss))
  (setq tx_ent (vlax-ename->vla-object t_ent))
   (setq        ptx
         (vlax-curve-getclosestpointto
           tx_ent
           (trans t_sel_point 1 0)
         )
  )
  
 楼主| 发表于 2021-5-31 20:13:28 | 显示全部楼层
sunny_8848 发表于 2021-5-31 16:46
箭头不是也要顺带隐藏的吗

不用隐藏箭头的
发表于 2021-6-1 10:44:47 | 显示全部楼层
dennylaw163 发表于 2021-5-31 20:12
谢谢,有没有可能ptx可以根据ssget的时候的选择点来获得呢?我的三脚猫功夫没整成功

  (setq s ...

那就是单选了
(defun chdim (fs en / oldds cs)
  
  (if (= "1" fs)
    (setq cs "2")
    (setq cs "1")
  )
  (setq oldds (getvar "dimstyle"))
  (command "dimstyle" "restore" "" en)
  (setq oldv (getvar (strcat "dimblk" cs)))
  (if (= "" oldv)
    (setq oldv (getvar "dimblk"))
  )
  (if (= "" oldv)
    (setq oldv ".")
  )
  (setvar "dimsah" 1)
  (setvar "dimblk" ".")
  (setvar (strcat "dimblk" fs) ".")
  (setvar (strcat "dimblk" cs) oldv)
  (setvar (strcat "dimse" fs) 1)
  ;;;  (setvar "dimblk" oldv)
  (command "dimstyle" "a" en "")
  (command "dimstyle" "r" oldds)
  
)

(defun c:tt5 (/ en fs n ptx ss enl)
(command"undo" "be")         
        (setq en (car (setq enl (entsel "\n选择对象:"))) ptx (cadr enl))
                                (if (< (distance ptx (cdr (assoc 13 (entget en)))) (distance ptx (cdr (assoc 14 (entget en))))) (setq fs "1") (setq fs "2"))
        (chdim fs en)      
        (command"undo" "e")
  (princ)
)

评分

参与人数 1明经币 +1 金钱 +20 收起 理由
dennylaw163 + 1 + 20 很给力!

查看全部评分

 楼主| 发表于 2021-6-1 11:22:17 | 显示全部楼层
start4444 发表于 2021-6-1 10:44
那就是单选了
(defun chdim (fs en / oldds cs)
  

太给力了,谢谢!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-10-2 06:06 , Processed in 0.153825 second(s), 31 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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