📄 cad世界__autocad vba初级教程 (第十课画多段线和样条线).htm
字号:
<TD align=middle bgColor=#eeeeee height=40><FONT
style="FONT-SIZE: 16px"><B>Autocad VBA初级教程
(第十课:画多段线和样条线)</B></FONT></TD></TR>
<TR>
<TD align=right>作者:普天同庆 | 阅读次数:983 <FONT color=#999999>转自:<FONT
color=#cc0000>CAD世界网</FONT>
时间:2006年5月8日9:37</FONT></TD></TR></TBODY></TABLE><BR>
<TABLE cellPadding=5 width=600 border=0>
<TBODY>
<TR>
<TD class=c align=left>
<P><FONT id=zoom style="FONT-SIZE: 14px">画二维多段线语句这样写:<BR>set lobj=
ThisDrawing.ModelSpace.AddLightweightPolyline(fitpoint)<BR>AddLightweightPolyline后面需一个参数,存放顶点坐标的数组
<P>画三维多段线语句这样写:<BR>Set lobj =
ThisDrawing.ModelSpace.Add3DPoly(fitpoint)<BR>Add3dpoly后面需一个参数,就是顶点坐标数组</P>
<P>画二维样条线语句这样写:<BR>Set lobj =
ThisDrawing.ModelSpace.AddSpline(fitPoints,startT,
endT)<BR>Addspline后需要三个参数,第一个是拟合点数组,后面两个分别是起点切向和终点切向。</P>
<P>下面看例题。这个程序是第三课例程的改进版。原题是这样的:<BR>绘制三维多段线时X、Y值在屏幕上用鼠标选取,Z值用键盘输入。<BR>细心的读者是否还记得这个小程序已经在第三课的回贴中发布了。先分析一下编程细路:<BR>用动态数组存放多段线的所有顶点坐标,获得新坐标后就把前一次画的多段线删除,画出多段线,并将线段第二点的端点保存为下一条线段的第一个端点坐标,以下是源码:</P>
<P>Sub myl()</P>
<P>Dim p1 As Variant '申明端点坐标<BR>Dim p2 As Variant<BR>Dim l() As
Double '声明一个动态数组<BR>Dim templ As Object</P>
<P>p1 = ThisDrawing.Utility.GetPoint(, "输入点:") '获取点坐标<BR>z =
ThisDrawing.Utility.GetReal("Z坐标:") '用户输入Z坐标值<BR>p1(2) = z
'将Z坐标值赋予点坐标中</P>
<P>ReDim l(0 To 2) '定义动态数组<BR>l(0) = p1(0)<BR>l(1) = p1(1)<BR>l(2) =
z</P>
<P>On Error GoTo Err_Control '出错陷井<BR>Do '开始循环<BR> p2 =
ThisDrawing.Utility.GetPoint(p1, vbCr & "输入下一点:")
'获取下一个点的坐标<BR> z = ThisDrawing.Utility.GetReal("Z坐标:")
'用户输入Z坐标值<BR> p2(2) = z '将Z坐标值赋予点坐标中<BR> <BR> lub
= UBound(l) '获取当前l数组中元的元素个数<BR> ReDim Preserve l(lub +
3)<BR> For i = 1 To 3<BR> l(lub + i) = p2(i
- 1)<BR> Next i<BR> If lub > 3
Then<BR> templ.Delete '删除前一次画的多段线<BR> End
If<BR> Set templ = ThisDrawing.ModelSpace.Add3DPoly(l)
'画多段线<BR> p1 = p2
'将第二点的端点保存为下一条直线的第一个端点坐标<BR>Loop<BR>Err_Control:</P>
<P>End Sub</P>
<P><BR>我们学一学动态数组,这是非常有用的。所谓动态数组,简单讲就是数组元素可以改变的特殊数组。<BR>这样定义数组:Dim l(
) As Double <BR>赋值语句:<BR>ReDim l(0 To 2) <BR>l(0) = p1(0)<BR>l(1) =
p1(1)<BR>l(2) = z<BR>重新定义数组元素语句:<BR> lub = UBound(l)
'先要获取当前l数组中元的元素个数,用ubount函数计算。<BR> ReDim Preserve l(lub +
3)<BR>重定义时数组中要加三个元素,用以存放坐标值,所以定义元素为lub+3。给数值赋值的语句是一样的。</P>
<P>再看画多段线语句:<BR>Set templ = ThisDrawing.ModelSpace.Add3DPoly(l)
'画多段线<BR>在最后面括号中的l就是存放点坐标的动态数组,这条语句在画多段线的同时把多段线作为对象赋值给templ
变量,这样下面的删除语句就可以直接引用这个变量了。</P>
<P>删除语句:<BR>templ.Delete<BR>因为已经知道对象是templ,所以只要在对象后面用delete方法就可以了。</P>
<P>下面的例程更加实用些,它的功能是把样条线转化为多段线。编程思路:用户选择一根样条线,计算样条线的拟合点,然后把所有的拟合点存放到数组中,最后用这个数组画多段线。</P>
<P>Sub sp2pl()</P>
<P>Dim getsp As Object ‘获取样条线的变量<BR>Dim newl() As Double ‘多段线数组</P>
<P>Dim p1 As Variant ‘获得拟合点点坐标</P>
<P>ThisDrawing.Utility.GetEntity getsp, po,
"本程序将样条曲线转为多段线。请选择样条曲线"</P>
<P>sumctrl = getsp.NumberOfControlPoints ‘计算样条线中一共有多少拟合点</P>
<P>ReDim newl(0 To sumctrl * 3 - 1) ‘重定义数组<BR> <BR> For
i = 0 To sumctrl - 1 ‘开始循环,<BR> p1 = getsp.GetControlPoint(i)
‘把拟合点坐标存到p1变量中<BR> For j = 0 To
2<BR> newl(i * 3 + j) = p1(j)<BR> Next j</P>
<P>Next i<BR>Set templ = ThisDrawing.ModelSpace.Add3DPoly(newl)
‘画样条线</P>
<P>End Sub</P>
<P>下面的语句是让用户选择样条线:<BR>ThisDrawing.Utility.GetEntity getsp, po,
"本程序将样条曲线转为多段线。请选择样条曲线"<BR>ThisDrawing.Utility.GetEntity
后面需要三个参数:<BR>第一个getsp用于存放获得用户选择的对象变量,第二个po是用户鼠标点下时的位置,第三个是一段字符串,显示在提示栏。</P><STRONG>
<P><STRONG>其他课程回顾:</STRONG></P>
<P><A
href="http://www.icad.com.cn/html/2005-4-25/2005425163833.asp"><U><FONT
color=#0000ff>Autocad VBA初级教程 (第一课:入门)</FONT></U></A></P>
<P><A
href="http://www.icad.com.cn/html/2005-4-25/2005425163954.asp"><U><FONT
color=#0000ff>Autocad VBA初级教程 (第二课 编程基础)</FONT></U></A></P>
<P><A
href="http://www.icad.com.cn/html/2005-4-26/2005426112553.asp"><U><FONT
color=#0000ff>Autocad VBA初级教程 (第三课 编程基础二)</FONT></U></A></P>
<P><A
href="http://www.icad.com.cn/html/2005-4-26/2005426112638.asp"><U><FONT
color=#0000ff>Autocad VBA初级教程 (第四课 程序的调试和保存)</FONT></U></A></P>
<P><A
href="http://www.icad.com.cn/html/2005-5-8/20055893119.asp"><U><FONT
color=#0000ff>Autocad VBA初级教程 (第五课 画函数曲线)</FONT></U></A></P>
<P><A
href="http://www.icad.com.cn/html/2005-5-8/20055893328.asp"><U><FONT
color=#0000ff>Autocad VBA初级教程 (第六课 数据类型的转换)</FONT></U></A></P>
<P><A
href="http://www.icad.com.cn/html/2005-5-9/200559102708.asp"><U><FONT
color=#0000ff>Autocad VBA初级教程 (第七课 写文字)</FONT></U></A><BR><BR><A
href="http://www.icad.com.cn/html/2005-5-30/2005530154133.asp"><FONT
color=#0000ff><U>Autocad VBA初级教程 (第八课:图层操作)</U></FONT></A><BR><BR><A
href="http://www.icad.com.cn/html/2005-6-2/200562132544.asp"><U><FONT
color=#0000ff>Autocad VBA初级教程 (第九课:创建选择集)</FONT></U></A></P>
<P> </P></STRONG></FONT><BR>(编辑:zhaozh)
<P></P>
<P><B><FONT
color=#ff0000>CAD世界网编者注:</FONT></B>若您有关于制造业信息化的文章,欢迎您积极投稿。无论是关于技术
、管理方面,还是资讯、信息方面,我们将会为您提供一个交流、互动的平台,让您充分展示自己的观点、见解、理论…… </P>
<P>技术类文章请投往<FONT color=#0000cc><A
href="mailto:zhaozh@icad.com.cn"><FONT
color=#0000ff>zhaozh@icad.com.cn</FONT></A></FONT>邮箱,其它相关文章请投往<A
href="mailto:jiangyx@icad.com.cn"><FONT
color=#0000ff>jiangyx@icad.com.cn</FONT></A>邮箱。</P></TD></TR>
<TR>
<TD align=right>
<SCRIPT language=JavaScript>
<!-- Begin
if (window.print) {
document.write('【<a href="#" onClick="javascript:window.print()"><font color=cc0000>打印本文</font></a>】 ');
}
// End -->
</SCRIPT>
【<A
href="http://old.icad.com.cn/review/index.asp?article=20065892707"
target=_blank><FONT color=#cc0000>发表评论</FONT></A>】【<A
href="javascript:window.close()"><FONT
color=#cc0000>关闭窗口</FONT></A>】</TD></TR></TBODY></TABLE>
<TABLE align=left>
<TBODY>
<TR>
<TD align=left>上一篇:<A
href="http://old.icad.com.cn/html/2006-4-30/2006430101243.asp"
target=_blank>Sub-Zero:创造“食物储存的里程碑之作”</A><BR>下一篇:<A
href="http://old.icad.com.cn/html/2006-5-8/20065893439.asp"
target=_blank>Autocad VBA初级教程
(第十一课:动画基础)</A><BR></TD></TR></TBODY></TABLE></TD><!--中间通栏结束--><!--<td width="2" background="../../image/lbg1.gif"></td>--><!--右侧通栏开始--></TR></TBODY></TABLE></TBODY></TABLE>
<SCRIPT language=JavaScript
src="CAD世界__Autocad VBA初级教程 (第十课画多段线和样条线).files/endA.js"></SCRIPT>
</DIV></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -