BlackAlnet 发表于 2022-7-6 12:12:58

文本对齐故障

红色表示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)
)

 
我很乐意接受任何帮助。非常感谢!!

fixo 发表于 2022-7-6 12:25:10

轻微测试,仅在行下方拾取文本点

(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'~

BlackAlnet 发表于 2022-7-6 12:45:24

线下工作很好。你能解释一下你是做什么的吗?

fixo 发表于 2022-7-6 12:49:50

 
我从文本插入点计算角度‘ang’
文本将沿垂直角度向下对齐的线
文本“rot”的旋转角度(弧度)将小于角度“ang”的值(/pi 2)
根据平面上的线路布置,该角度可以是间隔角度
从>90到
这就是全部
 
~'J'~

BlackAlnet 发表于 2022-7-6 13:04:13

理解。我很高兴,非常感谢你!
我花了半天的时间试图修复它。
 
非常感谢fixo。

fixo 发表于 2022-7-6 13:15:36

 
很高兴有帮助
干杯
 
~'J'~
页: [1]
查看完整版本: 文本对齐故障