明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 929|回复: 6

[源码] 一段代码问题求助

[复制链接]
发表于 2019-2-8 17:07:49 | 显示全部楼层 |阅读模式
本帖最后由 cheefeel 于 2019-2-8 17:10 编辑

  1. [code=lisp]
  2. (defun C:DimOriginAlign (/ SS PT1 PT2 ON L1 DIM I DIMENT ENT PT10 PT13 PT14)
  3.   (setvar "cmdecho" 0)
  4.   (command "undo" "be")
  5.   (while (= SS NIL) (setq SS (ssget '((0 . "DIMENSION")))))
  6.   (if (setq PT1 (getpoint "指定标注引点对齐直线的第一点:"))
  7.   (setq PT2 (getpoint PT1 "    指定第二点:"))
  8.   (while (= ON NIL)
  9.     (if (setq ENT (entsel "\n选择引点需对齐的直线"))
  10.     (setq ON (assoc '0 (setq L1 (entget (car ENT))))))
  11.     (if (= ON '(0 . "LINE"))
  12.     (setq PT1 (cdr (assoc '10 L1))
  13.         PT2 (cdr (assoc '11 L1)))
  14.     (setq ON NIL))))
  15.   (setq I 0)
  16.   (while (setq DIM (ssname SS I))
  17.   (setq DIMENT (entget DIM))
  18.   (setq PT10 (trans (cdr (assoc '10 DIMENT)) 0 1)
  19.       PT13 (trans (cdr (assoc '13 DIMENT)) 0 1)
  20.       PT14 (trans (cdr (assoc '14 DIMENT)) 0 1))
  21.   (setq DIMENT
  22.        (entmod
  23.        (subst  (cons 13
  24.               (trans (inters PT1
  25.                      PT2
  26.                      PT13
  27.                      (polar PT13 (angle PT10 PT14) (distance PT10 PT14))
  28.                      NIL)
  29.                  1
  30.                  0))
  31.           (assoc 13 DIMENT)
  32.           DIMENT)))
  33.   (entmod (subst (cons 14 (trans (inters PT1 PT2 PT10 PT14 NIL) 1 0)) (assoc 14 DIMENT) DIMENT))
  34.   (entupd DIM)
  35.   (setq I (1+ I)))
  36.   (command "undo" "e")
  37.   (princ (strcat "\n共修改" (itoa I) "个标注,完毕!"))
  38.   (princ))
  39. (princ "\n加载引点对齐工具成功。命令:DimOriginAlign\n")
[/code]







这是一个将标注的引出点对其于一条直线的工具代码,实际使用当中发现:可以指定两点来成功执行操作。但代码中有选择一条直线的功能,实际操作中按Enter后无法选中一条直线。请问其中的什么代码错了,希望有能力的朋友修正一下。

点评

(= on '(0 . "LINE") → (equal on '(0 . "LINE")  发表于 2019-2-9 09:34
发表于 2019-2-9 09:33:47 | 显示全部楼层
  1. (defun c:tt (/ on)
  2.   (while (not (setq ss (ssget '((0 . "DIMENSION"))))))
  3.   (if (and (setq pt1 (getpoint "指定标注引点对齐直线的第一点<退出选线>: "))
  4.            (setq pt2 (getpoint pt1 "指定第二点: "))
  5.       )
  6.     (setq on t)
  7.     (while (= on nil)
  8.       (if (setq s1 (car (entsel "\n选择引点需对齐的直线: ")))
  9.         (setq on (assoc '0 (setq l1 (entget s1))))
  10.       )
  11.       (if (equal on '(0 . "LINE"))
  12.         (setq pt1 (cdr (assoc '10 l1))
  13.               pt2 (cdr (assoc '11 l1))
  14.         )
  15.         (setq on nil)
  16.       )
  17.     )
  18.   )
  19.   (setq i -1)
  20.   (while (setq dim (ssname ss (setq i (1+ i))))
  21.     (setq ent  (entget dim)
  22.           pt10 (trans (cdr (assoc '10 ent)) 0 1)
  23.           pt13 (trans (cdr (assoc '13 ent)) 0 1)
  24.           pt14 (trans (cdr (assoc '14 ent)) 0 1)
  25.           pt   (polar pt13 (angle pt10 pt14) (distance pt10 pt14))
  26.           pt   (trans (inters pt1 pt2 pt13 pt nil) 1 0)
  27.           ent  (entmod (subst (cons 13 pt) (assoc 13 ent) ent))
  28.           pt   (trans (inters pt1 pt2 pt10 pt14 nil) 1 0)
  29.           ent  (entmod (subst (cons 14 pt) (assoc 14 ent) ent))
  30.     )
  31.     (entupd dim)
  32.   )
  33.   (princ (strcat "\n共修改" (itoa i) "个标注,完毕!"))
  34.   (princ)
  35. )

点评

Kye
呵呵,院长假期还在论坛值班  发表于 2019-2-9 10:21
 楼主| 发表于 2019-2-9 10:41:07 | 显示全部楼层

其实我根本不懂代码,这段代码是我第一次在明经求助得到的,用了起码7年以上,那时候还不是这个号。今天无意中发现还有对齐到一条直线的文字,就来提问一下。这个命令是超级实用的,我遇到的绝大部分设计师通过两种实现这样的目的,炸开并打断最拙劣,还有就是将标注样式设置卫固定长度。都很麻烦且不通用于不同情况。
发表于 2019-3-13 00:28:16 | 显示全部楼层

超实用,点赞,点赞!
发表于 2019-12-11 14:59:46 | 显示全部楼层
楼主的这个程序和我下载这个“对齐线性标注”相似!
  1. (defun C:DAG  (/ SS PT1 PT2 ON L1 DIM I DIMENT ENT PT10 PT13 PT14)
  2.   (setvar "cmdecho" 0)
  3. (setq oorth (getvar "ORTHOMODE"))
  4. (setvar 'ORTHOMODE 1)
  5.   (command "undo" "be")
  6.   (while (= SS NIL) (setq SS (ssget '((0 . "DIMENSION")))))
  7.   (if (setq PT1 (getpoint "指定线形标注对齐的直线第一点:<选择直线>"))
  8.         (setq PT2 (getpoint PT1 "    第二点:"))
  9.         (while (= ON NIL)
  10.           (if (setq ENT (entsel "\n选择标注对齐的直线"))
  11.                 (setq ON (assoc '0 (setq L1 (entget (car ENT))))))
  12.           (if (= ON '(0 . "LINE"))
  13.                 (setq PT1 (cdr (assoc '10 L1))
  14.                           PT2 (cdr (assoc '11 L1)))
  15.                 (setq ON NIL))))
  16.   (setq I 0)
  17.   (while (setq DIM (ssname SS I))
  18.         (setq DIMENT (entget DIM))
  19.         (setq PT10 (trans (cdr (assoc '10 DIMENT)) 0 1)
  20.                   PT13 (trans (cdr (assoc '13 DIMENT)) 0 1)
  21.                   PT14 (trans (cdr (assoc '14 DIMENT)) 0 1))
  22.         (setq DIMENT
  23.                    (entmod
  24.                          (subst        (cons 13
  25.                                                   (trans (inters PT1
  26.                                                                                  PT2
  27.                                                                                  PT13
  28.                                                                                  (polar PT13 (angle PT10 PT14) (distance PT10 PT14))
  29.                                                                                  NIL)
  30.                                                                  1
  31.                                                                  0))
  32.                                         (assoc 13 DIMENT)
  33.                                         DIMENT)))
  34.         (entmod (subst (cons 14 (trans (inters PT1 PT2 PT10 PT14 NIL) 1 0)) (assoc 14 DIMENT) DIMENT))
  35.         (entupd DIM)
  36.         (setq I (1+ I)))
  37.   (command ".line" "" "")
  38.   (command "undo" "e")
  39. (setvar "ORTHOMODE" oorth)
  40.   (princ (strcat "\n程序结束.共给更改了" (itoa I) "个标注."))
  41.   (princ))
  42. (princ "\n命令DAG---对齐线性标注.\n"))
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2025-5-18 12:00 , Processed in 0.205242 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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