几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量

几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 (http://www.dimcax.com/hust/index.php)
-   ObjectARX(VB.NET/C#) (http://www.dimcax.com/hust/forumdisplay.php?f=176)
-   -   【转帖】【新手求助3】实体相交问题 (http://www.dimcax.com/hust/showthread.php?t=9238)

yang686526 2009-04-20 05:28 PM

【转帖】【新手求助3】实体相交问题
 
【新手求助3】实体相交问题
www.dimcax.com
【新手求助3】实体相交问题
得到大家的帮助,我学习了面向对象的一些东西。明白了一些,上次的intersectwith()中public point3d[ ] intersectwith(planarentity plane);返回值类型应该是point3d类的,point3d pint=linear.intersectwith(plane);其中linear为linearentity3d类型的,plane为planarentity 类型的。应该是这样吧? 现在我想要求两个实体(直线和平面)的交点。首先先在auto cad中选择两个实体,然后求交,返回值。使用intersectwith()方法,我找不到实体类相交的方法,intersectwith()方法中均为几何类相交。 代码如下: public class intersectwith { [commandmethod("intersect")] public point3d[ ] intersect() { editor edr= tools.editor;                        promptentityresult resentr=edr.getentity("\nselect an region: ");    region region = (region)tools.getentity(resentr.objectid); editor edl = tools.editor;                        promptentityresult resentl = edl.getentity("\nselect an line: ");          line line = (line)tools.getentity(resentl.objectid); point3d[ ] ptr = line.intersectwith(region); return ptr; } } 其中编译出错,我的分析: 由于我选的是两个实体,但line.intersectwith(region)是几何类相交,所以出错。但几何类与实体类不能相互转换,而且intersectwith()方法中均为几何类相交。 如何求实体的相交,希望得到大家的帮助。
想求直线和面域的交点?
对。
实体类是有intersectwith的,下面是定义的原型: public void intersectwith( entity entitypointer, autodesk.autocad.databaseservices.intersect intersecttype, plane projectionplane, point3dcollection points, int thisgraphicsystemmarker, int othergraphicsystemmarker );
c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。
还是有问题,我依照上面改了一下:代码如下: [commandmethod("intersect")] public point3dcollection intersect( ) { editor edr= tools.editor;                        promptentityresult resentr=edr.getentity("\nselect an region: ");    region region = (region)tools.getentity(resentr.objectid); editor edl = tools.editor;                        promptentityresult resentl = edl.getentity("\nselect an line: ");        line line = (line)tools.getentity(resentl.objectid); point3dcollection ptr=new point3dcollection(); tools.getentity(resentr.objectid).intersectwith(tools.getentity(resentl.objectid), intersect.onbothoperands, ptr, 0, 0); return ptr; } 编译通过了,也生成了.dll文件。但是我在auto cad中输入命令intersect怎么没有反应?即不出现select an region和select an line,希望大家帮忙。
补充一下,我是在auto cad中打开了一张.dwg的图后,已经加载了.dll文件。
原帖由 liming0311 于 补充一下,我是在auto cad中打开了一张.dwg的图后,已经加载了.dll文件。
请注意[commandmethod]修饰的函数,必须是public void类型的,即不能有返回值。
c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。


所有的时间均为北京时间。 现在的时间是 09:15 PM.