Arepo 发表于 2022-7-6 07:50:05

Lisp绘制样条曲线,得到P1&

我想知道是否有人可以帮助我用lisp绘制样条曲线,并获得样条曲线前两点的坐标。我需要他们在样条曲线的第一个点插入一个块,并定义点之间的角度。
我从下面的lisp开始,但我无法使其正常工作,命令提示与标准AutoCAD样条线的提示不同,它提示和。我必须点击回车键几次才能退出程序。
我正在使用AutoCAD 2011。
非常感谢。
 
 
(defun c: DrawSpline ()
(command "._spline")
(while (> (getvar "cmdactive") 0)
(command pause)
)

Lee Mac 发表于 2022-7-6 08:03:25

考虑以下代码:
 
(defun c:DrawSpline ( / a e p )
   (setq e (entlast))
   (initcommandversion)
   (command "._spline")
   (while (< 0 (getvar 'cmdactive))
       (command pause)
   )
   (if (not (eq e (setq e (entlast))))
       (progn
         (setq p (vlax-curve-getstartpoint e)
               a (angle '(0.0 0.0 0.0) (vlax-curve-getfirstderiv e (vlax-curve-getstartparam e)))
         )
       )
   )
   (princ)
)
(vl-load-com) (princ)
 
在上例中,变量“p”是样条曲线的起点,变量“a”是起点处切线的角度。
 
我还建议您阅读关于在您的帖子中格式化代码的代码发布指南。

Tharwat 发表于 2022-7-6 08:06:40

大概
 

(defun c:Test (/ p1 p2)
(if (and (setq p1 (getpoint "\n First point :"))
          (setq p2 (getpoint "\n Second point :" p1))
   )
   (command "_.spline" "_non" p1 "_non" p2)
   (while (> (getvar 'cmdactive) 0)
   (command pause)
   )
)
(princ)
)

SLW210 发表于 2022-7-6 08:13:41

阿雷波,
 
请阅读代码发布指南并编辑您的帖子。

Lee Mac 发表于 2022-7-6 08:26:09

 
不客气,阿雷波
 
使用initcommandversion函数可以更改提示,该函数将命令初始化为特定(或最新)版本。

aloy 发表于 2022-7-6 08:31:16

嗨,塔瓦,
是否可以扩展代码以绘制三条独立的线:p1 p2、p3 p4和从这两条线的交点到第五个点的另一条线,同时允许在获取点之前缩放窗口,并在获取点之后每次缩放上一个?。这有一个道路设计应用程序。
当做
芦荟

Tharwat 发表于 2022-7-6 08:40:07

 
代码如何从这两条线的交点绘制三条独立的线和另一条线???
 
你能更详细地解释一下你的目标吗?
 
你想要样条的法线?

Lee Mac 发表于 2022-7-6 08:42:57

???
 
(defun c:test ( / ip p1 p2 p3 p4 p5 )
   (if
       (and
         (setq p1 (getpoint "\n1st Point: "))
         (setq p2 (getpoint "\n2nd Point: " p1))
         (setq p3 (getpoint "\n3rd Point: "))
         (setq p4 (getpoint "\n4th Point: " p3))
       )
       (if (setq ip (inters p1 p2 p3 p4 nil))
         (if (setq p5 (getpoint "\n5th Point: " ip))
               (mapcar
                   (function
                     (lambda ( a b )
                           (entmake
                               (list
                                  '(0 . "LINE")
                                 (cons 10 (trans a 1 0))
                                 (cons 11 (trans b 1 0))
                               )
                           )
                     )
                   )
                   (list p1 p3 ip)
                   (list p2 p4 p5)
               )
         )
         (princ "\nLines are Parallel.")
       )
   )
   (princ)
)

aloy 发表于 2022-7-6 08:56:11

李·麦克,
非常感谢你。代码用于获取这三行。实际上,第三条线在前两条线夹角的平分线上。然而,我需要放大覆盖五个点的区域,然后再发出命令,每次给出点后也需要缩小。
塔尔瓦特,
我的目标是在AutoCAD中加载的corridoor测量图上给出这些点,并通过迭代计算圆曲线的最佳半径、缓和曲线(螺旋或回旋)的最佳长度,以适应极限内的超高和驾驶舒适性,具体取决于设计速度的道路类型,所有这些都符合道路项目实施所在国的设计标准。
当做
芦荟
页: [1]
查看完整版本: Lisp绘制样条曲线,得到P1&