dynacy 发表于 2006-5-15 15:19:00

如何实现交互式绘图

<P>有两个问题,麻烦给以解释:</P>
<P>1。用vb控制出好的图,怎样用鼠标在cad中修改控制点后,其坐标实时反映到数据的变化里,有没可能在拖动直线的控制点之后,放松鼠标的同时,跳出对话框,进行值的输入,基本程序怎样实现?</P>
<P>2。如果图过长(比如公路走线图)而又不分幅,外图框怎样跟着加长,正好将线路图完全包裹在矩形框内,我分析有两个办法:1。我记得有个外包线的功能,可是不知怎样用程序实现;2。图框的横向x值用路线终点的值代替,而不是A3图幅的420,可是完全动态程序看起来会很麻烦</P>
<P>谢谢指导!</P>

xinghesnak 发表于 2006-5-15 16:13:00

<P>1,你的说功能完全没有问题,做法如下:</P>
<P>&nbsp;&nbsp;&nbsp; 创建一个类模块(名称"Class1"),然后在声明段添加下面语句</P>
<P>&nbsp;&nbsp; Public WithEvents Line As AcadLine</P>
<P>&nbsp;&nbsp;&nbsp; 然后在同一类模块中加入下面过程作为Modified事件触发器:</P>
<P>&nbsp;&nbsp;&nbsp; Private Sub line_modified(ByVal pObject As AutoCAD.AcadObject)<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; UserForm1.Show&nbsp; '加载你自定义的窗体<BR>&nbsp;&nbsp;&nbsp; End Sub</P>
<P>&nbsp;&nbsp;&nbsp; 创建一个模块,写入下面的代码:</P>
<P>&nbsp;&nbsp;&nbsp; Dim eventobj As New Class1<BR>&nbsp;&nbsp;&nbsp; Sub main()<BR>&nbsp;&nbsp;&nbsp; Dim line1 As AcadLine<BR>&nbsp;&nbsp;&nbsp; Dim startPoint(2) As Double, endPoint(2) As Double<BR>&nbsp;&nbsp;&nbsp; startPoint(0) = 0: startPoint(1) = 0: startPoint(2) = 0<BR>&nbsp;&nbsp;&nbsp; endPoint(0) = 50: endPoint(1) = 50: endPoint(2) = 0</P>
<P>&nbsp;&nbsp;&nbsp; Set line1 = ThisDrawing.ModelSpace.AddLine(startPoint, endPoint)<BR>&nbsp;&nbsp;&nbsp; Set eventobj.Line = line1<BR>&nbsp;&nbsp;&nbsp; End Sub</P>
<P>代码写完了,末尾别忘了加上一个userform,运行一下就得到你的效果了</P>
<P>&nbsp;</P>
<P>2,有了上面的程序,相信这个问题也好解决了吧</P>

dynacy 发表于 2006-5-20 01:49:00

<P>说实话,不是太明白,因为一般CAD使用不都是对话框里做个拾取点,拾取实体,然后在返回对话框的过程么?您给我的这个类模块我试过了,可以跳出窗体,可是怎么显示那种人工拉线的功能呢?对于类模块的使用我还不是太熟悉,您多费心,给我解释下哈。</P>

xinghesnak 发表于 2006-5-20 08:27:00

<P>To dynacy:</P>
<P>&nbsp;&nbsp;&nbsp; 你说的人工拉线的功能是指什么?我看你最开始发的帖子里没有说啊。。。</P>

dynacy 发表于 2006-5-23 10:46:00

<P>其实我要实现的人工拉坡功能在CAD中就是在CAD中用线段连续画若干条,当点选线段的端控制点时,随着鼠标左键的释放,该端控制点移到新位置,同时它两边的线段也同时移到新位置,我画了个简图也许更容易明白,请您参阅。另外,线段的端点的坐标是通过vb程序读取access数据库得到的,有没有可能当鼠标拖动控制点到新位置时,该点的坐标在数据库的数值也在变(x表示公路里程,y表示公路高程),这个功能可能不太容易用语言写到通用,您看能不能给我个思路?当然您是高手,或许还真能写到通用程序呢</P>
页: [1]
查看完整版本: 如何实现交互式绘图