文本对齐故障
红色表示lisp的方式,蓝色表示希望文本的方式,黄色表示旋转的基线。我怎样才能解决这个问题?http://picasaweb.google.com.br/lh/photo/w65MxseLptWKSFq_ORaw2g?feat=directlink
代码如下
(defun c:cc (/ ent obj r l c center p1 p2 p3 p4 p5lb obj2 ro rot)
(vl-load-com)
(if (setq ent (entsel "\nSelecione o ARCO: "))
(progn
(setq obj (vlax-ename->vla-object (car ent)))
(setq r (vla-get-radius obj)
l (vla-get-arclength obj)
c (vla-get-center obj)
)
(setq center (vlax-safearray->list
(vlax-variant-value c)))
)
)
(setq p1 (getpoint "\nSelecione ponto de inserção para o texto: "))
(setq lb (entsel "\nSelecione Linha de alinhamento de texto: "))
(setq obj2 (vlax-ename->vla-object (car lb)))
(setq ro (vla-get-angle obj2)
)
(setq rot (/ (* 180 ro) (* 2 pi)))
(setq p2 (polar p1 rot 2.5))
(setq p3 (polar p2 rot 2.5))
(setq p4 (polar p3 rot 2.5))
(setq p5 (polar p4 rot 2.5))
(setq p6 (list (+(car p1)20) (cadr p1)))
(entmake
(list
(cons 0 "TEXT")
(cons 1"CC")
(cons 72 2)
(cons 73 3)
(cons 50 ro)
(cons 40 2.0)
(cons 10 p1)
(cons 11 p1))
)
(entmake
(list
(cons 0 "TEXT")
(cons 1 (strcat "N= " (rtos (car center) 2 3)))
(cons 72 2)
(cons 73 3)
(cons 40 2.0)
(cons 50 ro)
(cons 10 p2)
(cons 11 p2))
)
(entmake
(list
(cons 0 "TEXT")
(cons 1 (strcat "E= " (rtos (cadr center) 2 3)))
(cons 72 2)
(cons 73 3)
(cons 40 2.0)
(cons 50 ro)
(cons 10 p3)
(cons 11 p3))
)
(entmake
(list
(cons 0 "TEXT")
(cons 1 (strcat "R= " (rtos r)))
(cons 72 2)
(cons 73 3)
(cons 40 2.0)
(cons 50 ro)
(cons 10 p4)
(cons 11 p4))
)
(entmake
(list
(cons 0 "TEXT")
(cons 1 (strcat "D= " (rtos l 2 3)))
(cons 72 2)
(cons 73 3)
(cons 40 2.0)
(cons 50 ro)
(cons 10 p5)
(cons 11 p5))
)(princ)
)
我很乐意接受任何帮助。非常感谢!! 轻微测试,仅在行下方拾取文本点
(defun c:cc (/ ang c center ent la lb obj obj2 p1 p2 p3 p4 p5 pp r rot)
(vl-load-com)
(if (setq ent (entsel "\nSelecione o ARCO: "))
(progn
(setq obj (vlax-ename->vla-object (car ent)))
(setq r (vla-get-radius obj)
la (vla-get-arclength obj)
c (vla-get-center obj)
)
(setq center (vlax-safearray->list
(vlax-variant-value c)))
)
)
(setq p1 (getpoint "\nSelecione ponto de insercao para o texto: "))
(setq lb (entsel "\nSelecione Linha de alinhamento de texto: "))
(setq obj2 (vlax-ename->vla-object (car lb)))
(setq pp (vlax-curve-getclosestpointto obj2 p1))
(setq ang (angle p1 pp)
rot (+ ang (/ pi 2))
ang (+ pi ang)
)
(if (and (> rot (* 0.5 pi))
(< rot (* 1.5 pi))
)
(setq rot (+ rot pi))
)
(setq p2 (polar p1 ang 2.5))
(setq p3(polar p2 ang 2.5))
(setq p4 (polar p3 ang 2.5))
(setq p5 (polar p4 ang 2.5))
;;set all text alignment to left:
(entmake
(list
(cons 0 "TEXT")
(cons 1"CC")
(cons 71 0)
(cons 72 0)
(cons 73 0)
(cons 50 rot)
(cons 40 2.0)
(cons 10 p1)
(cons 11 (list 0 0 0))
)
)
(entmake
(list
(cons 0 "TEXT")
(cons 1 (strcat "N= " (rtos (car center) 2 3)))
(cons 71 0)
(cons 72 0)
(cons 73 0)
(cons 40 2.0)
(cons 50 rot)
(cons 10 p2)
(cons 11 (list 0 0 0)))
)
(entmake
(list
(cons 0 "TEXT")
(cons 1 (strcat "E= " (rtos (cadr center) 2 3)))
(cons 71 0)
(cons 72 0)
(cons 73 0)
(cons 40 2.0)
(cons 50 rot)
(cons 10 p3)
(cons 11 (list 0 0 0)))
)
(entmake
(list
(cons 0 "TEXT")
(cons 1 (strcat "R= " (rtos r)))
(cons 71 0)
(cons 72 0)
(cons 73 0)
(cons 40 2.0)
(cons 50 rot)
(cons 10 p4)
(cons 11 (list 0 0 0)))
)
(entmake
(list
(cons 0 "TEXT")
(cons 1 (strcat "D= " (rtos la 2 3)))
(cons 71 0)
(cons 72 0)
(cons 73 0)
(cons 40 2.0)
(cons 50 rot)
(cons 10 p5)
(cons 11 (list 0 0 0)))
)
(princ)
)
HTH公司
~'J'~ 线下工作很好。你能解释一下你是做什么的吗?
我从文本插入点计算角度‘ang’
文本将沿垂直角度向下对齐的线
文本“rot”的旋转角度(弧度)将小于角度“ang”的值(/pi 2)
根据平面上的线路布置,该角度可以是间隔角度
从>90到
这就是全部
~'J'~ 理解。我很高兴,非常感谢你!
我花了半天的时间试图修复它。
非常感谢fixo。
很高兴有帮助
干杯
~'J'~
页:
[1]