amcdicsac 发表于 2022-7-5 16:54:40

文本和Grread

你好
 
我有一段代码,使用grread函数插入一个文本,我想在其中添加旋转和调整大小的选项,但我不知道怎么做,如果能得到帮助,我将不胜感激。
 
谢谢
 

(defun c:xaa (/ potencia prefijo pt)
(setvar "cmdecho" 0)
(setq potencia (strcase (getstring T "\nIngresa potencia monofásica: ")))
(setq prefijo (*AX_mtext* (strcat potencia "\\P" "1Ø/220V")))
(while
(eq (car (setq pt (grread t 15 0))) 5)
(redraw)
(entmod (subst (cons 10 (cadr pt)) (assoc 10 (entget prefijo)) (entget prefijo))))
(setvar "cmdecho" 1)
(princ))

(defun *AX_mtext* (s)
(entmakex
   (list (cons 0   "MTEXT")         
         (cons 100 "AcDbEntity")         
         (cons 100 "AcDbMText")   
         (list 10 0. 0. 0.)
         (list 11 0. 0. 0.)
         (cons 71 1)
         (cons 40 0.2)
         (cons1 s)
       (cons7 "0-DEU-ROMANS")

   )
)
)

Grrr 发表于 2022-7-5 17:14:06

你好
旋转角度应该是多少?
通过调整大小,您的意思是将其高度增加“n”个单位或缩放它?

amcdicsac 发表于 2022-7-5 17:17:18

旋转角度必须为90、180、270和360,相对于高度而言,最好增加单位

Grrr 发表于 2022-7-5 17:26:46

好的,高度增量设置为0.1个单位:

(defun C:test ( / potencia prefijo msg enx n sizeInc cmd grr )
(if
        (and
                (setq potencia (strcase (getstring T "\nIngresa potencia monofásica: ")))
                (setq prefijo (*AX_mtext* (strcat potencia "\\P" "1Ø/220V")))
                (setq msg "\nPress [+/-] to increase/decrease the size, to rotate <exit>: ")
                (setq enx (entget prefijo))
                (setq n (cdr (assoc 40 enx)))
                (setq sizeInc 0.1)
        ); and
        (progn
                (setq cmd (getvar 'cmdecho)) (setvar 'cmdecho 0)
                (and msg (princ msg)) (setvar 'errno 0)
                (while (/= 52 (getvar 'errno))
                        (setq grr (grread T))
                        (cond
                                ((= (car grr) 2)
                                        (and msg (princ msg))
                                        (and (= (chr (cadr grr)) "\r") (setvar 'errno 52))
                                        (cond
                                                ((= (chr (cadr grr)) "+")
                                                        (setq n (+ n sizeInc))
                                                        (entmod (setq enx (subst (cons 40 n) (assoc 40 enx) enx)))
                                                )
                                                ((= (chr (cadr grr)) "-")
                                                        (setq n (- n sizeInc))
                                                        (or (not (minusp n)) (setq n 0.1))
                                                        (entmod (setq enx (subst (cons 40 n) (assoc 40 enx) enx)))
                                                )
                                                ((= (cadr grr) (ascii (strcase "\t" T)))
                                                        (entmod (setq enx (subst (cons 50 (+ (cdr (assoc 50 enx)) (/ PI 2.))) (assoc 50 enx) enx)))
                                                )
                                        ); cond
                                )
                                ( (= (car grr) 25) (setvar 'errno 52) )
                                ( (= (car grr) 5) (and msg (princ msg)) (entmod (subst (cons 10 (cadr grr)) (assoc 10 (entget prefijo)) (entget prefijo))) )
                                ( (= (car grr) 3) (setvar 'errno 52) )
                        ); cond                       
                ); while
                (and cmd (setvar 'cmdecho cmd))
        ); progn
); if
(princ)
); defun C:test

(defun *AX_mtext* (s)
(entmakex
        (list
                (cons 0 "MTEXT")         
                (cons 100 "AcDbEntity")         
                (cons 100 "AcDbMText")   
                (list 10 0. 0. 0.)
                (list 11 0. 0. 0.)
                (cons 71 1)
                (cons 40 0.2)
                (cons 1 s)
                (cons 7 "0-DEU-ROMANS")
        )
)
)

amcdicsac 发表于 2022-7-5 17:40:24

谢谢,Grr正是我需要的

Roy_043 发表于 2022-7-5 17:48:46

@Grrr:
errno变量的使用非常特殊。当由CAD程序设置时,errno变量具有非常特定的含义。我并不是说你所做的是错的,但使用你自己的(布尔)变量会更有意义。

Grrr 发表于 2022-7-5 18:03:01

 
@罗伊,这一切都是从我学习“伪循环”时开始的,主要是从李的代码开始的。
我发现它有这样的潜力,而不是用setq函数定位一个新变量,总的来说,我试图减少setq的数量。
谢谢你发布这篇文章,它会让你了解更多。
页: [1]
查看完整版本: 文本和Grread