cheefeel 发表于 2019-2-8 17:07:49

一段代码问题求助

本帖最后由 cheefeel 于 2019-2-8 17:10 编辑

(defun C:DimOriginAlign (/ SS PT1 PT2 ON L1 DIM I DIMENT ENT PT10 PT13 PT14)
(setvar "cmdecho" 0)
(command "undo" "be")
(while (= SS NIL) (setq SS (ssget '((0 . "DIMENSION")))))
(if (setq PT1 (getpoint "指定标注引点对齐直线的第一点:"))
(setq PT2 (getpoint PT1 "    指定第二点:"))
(while (= ON NIL)
    (if (setq ENT (entsel "\n选择引点需对齐的直线"))
    (setq ON (assoc '0 (setq L1 (entget (car ENT))))))
    (if (= ON '(0 . "LINE"))
    (setq PT1 (cdr (assoc '10 L1))
      PT2 (cdr (assoc '11 L1)))
    (setq ON NIL))))
(setq I 0)
(while (setq DIM (ssname SS I))
(setq DIMENT (entget DIM))
(setq PT10 (trans (cdr (assoc '10 DIMENT)) 0 1)
      PT13 (trans (cdr (assoc '13 DIMENT)) 0 1)
      PT14 (trans (cdr (assoc '14 DIMENT)) 0 1))
(setq DIMENT
       (entmod
       (subst(cons 13
            (trans (inters PT1
                     PT2
                     PT13
                     (polar PT13 (angle PT10 PT14) (distance PT10 PT14))
                     NIL)
               1
               0))
          (assoc 13 DIMENT)
          DIMENT)))
(entmod (subst (cons 14 (trans (inters PT1 PT2 PT10 PT14 NIL) 1 0)) (assoc 14 DIMENT) DIMENT))
(entupd DIM)
(setq I (1+ I)))
(command "undo" "e")
(princ (strcat "\n共修改" (itoa I) "个标注,完毕!"))
(princ))
(princ "\n加载引点对齐工具成功。命令:DimOriginAlign\n")







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

xyp1964 发表于 2019-2-9 09:33:47

(defun c:tt (/ on)
(while (not (setq ss (ssget '((0 . "DIMENSION"))))))
(if (and (setq pt1 (getpoint "指定标注引点对齐直线的第一点<退出选线>: "))
           (setq pt2 (getpoint pt1 "指定第二点: "))
      )
    (setq on t)
    (while (= on nil)
      (if (setq s1 (car (entsel "\n选择引点需对齐的直线: ")))
        (setq on (assoc '0 (setq l1 (entget s1))))
      )
      (if (equal on '(0 . "LINE"))
        (setq pt1 (cdr (assoc '10 l1))
              pt2 (cdr (assoc '11 l1))
        )
        (setq on nil)
      )
    )
)
(setq i -1)
(while (setq dim (ssname ss (setq i (1+ i))))
    (setq ent(entget dim)
          pt10 (trans (cdr (assoc '10 ent)) 0 1)
          pt13 (trans (cdr (assoc '13 ent)) 0 1)
          pt14 (trans (cdr (assoc '14 ent)) 0 1)
          pt   (polar pt13 (angle pt10 pt14) (distance pt10 pt14))
          pt   (trans (inters pt1 pt2 pt13 pt nil) 1 0)
          ent(entmod (subst (cons 13 pt) (assoc 13 ent) ent))
          pt   (trans (inters pt1 pt2 pt10 pt14 nil) 1 0)
          ent(entmod (subst (cons 14 pt) (assoc 14 ent) ent))
    )
    (entupd dim)
)
(princ (strcat "\n共修改" (itoa i) "个标注,完毕!"))
(princ)
)

cheefeel 发表于 2019-2-9 10:41:07

xyp1964 发表于 2019-2-9 09:33


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

alexmai 发表于 2019-3-13 00:28:16

xyp1964 发表于 2019-2-9 09:33


超实用,点赞,点赞!

zmzk 发表于 2019-12-11 14:59:46

楼主的这个程序和我下载这个“对齐线性标注”相似!(defun C:DAG(/ SS PT1 PT2 ON L1 DIM I DIMENT ENT PT10 PT13 PT14)
(setvar "cmdecho" 0)
(setq oorth (getvar "ORTHOMODE"))
(setvar 'ORTHOMODE 1)
(command "undo" "be")
(while (= SS NIL) (setq SS (ssget '((0 . "DIMENSION")))))
(if (setq PT1 (getpoint "指定线形标注对齐的直线第一点:<选择直线>"))
        (setq PT2 (getpoint PT1 "    第二点:"))
        (while (= ON NIL)
          (if (setq ENT (entsel "\n选择标注对齐的直线"))
                (setq ON (assoc '0 (setq L1 (entget (car ENT))))))
          (if (= ON '(0 . "LINE"))
                (setq PT1 (cdr (assoc '10 L1))
                          PT2 (cdr (assoc '11 L1)))
                (setq ON NIL))))
(setq I 0)
(while (setq DIM (ssname SS I))
        (setq DIMENT (entget DIM))
        (setq PT10 (trans (cdr (assoc '10 DIMENT)) 0 1)
                  PT13 (trans (cdr (assoc '13 DIMENT)) 0 1)
                  PT14 (trans (cdr (assoc '14 DIMENT)) 0 1))
        (setq DIMENT
                   (entmod
                       (subst        (cons 13
                                                  (trans (inters PT1
                                                                               PT2
                                                                               PT13
                                                                               (polar PT13 (angle PT10 PT14) (distance PT10 PT14))
                                                                               NIL)
                                                               1
                                                               0))
                                        (assoc 13 DIMENT)
                                        DIMENT)))
        (entmod (subst (cons 14 (trans (inters PT1 PT2 PT10 PT14 NIL) 1 0)) (assoc 14 DIMENT) DIMENT))
        (entupd DIM)
        (setq I (1+ I)))
(command ".line" "" "")
(command "undo" "e")
(setvar "ORTHOMODE" oorth)
(princ (strcat "\n程序结束.共给更改了" (itoa I) "个标注."))
(princ))
(princ "\n命令DAG---对齐线性标注.\n"))
页: [1]
查看完整版本: 一段代码问题求助