cutecutemissu 发表于 2022-7-5 19:58:50

偏移多个文本

你好:
 
是否有可以将多个文本偏移指定距离的命令?
 
或者一些lsp例程可以完成这项工作?即使是一个可以将单个文本向任意一侧偏移指定距离的例程也会很有帮助。我对lsp程序比较陌生。我们将非常感谢您的帮助。

Tharwat 发表于 2022-7-5 20:08:47

欢迎来到论坛
 
您是否在系统变量(mirrtext)设置为0的情况下尝试了命令:mirror?

cutecutemissu 发表于 2022-7-5 20:12:58

 
 
谢谢你的回复。
不幸的是,对于我需要完成的任务,mirror命令没有多大帮助。因为需要移动的文本太多,但并非所有文本都需要移动一定距离。有些文本需要移动到现有文本的一侧一定距离,有些文本需要移动到现有文本的另一侧。
我确实在2000年找到了蒂姆·B·韦伯的lsp。lsp代码可以偏移文本。该规范的局限性如下:
·它只能将文本偏移代码中预先指定的距离意味着您不能指定偏移距离
·一次只能偏移一个文本。
·它只能将文本偏移到现有文本的左侧–意味着您不能将文本偏移到另一侧。
这种lsp的优点是它可以偏移文本,因此图层和颜色保持不变。这要归功于lsp的创始人。
我试图修改lsp以克服局限性,但收效甚微。有人能帮忙吗?
请参阅下面的原始lsp。
 
;Tip1634:   OFFTX.LSP   Offset Text            (c)2000, Tim B. Webb

