文本和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")
)
)
)
你好
旋转角度应该是多少?
通过调整大小,您的意思是将其高度增加“n”个单位或缩放它? 旋转角度必须为90、180、270和360,相对于高度而言,最好增加单位 好的,高度增量设置为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")
)
)
) 谢谢,Grr正是我需要的
@Grrr:
errno变量的使用非常特殊。当由CAD程序设置时,errno变量具有非常特定的含义。我并不是说你所做的是错的,但使用你自己的(布尔)变量会更有意义。
@罗伊,这一切都是从我学习“伪循环”时开始的,主要是从李的代码开始的。
我发现它有这样的潜力,而不是用setq函数定位一个新变量,总的来说,我试图减少setq的数量。
谢谢你发布这篇文章,它会让你了解更多。
页:
[1]