tamohr 发表于 2022-7-6 13:45:18

需要3d Line Lisp

您好,我需要一个LISP例程,它将允许我用“Z”坐标绘制一条线。我想单击当前x、y平面中的一个点,然后提示输入“Z”或标高作为线的起点,然后单击线的终点,再次提示输入“Z”坐标。这条线的终点将是下一条线的起点,然后继续拾取并输入“Z”坐标,形成一系列3D线,每个线在其交点处具有相同的“Z”坐标。任何帮助都将不胜感激,谢谢!

Lee Mac 发表于 2022-7-6 13:56:53

简单介绍一下:

(defun c:lz (/ pt1 z1 pt2 z2)
(while
   (and
   (setq pt1 (getpoint "\nSpecify First Point: "))
   (or (setq z1 (getdist "\nSpecify Z <0.0>: ")) (setq z1 0.0))
   (setq pt2 (getpoint pt1 "\nSpecify Next Point: "))
   (or (setq z2 (getdist "\nSpecify Z <0.0>: ")) (setq z2 0.0)))
   (command "_.line" "_non"
   (list (car pt1) (cadr pt1) z1) "_non"
   (list (car pt2) (cadr pt2) z2) ""))
(princ))

David Bethel 发表于 2022-7-6 14:09:25

为什么不直接使用点过滤器呢。xy-大卫

tamohr 发表于 2022-7-6 14:16:13

谢谢David和Lee,这两种方法都比我之前做的要好得多。
李,可以了。修改lsp以继续该线,使用前一条线的端点坐标制作一条三维多线,以开始下一条线?

Lee Mac 发表于 2022-7-6 14:28:56

也许:
 

(defun c:lz(/ pt1 z1 pt2 z2 pt3 z3)
(if (and (setq pt1 (getpoint "\nSpecify First Point: "))
          (or (setq z1 (getdist "\nSpecify Z <0.0>: ")) (setq z1 0.0))
          (setq pt2 (getpoint (if pt2 pt2 pt1) "\nSpecify Next Point: "))
          (or (setq z2 (getdist "\nSpecify Z <0.0>: ")) (setq z2 0.0)))
   (progn
   (command "_.line""_non"
            (list (car pt1) (cadr pt1) z1) "_non"
            (list (car pt2) (cadr pt2) z2) "")
   (while (and (setq pt3 (getpoint pt2 "\nSpecify Next Point: "))
               (or (setq z3 (getdist "\nSpecify Z <0.0>: ")) (setq z3 0.0)))
       (command "_.line" "_non"
                (list (car pt2) (cadr pt2) z2)
                (list (car pt3) (cadr pt3) z3) "")
       (setq z2 z3 pt2 pt3))))
(princ))

tamohr 发表于 2022-7-6 14:36:01

李,
非常感谢。我刚刚加载了文件,它工作得很好。如果我能为你做点什么,请告诉我。
托德·莫尔

Lee Mac 发表于 2022-7-6 14:48:40

很乐意帮忙
页: [1]
查看完整版本: 需要3d Line Lisp