(defun C:OFFTX (/ FTR HT STYL IF72 IF73 COLOR QUACKAS8 AS62CLY CLRS TIMS OLDERR RT ANG ANG1
                TXVAL ASS10 ASS11 NXT PRMPT CURTX)
   (setvar "cmdecho" 0)
   (setq OLDERR *ERROR*)
   (setq *ERROR* TRAPERR)
   (setq TIMS t)
   (setq CLRS (getvar "cecolor"))
   (setq CLY (getvar "clayer"))
   (initget "O o N n")
   (setq PRMPT (getkword "\n<Offset>/New text: "))
   (if (or (= PRMPT "N") (= PRMPT "n"))
      (progn (while (= CURTX NIL) (setq CURTX (car (entsel "\nText to offset: "))))
             (setq TXSTR (prompt "\nText: "))
             (setq QUACK (entget CURTX))
             (setq AS8 (cdr (assoc 8 QUACK)))
             (setvar "clayer" AS8)
             (if (= (setq AS62 (cdr (assoc 62 QUACK))) NIL)
                (setq COLOR "bylayer")
                (setq COLOR AS62)
             ) ;_ end of if
             (setq IF72 (cdr (assoc 72 QUACK)))
             (setq IF73 (cdr (assoc 73 QUACK)))
             (cond ((and (= IF72 0) (= IF73 0)) (setq TYPEX "L"))
                   ((and (= IF72 1) (= IF73 0)) (setq TYPEX "C"))
                   ((and (= IF72 4) (= IF73 2)) (setq TYPEX "M"))
                   ((and (= IF72 4) (= IF73 0)) (setq TYPEX "M"))
                   ((and (= IF72 2) (= IF73 0)) (setq TYPEX "R"))
                   ((and (= IF72 0) (= IF73 3)) (setq TYPEX "TL"))
                   ((and (= IF72 1) (= IF73 3)) (setq TYPEX "TC"))
                   ((and (= IF72 2) (= IF73 3)) (setq TYPEX "TR"))
                   ((and (= IF72 0) (= IF73 2)) (setq TYPEX "ML"))
                   ((and (= IF72 1) (= IF73 2)) (setq TYPEX "MC"))
                   ((and (= IF72 2) (= IF73 2)) (setq TYPEX "MR"))
                   ((and (= IF72 0) (= IF73 1)) (setq TYPEX "BL"))
                   ((and (= IF72 1) (= IF73 1)) (setq TYPEX "BC"))
                   ((and (= IF72 2) (= IF73 1)) (setq TYPEX "BR"))
             ) ;_ end of cond
             (setq HT (cdr (assoc 40 QUACK)))
             (setq STYL (cdr (assoc 7 QUACK)))
             (setvar "textstyle" STYL)
             (setq FTR (* HT 1.6667))
             (setq RT (cdr (assoc 50 QUACK)))
             (setq ANG (- RT (/ pi 2)))
             (setq ANG1 (/ (* RT 180) pi))
             (setq TXVAL (cdr (assoc 1 QUACK)))
             (if (= TYPEX "L")
                (progn (setq ASS10 (cdr (assoc 10 QUACK)))
                     (setq NXT (polar ASS10 ANG FTR))
                     (command "cecolor" COLOR)
                     (command "Dtext" NXT HT ANG1)
                ) ;_ end of progn
                (progn (setq ASS11 (cdr (assoc 11 QUACK)))
                     (setq NXT (polar ASS11 ANG FTR))
                     (command "cecolor" COLOR)
                     (command "Dtext" "j" TYPEX NXT HT ANG1)
                ) ;_ end of progn
             ) ;_ end of if
      ) ;_ end of progn
   ) ;_ end of if
   (if (or (= PRMPT "O") (= PRMPT "o") (= PRMPT NIL))
      (progn
         (while TIMS
            (setq TIMS (grread t 2 1))
            (if (= (cadr TIMS) 13)
               (setq TIMS NIL)
            ) ;_ end of if
            (if (= CURTX NIL)
               (progn (while (= CURTX NIL) (setq CURTX (car (entsel "\nText to offset: "))))
               ) ;_ end of progn
               (setq CURTX (car (entsel "\nText to offset: ")))
            ) ;_ end of if
            (if (= CURTX NIL)
               (setq TIMS NIL)
               (progn (setq QUACK (entget CURTX))
                      (setq AS8 (cdr (assoc 8 QUACK)))
                      (setvar "clayer" AS8)
                      (if (= (setq AS62 (cdr (assoc 62 QUACK))) NIL)
                         (setq COLOR "bylayer")
                         (setq COLOR AS62)
                      ) ;_ end of if
                      (setq IF72 (cdr (assoc 72 QUACK)))
                      (setq IF73 (cdr (assoc 73 QUACK)))
                      (cond ((and (= IF72 0) (= IF73 0)) (setq TYPEX "L"))
                            ((and (= IF72 1) (= IF73 0)) (setq TYPEX "C"))
                            ((and (= IF72 4) (= IF73 2)) (setq TYPEX "M"))
                            ((and (= IF72 4) (= IF73 0)) (setq TYPEX "M"))
                            ((and (= IF72 2) (= IF73 0)) (setq TYPEX "R"))
                            ((and (= IF72 0) (= IF73 3)) (setq TYPEX "TL"))
                            ((and (= IF72 1) (= IF73 3)) (setq TYPEX "TC"))
                            ((and (= IF72 2) (= IF73 3)) (setq TYPEX "TR"))
                            ((and (= IF72 0) (= IF73 2)) (setq TYPEX "ML"))
                            ((and (= IF72 1) (= IF73 2)) (setq TYPEX "MC"))
                            ((and (= IF72 2) (= IF73 2)) (setq TYPEX "MR"))
                            ((and (= IF72 0) (= IF73 1)) (setq TYPEX "BL"))
                            ((and (= IF72 1) (= IF73 1)) (setq TYPEX "BC"))
                            ((and (= IF72 2) (= IF73 1)) (setq TYPEX "BR"))
                      ) ;_ end of cond
                      (setq HT (cdr (assoc 40 QUACK)))
                      (setq STYL (cdr (assoc 7 QUACK)))
                      (setvar "textstyle" STYL)
                      (setq FTR (* HT 1.6667))
                      (setq RT (cdr (assoc 50 QUACK)))
                      (setq ANG (- RT (/ pi 2)))
                      (setq ANG1 (/ (* RT 180) pi))
                      (setq TXVAL (cdr (assoc 1 QUACK)))
                      (if (= TYPEX "L")
                         (progn (setq ASS10 (cdr (assoc 10 QUACK)))
                              (setq NXT (polar ASS10 ANG FTR))
                              (command "cecolor" COLOR)
                              (command "text" NXT HT ANG1 TXVAL)
                         ) ;_ end of progn
                         (progn (setq ASS11 (cdr (assoc 11 QUACK)))
                              (setq NXT (polar ASS11 ANG FTR))
                              (command "cecolor" COLOR)
                              (command "text" "j" TYPEX NXT HT ANG1 TXVAL)
                         ) ;_ end of progn
                      ) ;_ end of if
               ) ;_ end of progn
            ) ;_ end of if
         ) ;_ end of while
      ) ;_ end of progn
   ) ;_ end of if
   (setvar "clayer" CLY)
   (setvar "cecolor" CLRS)
   (princ "\nDone.")
   (setq *ERROR* OLDERR)
   (princ)
) ;_ end of defun

