在软件工程中,总是提倡在编写代码之前尽可能小心谨慎地做好系统分析,尽管这一点确实很难做到。请楼主在阅读以下文字前务必清楚明确地回答一段文字提出的问题。(我也希望以后看到的贴子都能先做好系统分析。)毕竟,你的工作领域别人不一定熟悉。
也许,楼主的需求并不复杂。但我仍然希望尽可能地深入讨论这个问题,希望其他的网友看到这个贴子也能从中收获点什么,这样我的目的就达到了。另外,我认为授人以鱼的同时,最好能授人以渔,因此,以下的文字我不提供完整的直接能用的代码段。尽管,写这些文字之前我已经编写了这些代码。
第一个问题,如何保持Txt文件中第三个字段与AutoCAD图形之间的关系。这个问题是由于该没有写入AutoCAD图形文件引起的,解决的方法就是在Txt文件第一次导入AutoCAD时就将该字段内容一同写入。 这样在二楼(也就是明总)的程序中需要作些修改:在While循环前先声明一个AcadCircle对象:
Dim MyCir As AcadCircle
添加圆对象时这样写:
Set MyCir = Thisdrawing.ModelSpace.AddCircle(...)
然后用AcadCircle对象的SetXData方法将Txt文件中的第三个字段内容作为扩展数据写入MyCir对象。具体的编程方法请参考帮助文档中AcadCircle对象的SetXData方法和GetXData方法,同时帮助文档中还有很好的关于这两个方法的示例代码。
写回Txt文件最简便的方法是读取AutoCAD图形中所有合适的圆对象,成批地重写Txt文档(当然,效率会比较低)。读取AutoCAD图形中所有合适的圆对象,需要使用AutoCAD的选择集操作,还要使用选择集的过滤功能。这些问题,本论坛已经有过很多次讨论,另外,帮助文档中关于AcadSelectionSet对象的Select方法的很好的示例代码。
写Txt文档用Write #或Print #语句,这要查看VB的联机帮助文档。这部份编程并不困难,只是提示一下楼主,记得使用Tab()函数,使输出的Txt文档排列整齐。
第二个问题,如何保持Txt文件中对象的次序一致性。最简捷的方法是类似以上保存Txt第三个字段一样,将对象的序号也加入到圆对象中。写入时,比较好理解的排序方法是直接选择排序:
Dim id As Integer
For id = 0 To Ssel.Count - 1
For Each MyCir In Ssel 'Ssel是程序中使用的选择集对象
MyCir.GetXData ... '获取圆对象的扩展数据,并分离出ID号
If ID号=id Then '在Txt写入一行
Next MyCir
Next id
这样的排序效率不高,需要更高效的排序,可能要专门设计排序算法。
第三个问题,如何有选择性地改写Txt文档。其实,如果真的需要这样做,用Txt做外部数据保存媒质,可能不如用EXCEL或者数据库。若一定要用Txt文档(毕竟读写Txt文档兼容性好,且Txt文件比EXCEL和数据库文件小)。大概需要仔细阅读VB的联机帮助中Seek语句和Put语句,然后还需要很仔细地编程(关键是使用Seek语句精确定位)。另外,Txt文档中的那些空白是用Spc()函数还是Tab()函数产生的,可能对Seek语句还有影响。而在EXCEL文档中,我们可以使用Range()方法很容易地定位,在数据库中可以使用RecordSet记录集指针。 谢谢楼主细心的指导.您所提的第三个字段与圆的关系:应该说是有关系的,我这个TXT文件是从一个3D绘图工具上所产生的半球体(接近),字段MaximumHeight表示它的高度,因为我需要把3D的球体转成2D的圆,由于点的数量太多,如果直接存成SAT格式的话我试过要40小时才能完成,根据明总的代码已经可以很快的将TXT导入(10个圆只需要40秒左右),由于我对编程的欠缺,再次谢谢明总的帮助!
而另一方面,因为我需要将导入CAD的圆进行修改(如直径,XYDATA等),然后再转入原来的三维软件中变成球体,也就必须再改成和原来一样的TXT文本格式,字段MaximumHeight也就同样表示它的高度。
由于自己的能力问题,不知道如何才能导出和原来一样的txt格式,我现在解决的办法是:先导出XYDATE和半径值到EXCEL里面,但格式不一样,再慢慢把EXCEL里的数据复制到TXT文本中,修改成和原来TXT一样的排列方式。但这样导致时间上缓慢了许多,却没有更好的办法。
另外我还想请教一个问题就是,我用VBA做成的下拉菜单和工具条,我在acad2005.lsp中加入了代码
(command "-vbarun" "dots.dvb!dotsdesign.NewMenuItem")<BR>(command "-vbarun" "dots.dvb!dotsdesign.NewMenuToolbar")
让它一运行CAD就执行菜单和工具条。出现了一个问题:就是在运行CAD以后,如果我在不关闭CAD的情况下再打开或者新建一个DWG文件,就出现了一个错误,说该宏已经运行。有什么办法才能够让它只在CAD第一次运行的时候执行上面两个宏命令,而不会在打开另一个图档的时候重复执行? 我附上原始的TXT文件。 超级斑竹果然是超级!!!佩服!!!以后要多请教了!!! <P>终于找到这入门帖了,谢谢!</P>
页:
1
[2]