lownote1980 发表于 2022-7-5 15:42:22

Lisp用于将文本旋转为当前格式

大家好,
我想知道是否有人对我在3D绘制建筑立面时遇到的问题有什么好主意。
 
我使用三维多段线在现场测量立面。回到办公室后,我得到了一条三维多段线的输出,在每个测量点上都有一个点和节点。该点与三维*俯视*视图对齐。然后旋转当前视图,使其与所需的建筑立面对齐。
 
我的问题有两个:
1) 是否有方法旋转点以查看当前视图中的点样式?
2) 当我的点信息在3D中绘制为点、点编号和高程时,是否有lisp例程围绕点的中心旋转点编号文本和标高文本,以在当前视图中显示为“正确”?
 
我不期待奇迹或编写LISP例程,但如果能提供一些指针,我会非常感激。
 
低音符

gile 发表于 2022-7-5 15:52:07

你好
 
(trans’(0.0.1.)2 0 T)返回当前视图平面的法向量。
您可以使用该向量修改210 DXF代码(或“正常”vla属性),并使用trans函数转换文本插入点。
 
这里有一个小示例,用于将选定的点和文本与当前视图平面对齐(您可能需要根据文本对齐方式处理11个DXF代码)
 
(defun c:RotateToView (/ n ss ent elst)
(if (setq norm (trans '(0. 0. 1.) 2 0 T)
       n   -1
       ss   (ssget '((0 . "POINT,TEXT")))
   )
   (while (setq ent (ssname ss (setq n (1+ n))))
   (setq elst (entget ent)
       ins   (assoc 10 elst)
   )
   (if (= (cdr (assoc 0 elst)) "TEXT")
   (entmod    (subst (cons 10 (trans (cdr ins) ent norm))
            ins
            (subst (cons 210 norm) (assoc 210 elst) elst)
       )
   )
   (entmod (subst (cons 210 norm) (assoc 210 elst) elst))
   )
   )
)
(princ)
)

lownote1980 发表于 2022-7-5 15:56:51

嗨,吉尔,
谢谢你的Lisp程序。它工作得很好,可以让我得到我需要的东西。
 
LISP的文本元素是如何工作的?我可以旋转点以查看,但水平文字(位于点旁边)会飞离屏幕。目前,我正在选择所有要旋转的元素(点和文本),当我点击输入时,点旋转,文本显示。我犯了一个简单的错误吗?
 
再次感谢你的Lisp程序!
 
低音符

lownote1980 发表于 2022-7-5 16:00:58

在进一步修改之后,我明白了文本插入点的含义。文本自身与当前视图正确对齐,但使用奇数基点从该点“重新插入”文本。
 
如何重新指定文字基点以围绕该点旋转?
 
亲切的问候
低音符

Lee Mac 发表于 2022-7-5 16:05:31

尝试以下轻微修改:
 

(defun c:RotateToView ( / n ss ent elst )
;; Gile, mod by Lee Mac

(if (setq norm (trans '(0. 0. 1.) 2 0 T) n -1
             ss (ssget '((0 . "POINT,TEXT"))))
   
   (while (setq ent (ssname ss (setq n (1+ n))))
   (setq elst (entget ent))

   (setq ins
       (assoc
         (if (eq '(0 0) (mapcar 'dxf '(72 73) (list elst elst)))
         10 11
         )
         elst
       )
   )
   
   (if (eq (dxf 0 elst) "TEXT")
       (entmod
         (subst
         (cons (car ins) (trans (cdr ins) ent norm))
         ins
         (subst (cons 210 norm) (assoc 210 elst) elst)
         )
       )      
       (entmod (subst (cons 210 norm) (assoc 210 elst) elst))
   )
   )
)
(princ)
)

(defun dxf ( code lst ) (cdr (assoc code lst)))

lownote1980 发表于 2022-7-5 16:14:38

谢谢李的修改。我正在欺骗代码的工作方式。有些部分可能是我正在阅读的LISP书中的几章。我将在周一发布一条关于成功的回复。
 
再次感谢
低音符

Lee Mac 发表于 2022-7-5 16:17:17

“trans”和坐标系有时需要一点时间才能理解和掌握,但你能很好地掌握Gile——我也从他那里学到了很多。

lownote1980 发表于 2022-7-5 16:24:57

嗨LeeMac
我今天试了Lisp程序,取得了很大的成功。非常感谢-这将使提升变得非常容易!
 
当做
低音符

Lee Mac 发表于 2022-7-5 16:30:56

 
你很受欢迎Lownote-虽然Gile应该承担责任

KevinMcDonagh 发表于 2022-7-5 16:36:25

谢谢很有魅力
页: [1] 2
查看完整版本: Lisp用于将文本旋转为当前格式