(defun TRAPERR (MSG)
   (if *ERROR*
      (princ (strcat "\nTrapped Error : " MSG))
   ) ;_ end of if
   (setq *ERROR* OLDERR)
   (princ)
) ;_ end of defun


Tharwat 发表于 2022-7-5 20:17:47

请阅读此代码发布。
 
你想把一些文字移动到特定的距离吗?和其他人到另一个特定的距离?
 
如果是,请提及这两个距离,以便我将这些距离包括在例程中。
 
谢谢

cutecutemissu 发表于 2022-7-5 20:20:35

 
 
大多数时候,我需要偏移文本的距离是不同的。
是否可以编写例程,以便用户可以选择输入偏移距离?
我试图修改上面的代码来做到这一点,但这不是一件容易的事。

Tharwat 发表于 2022-7-5 20:26:21

希望这就是你的意思。
 

(defun c:Test (/ ss rep dis i ssNme p)
(vl-load-com)
; Tharwat 17. 06. 2011
(if
   (and (setq ss (ssget "_:L" '((0 . "TEXT,MTEXT"))))
      (progn (initget "Left Right")
               (setq rep (getkword "\n Specify the Direction :"))
      )
      (setq dis (getdist "\n Specify the Distance :"))
   )
    (if (eq rep "Left")
      (repeat
      (setq i (sslength ss))
         (setq ssNme (ssname ss (setq i (1- i))))
         (vla-move
         (vlax-ename->vla-object ssNme)
         (vlax-3d-point (setq p (cdr (assoc 10 (entget ssNme)))))
         (vlax-3d-point (list (- (car p) dis) (cadr p)))
         )
      )
      (repeat
      (setq i (sslength ss))
         (setq ssNme (ssname ss (setq i (1- i))))
         (vla-move
         (vlax-ename->vla-object ssNme)
         (vlax-3d-point (setq p (cdr (assoc 10 (entget ssNme)))))
         (vlax-3d-point (list (+ (car p) dis) (cadr p)))
         )
      )
    )
    (princ)
)
(princ)
)


 
塔瓦特

Tharwat 发表于 2022-7-5 20:37:20

在这里,它适用于所有方向。
 
(defun c:Test (/ ss rep dis i ssNme p)
(vl-load-com)
; Tharwat 17. 06. 2011
(if
   (and (setq ss (ssget "_:L" '((0 . "TEXT,MTEXT"))))
      (progn (initget "Left Right Up Down")
               (setq rep
                      (getkword "\n Specify the Direction :"
                      )
               )
      )
      (setq dis (getdist "\n Specify the Distance :"))
   )
    (cond ((eq rep "Left")
         (repeat
             (setq i (sslength ss))
            (setq ssNme (ssname ss (setq i (1- i))))
            (vla-move
                (vlax-ename->vla-object ssNme)
                (vlax-3d-point (setq p (cdr (assoc 10 (entget ssNme)))))
                (vlax-3d-point (list (- (car p) dis) (cadr p)))
            )
         )
          )
          ((eq rep "Right")
         (repeat
             (setq i (sslength ss))
            (setq ssNme (ssname ss (setq i (1- i))))
            (vla-move
                (vlax-ename->vla-object ssNme)
                (vlax-3d-point (setq p (cdr (assoc 10 (entget ssNme)))))
                (vlax-3d-point (list (+ (car p) dis) (cadr p)))
            )
         )
          )
          ((eq rep "Up")
         (repeat
             (setq i (sslength ss))
            (setq ssNme (ssname ss (setq i (1- i))))
            (vla-move
                (vlax-ename->vla-object ssNme)
                (vlax-3d-point (setq p (cdr (assoc 10 (entget ssNme)))))
                (vlax-3d-point
                  (list (car p) (+ (cadr p) dis))
                )
            )
         )
          )
          ((eq rep "Down")
         (repeat
             (setq i (sslength ss))
            (setq ssNme (ssname ss (setq i (1- i))))
            (vla-move
                (vlax-ename->vla-object ssNme)
                (vlax-3d-point (setq p (cdr (assoc 10 (entget ssNme)))))
                (vlax-3d-point
                  (list (car p) (- (cadr p) dis))
                )
            )
         )
          )
    )
    (princ)
)
(princ)
)

Tharwat

cutecutemissu 发表于 2022-7-5 20:41:58

多谢塔瓦!!

Tharwat 发表于 2022-7-5 20:47:36

 
不客气

CHLUCFENG 发表于 2022-7-5 20:51:08

干得好,塔尔瓦特。
 
自从你第一次帮助我以来,你的代码已经增强了。谢谢你,当时和现在。很高兴看到你继续前进。
 
页: [1] 2
查看完整版本: 偏移多个文本