dailixin 发表于 2003-10-10 20:57:00

给定XY平面上的n个点,不使用样条曲线怎样光滑连接?

VBA二次开发中碰到如下问题,请各位高手指教:
需要将XY平面上n个点光滑封闭连接,又不能使用样条曲线,据说轻便多义线也可以达到这个要求,setbugle,设置凸度,但是又怎么能够实现自动为各段设定凸度?

efan2000 发表于 2003-10-10 21:09:00

SetBugle只是设置某一段的凸度,如果要整要曲线光滑的话,就是使用PEdit命令来拟合了。

凸度的计算公式:2 * H / D。
如果等于0,那么就是直线。
如果等于1,那么就是半圆弧。
如果为负值,表示沿时钟方向,顺时针。正值,逆时针。

dailixin 发表于 2003-10-10 21:23:00

多谢指教!PEdit命令是不是也要设定每个段的凸度?

efan2000 发表于 2003-10-10 22:02:00

不要,向ACAD发送PEdit命令,然后传递多义线的对象即可。
如:
ThisDrawing.SendCommand "PEDIT" & vbCr & "(Handent """ & PLineObj.Handle & """)" & vbCr & "F" & vbCr & vbCr。
其实它就是相当于在ACAD的命令上行上执行内部的命令。

F表示进行曲线拟合操作,而S表示将其转化为样条曲线。但是它的对象类型依旧是多义线。

dailixin 发表于 2003-10-11 09:55:00

多谢指教!已经实现了光滑!

dailixin 发表于 2003-10-11 10:04:00

出现新的问题!我是不采用offset进行光顺没有问题,采用offset后不能进行光顺,是不是因为变量不匹配的缘故?
Dim offsetObj As Variant
offsetObj = plineObj.offset(0.25)

efan2000 发表于 2003-10-11 11:02:00

Offset函数返回的是一个对象数组。
因而,其中的第一个对象应该是offsetObj(0)。

Dim offsetObj As Variant
offsetObj = plineObj.offset(0.25)
ThisDrawing.SendCommand "PEDIT" & vbCr & "(Handent """ & offsetObj(0).Handle & """)" & vbCr & "F" & vbCr & vbCr。

dailixin 发表于 2003-10-11 11:11:00

是不是采用SendCommand的方法,基本上能够实现各种二次开发?

efan2000 发表于 2003-10-11 11:17:00

SendCommand的意思就是发送命令,它是发送ACAD的内部命令,因而ACAD所具有的基本功能,都可以使用它来完成。不过这种开发效率低,而且没有可视化的效果。只能用于开发语言本身无法实现或者实现比较困难的情况下采用。

dailixin 发表于 2003-10-11 11:21:00

多谢多谢,见面了请你吃饭,OK?
页: [1]
查看完整版本: 给定XY平面上的n个点,不使用样条曲线怎样光滑连接?