aloy 发表于 2022-7-5 15:41:56

绘制样条曲线

大家好,
我有几个与道路中心线、道路边缘线(左侧和右侧)和边坡边缘(即路堤底部或路堑顶部或采光)相关的定期点列表。如何一次绘制平滑样条线?。
列表的格式为:(setq l’((d1(x1 y1))(d2(x2 y2))。。。。。。(dn(xn yn)))
 
提前感谢。
 
芦荟

Tharwat 发表于 2022-7-5 15:47:03

你好
 
确保XYZ值为三个坐标的十进制数,而不是只有两个坐标,正如您在点列表中演示的那样。
 
在下面的示例中,我添加了零值的Z坐标,只要您没有包括在列表中。
 
以下代码是一个良好的开端。


(setq l '((d1 (1. 2.)) (d2 (3. 4.)) (dn (5. 6.))))

(setq pts (mapcar '(lambda (v) (append (cadr v) '(0.))) l))

(vlax-invoke
(vlax-get (vla-get-activelayout
             (vla-get-activedocument (vlax-get-acad-object))
         )
         'block
)
'addspline
(apply 'append pts)
(car pts)
(last pts)
)

marko_ribar 发表于 2022-7-5 15:50:08

什么是d1,d2,dn?
点名称?

aloy 发表于 2022-7-5 15:52:11

谢谢塔瓦。它工作得很好。

aloy 发表于 2022-7-5 15:56:58

你好,Marco,
d1到dn是链测长度或到道路中心线特定点的距离。我会张贴一个绘图和/或一张图片,当我完成了它。
对不起,我应该在帖子里解释一下。
 
芦荟

aloy 发表于 2022-7-5 15:58:41

嗨,塔瓦,
还有一个问题。我一共有五张清单。道路中心线具有链测长度(距离)和xyz,其余具有给定代码适用的d和xy。然而,当我尝试在没有第一行代码的情况下使用xyz时,它返回了一个异常。我尝试将其转换为xy0.0格式usimh mapcar lambda失败。你能建议一条出路吗。
当做
芦荟

BIGAL 发表于 2022-7-5 16:02:50

最好将点剥离到一个忽略链测长度等的XYZ列表中,然后每次都可以使用。
 
还真的需要回到一个步骤,你用什么来创建原始列表,它是一个CSV文件等?d、 对于CSV类型,使用正确的defun更容易说。

Grrr 发表于 2022-7-5 16:05:23

如果嵌套的assoc列表让人困惑,他可以将其分解为几个(平行列表):

(setq L1 '((1. 2.)(3. 4.)... pn))
(setq L2 '(d1 d2 ... dn))

当然,有些项目可能是零,同样应该保留-关于平行位置。

Tharwat 发表于 2022-7-5 16:09:49

 
你好
 
这一例外是由于两个坐标引起的,正如我在第一次答复中提到的,它应该是三个坐标。
 
请张贴新的列表,让我看看,并建议一个解决方案,如果可能的话。

Stefan BMR 发表于 2022-7-5 16:11:33

你好
entmake way也适用于二维和三维点列表。
对于2D点,假设z坐标为0.0。
对于列表格式,请使用
(setq lst (mapcar 'cadr l1))
页: [1] 2
查看完整版本: 绘制样条曲线