明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2937|回复: 10

用lisp能不能实现智能标注,通过鼠标拖拉,改变命令方式?

[复制链接]
发表于 2003-6-25 11:29:00 | 显示全部楼层 |阅读模式
也许大家用过这样的软件,标注尺寸时,如选择了直线两个端点,我们通过鼠标的移动,可以竖直的标注,相当于cad命令中的_dimlinear,也可以倾斜标注,相当于cad命令中的_dimaligned,而且,还应该保持cad原有的风格,有动态的显示效果。另外,应该能判断选择对象是什么,也有可能是圆。总之,一个命令实现智能标注。
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2003-6-26 14:34:00 | 显示全部楼层
一点点智能,

(defun c:dimq( / pt1 pt2 ss sname sinf ent)
  (setq pt1 (getpoint "Get the point:"))
  (setq ss (ssget pt1))
  (if ss
    (progn
      (setq sname (ssname ss 0))
      (setq sinf (entget sname))
      (setq ent (cdr (assoc 0 sinf)))
    )
    (setq ent "Nothing")
  )
  (cond
    ((= (strcase ent 0) "circle") (command "_dimdiameter" (list sname pt1) pause))
    ((= (strcase ent 0) "arc") (command "_dimdiameter" (list sname pt1) pause))
    (t
     (setq pt2 (getpoint pt1 "Etner the second point:"))
     (if (or (equal (car pt1) (car pt2) 0.01) (equal (cadr pt1) (cadr pt2) 0.01))
       (command "_dimlinear" pt1 pt2 pause)
       (command "_dimaligned" pt1 pt2 pause)
     )
    )
  )
)
发表于 2003-6-27 08:05:00 | 显示全部楼层
;;这是一个很久以前的程序,写得不太好,也很少用(因现在有double_click功能)!!
(defun C:AUTODIM (/           HOLDOSMODE             HOLDECHO HOLDBLIP P340
                  P340ENTGET10            A1             AAA1     A               AAA
                  AAL           AAPT            Q%Q             Q%Q1     Q%Q11
                 )
  (setq HOLDECHO (getvar "cmdecho"))
  (setq HOLDBLIP (getvar "blipmode"))
  (setq HOLDOSMODE (getvar "osmode"))
  (setvar "cmdecho" 0)
  (setvar "blipmode" 0)
  (setvar "osmode" 0)
  (while (null AAA1)
    (setq AAA1 (nentsel))
  )
  (setq AAL (length AAA1))
  (cond
    ((/= AAL 2)
     (setq AAL (length (last AAA1)))
     (if (/= AAL 1)
       (progn
         (setq A1 (car AAA1))
         (setq AAPT (cadr AAA1))
         (setq AAA (entget A1))
         (setq Q%Q (cdr (assoc 0 AAA)))
         (setq Q%Q11 (cdr (assoc 0 (entget (car (last AAA1))))))
         (if (= Q%Q11 "DIMENSION")
           (setq Q%Q NIL)
         )
         (setq Q%Q1 (cdr (assoc 0 (entget (car AAA1)))))
         (cond
           ((and (/= Q%Q1 "LINE")
                 (/= Q%Q1 "CIRCLE")
                 (/= Q%Q1 "ARC")
                 (/= Q%Q1 "MLINE")
                 (/= Q%Q1 "VERTEX")
            )
            (setq Q%Q NIL)
           )
         )
       )
       (progn
         (setq A1 (car (last AAA1)))
         (setq AAPT (cdr AAA1))
         (setq AAA (entget A1))
         (setq Q%Q (cdr (assoc 0 AAA)))
       )
     )
    )
    ((= AAL 2)
     (setq A1 (car AAA1))
     (setq AAPT (cadr AAA1))
     (setq AAA (entget A1))
     (setq Q%Q (cdr (assoc 0 AAA)))
    )
  )
  (cond
    ((or (= Q%Q "LINE") (= Q%Q "MLINE"))
     (command "_.DIMLINEAR" "" AAPT)
    )
    ((= Q%Q "CIRCLE") (command "_.DIMDIAMETER" AAPT))
    ((= Q%Q "ARC") (command "_.DIMRADIUS" AAPT))
    ((= Q%Q "DIMENSION") (command "_.DIMTEDIT" A1))
    ((= Q%Q "LEADER")
     (setq P340 (cdr (assoc 340 (entget A1))))
     (setq P340ENTGET10 (cdr (assoc 10 (entget P340))))
     (command "_.move" P340ENTGET10 "")
    )
    ((= Q%Q "MTEXT") (command "_.DDEDIT" AAPT))
    ((= Q%Q "TEXT") (command "_.DDEDIT" AAPT))
    ((= Q%Q "HATCH")
     (initdia 1)
     (command "_.HATCHEDIT" AAPT)
     (initdia 0)
    )
    ((= Q%Q "ATTDEF") (command "_.DDEDIT" AAPT))
    ((= Q%Q "ATTRIB") (command "_.DDATTE" AAPT))
    ((= Q%Q "SPLINE") (command "_.SPLINEDIT" AAPT))
    ;|
    ((= Q%Q "TOLERANCE")
     (if (wcmatch (getvar "acadver") "15*")
       (progn
         (if (not DDMODIFYY)
           (load "ddmodifyy")
         )
         (DDMODIFYY A1)
       )
       (progn
         (if (not DDMODIFY)
           (load "ddmodify")
         )
         (DDMODIFY A1)
       )
     )
    )|;
    ((or (= Q%Q "VERTEX")
         (= Q%Q "LWPOLYLINE")
         (= Q%Q "OLYLINE")
     )
     (setq AA (entget (car AAA1)))
     (setq AAPT (cadr AAA1))
     (setq AAA (cdr (assoc 42 AA)))
     (if (= AAA 0)
       (command "_.DIMLINEAR" "" AAPT)
       (command "_.DIMRADIUS" AAPT)
     )
    )
    ((= Q%Q "INSERT")
     (setq AA (entget (car AAA1)))
     (setq AAPT (cadr AAA1))
     (setq Q%Q (cdr (assoc 0 AA)))
     (cond
       ((or (= Q%Q "LINE") (= Q%Q "MLINE"))
        (command "_.DIMLINEAR" "" AAPT)
       )
       ((= Q%Q "CIRCLE") (command "_.DIMDIAMETER" AAPT))
       ((= Q%Q "ARC") (command "_.DIMRADIUS" AAPT))
       ((or (= Q%Q "VERTEX")
            (= Q%Q "LWPOLYLINE")
            (= Q%Q "OLYLINE")
        )
        (setq AA (entget (car AAA1)))
        (setq AAPT (cadr AAA1))
        (setq AAA (cdr (assoc 42 AA)))
        (if (= AAA 0)
          (command "_.DIMLINEAR" "" AAPT)
          (command "_.DIMRADIUS" AAPT)
        )
       )
       (t
        (prompt "\n不能编辑及标注区块中之非线类")
       )
     )
    )
    (t
     (prompt "\n不能编辑及标注区块中之非线类")
    )
  )
  (setvar "blipmode" HOLDBLIP)
  (setvar "osmode" HOLDBLIP)
  (setvar "cmdecho" HOLDECHO)
  (princ)
)
发表于 2012-7-5 23:07:28 | 显示全部楼层
写得很好,希望有志者继续努力!
发表于 2012-7-12 13:38:01 | 显示全部楼层
路过,做个标志,希望下次好找
发表于 2013-4-5 11:57:15 | 显示全部楼层
路过,做个标志,
发表于 2013-4-6 22:25:21 | 显示全部楼层
做个标记,日后能用的上,谢谢
发表于 2013-4-13 17:57:37 来自手机 | 显示全部楼层
用时再取,正我需要
发表于 2013-4-13 18:04:39 | 显示全部楼层
很好很好先踩个脚印
发表于 2021-12-1 15:31:27 | 显示全部楼层
有没有GIF发个出来更明确
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-9-27 17:24 , Processed in 0.188595 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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