eldon 发表于 2022-7-5 20:55:02

O、 iain,这是我的lisp例程,它用文字中的z值在直线和交点的端点的x,y处绘制点。
 

(defun c:grlev ( / p1 tx e zd os); puts 3D point at level shown by text
(setvar "OSMODE" 33); sets osnap to endpoint & intersection
(setq p1 (getpoint "\n Pick plan point..... "))
(setq os (getvar "OSMODE"))
(setvar "OSMODE" 64)
(setq tx (entsel "\n Pick Level text...... "))
(setvar "OSMODE" 0)
(setq e (entget (car tx)))
(setq zd (atof (cdr (assoc 1 e))))
(setq p1 (list (car p1) (cadr p1) zd))
(command "point" p1)
(setvar "OSMODE" os)
)

 
它可以工作,但不会循环,但通过右键单击鼠标,它会重复该命令,您可以非常快速地创建三维点。然后,您必须使用这些点绘制三维多段线。
 
如果我想更改osnap,我会编辑lisp文件——这是我的lisp级别。

iain9876 发表于 2022-7-5 20:58:02

上载图形?。。。我想我可以,我所要求的只是把二维多段线画成三维。。。通过在命令提示下指定顶点高程(甚至通过选择高程文字),可以通过捕捉到一个点来选择x和y坐标。。。。。
 
还有谁不明白??

iain9876 发表于 2022-7-5 20:58:49

非常感谢艾尔顿,
 
试用该例程,它在正确的高程处绘制节点,然后在这些点上绘制多段线。
由于某种原因,我无法使多段线准确地捕捉到节点。。。。
 
让我们看看Kbplc能否想出一个例程,直接从文本和/或用户输入绘制多段线。
 
你看到他为三维多段线上的低点写的那个吗?。。。
 
再次感谢
伊恩

eldon 发表于 2022-7-5 21:02:13

只需尝试一到两个想法-您是否已将osnap设置为仅节点?可以冻结所有其他图层,以便只显示点和三维多段线吗?是否使用3DPolyline命令?
 
祝您在三维多段线方面好运。当我发现不能像使用“多段线编辑”的普通多段线那样将它们连接在一起时,我放弃了使用它们。

scj 发表于 2022-7-5 21:05:55

Hi eldon,
试用PEDIT3Dhttp://www.black-cad.de
祝你好运
约琴

eldon 发表于 2022-7-5 21:08:23

嗨,Jochen,
 
非常感谢您的链接。
 
我现在试着整理一下自己,这样我就可以一次画出一条三维多段线,但很高兴知道一个备份。

David Bethel 发表于 2022-7-5 21:12:54

为什么不直接使用内置的呢。xy输入滤波器-大卫

eldon 发表于 2022-7-5 21:16:07

内置。XY过滤器是手动执行此操作的方法。
 
但是,您必须阅读级别文本,然后正确输入该值,如果有很多点,则可能存在错误。最好让lisp为您阅读级别文本。
 
我永远也找不到办法保持沉默。XY过滤器打开。我必须在每一个点上设置它,这与OSNAP在开始时设置的不同。由于需要将一幅大图转换为地面模型,它为学习一点lisp提供了动力。

iain9876 发表于 2022-7-5 21:17:52

我不知道KPBLC对此有何想法。

kpblc 发表于 2022-7-5 21:21:55

很抱歉,我必须重新安装Windows、AutoCAD等。请尝试以下代码:
(defun c:3dp (/ adoc pt_prev h_prev pt_lst vla_pline vla_pt_lst answer)
;;; Written by kpblc at 2006 Oct 11 by req of iain9876
;;; at cadtutor.net forum
(vl-load-com)
(setq adoc (vla-get-activedocument (vlax-get-acad-object)))
(vla-startundomark adoc)
(if (setq pt_prev (getpoint "\nSelect start point <Exit> : "))
   (progn
   (setq
       h_prev (cond
                ((setq h_prev
                        (car
                        (entsel
                            (strcat
                              "\nSelect the TEXT (or MTEXT) to get elevation <"
                              (rtos (caddr pt_prev))
                              "> : "
                              ) ;_ end of strcat
                            ) ;_ end of entget
                        ) ;_ end of car
                     ) ;_ end of setq
               (atof
                   (vla-get-textstring (vlax-ename->vla-object h_prev))
                   ) ;_ end of rtos
               )
                (caddr pt_prev)
                ) ;_ end of cond
       pt_lst (list (list (car pt_prev) (cadr pt_prev) h_prev))
       ) ;_ end of setq
   (while (setq cur_pt (getpoint pt_prev "\nSelect next point <Enough> : "))
       (setq pt_prev    cur_pt
             h_prev   (cond
                        ((setq h_prev
                                  (car
                                    (entsel
                                    (strcat
                                        "\nSelect the TEXT (or MTEXT) to get elevation <"
                                        (rtos (caddr pt_prev))
                                        "> : "
                                        ) ;_ end of strcat
                                    ) ;_ end of entget
                                    ) ;_ end of car
                                 ) ;_ end of setq
                           (atof
                           (vla-get-textstring (vlax-ename->vla-object h_prev))
                           ) ;_ end of rtos
                           )
                        (caddr pt_prev)
                        ) ;_ end of cond
             pt_lst   (append pt_lst
                              (list (list (car pt_prev) (cadr pt_prev) h_prev))
                              ) ;_ end of append
             vla_pt_lst (vlax-make-variant
                        (vlax-safearray-fill
                            (vlax-make-safearray
                              vlax-vbdouble
                              (cons 1 (length (apply 'append pt_lst)))
                              ) ;_ end of vlax-make-safearray
                            (apply 'append pt_lst)
                            ) ;_ end of vlax-safearray-fill
                        ) ;_ end of vlax-make-variant
             ) ;_ end of setq
       (if (not vla_pline)
         (setq vla_pline (vla-add3dpoly (vla-get-modelspace adoc) vla_pt_lst))
         (vla-put-coordinates vla_pline vla_pt_lst)
         ) ;_ end of if
       ) ;_ end of while
   (initget "Yes No _ Y N")
   (if (= (cond ((getkword "Close it <Yes> : ")
                   )
                  (t "Y")
                  ) ;_ end of cond
            "Y"
            ) ;_ end of =
       (vla-put-closed vla_pline :vlax-true)
       ) ;_ end of if
   ) ;_ end of progn
   ) ;_ end of if
(vla-endundomark adoc)
(princ)
) ;_ end of defun
---
补充:
我忘了说:没有提供从lisp应该得到textstring的实体类型测试!小心!
页: 1 [2]
查看完整版本: 二维直线/多段线到三维多段线