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


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » CAD二次开发 » AutoCAD二次开发 » ObjectARX(VB.NET/C#)
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


 
 
主题工具 搜索本主题 显示模式
旧 2009-04-29, 04:48 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】c#取得多段线中圆弧中点坐标 - 精华帖集合

c#取得多段线中圆弧中点坐标 - 精华帖集合
www.dimcax.com
c#取得多段线中圆弧中点坐标
其实很简单的,但是不懂所以弄了好久才出来!现在贴出来和菜鸟们交流,高手请指教
c#取得多段线中圆弧中点坐标
搞了好久才弄明白怎么取得多段线中点的坐标值,以下是代码,和大家交流一下!其实还有更好的方法,我也是写出这段代码之后才在高手指导下知道第二种方法的,也一起贴出来。
using system;
using autodesk.autocad.runtime;
using autodesk.autocad.databaseservices;
using autodesk.autocad.geometry;
using autodesk.autocad.graphicsinterface;
using autodesk.autocad.editorinput;
using autodesk.autocad.applicationservices;
[assembly: extensionapplication(typeof(classlibrary.lab8class))]
[assembly: commandclass(typeof(classlibrary.lab8class))]
namespace classlibrary
{
public class lab8class:iextensionapplication
{
public void initialize()
{
autodesk.autocad.applicationservices.application.documentmanager.mdiactivedocument.editor.writemessage("\n调试程序命令lv");//初始化操作
}
public void terminate()
{
//清除操作
}

public lab8class()
{
//
// todo: add constructor logic here
//
}
editor ed = application.documentmanager.mdiactivedocument.editor;
database db = autodesk.autocad.databaseservices.hostapplicationservices.workingdatabase;
autodesk.autocad.databaseservices.transactionmanager tm = autodesk.autocad.databaseservices.hostapplicationservices.workingdatabase.transactionmanager;
// define command "asdkcmd1"
[commandmethod("lv")]
public void getplpoint() // this method can have any name
{
try
{
transaction trans=tm.starttransaction();
// blocktablerecord btr;
// blocktable bt;
using(trans)
{
promptentityresult per = ed.getentity("请选择多段线");
if(per.status == promptstatus.ok)
{
dbobject obj = trans.getobject(per.objectid, openmode.forread);
{
polyline pl = obj as polyline;
int vn = pl.numberofvertices;
for(int i = 0; i<= vn; i++)
{
point3d pt3d = pl.getpoint3dat(i-1);
double vbulge = pl.getbulgeat(i);
if(vbulge != 0)
{
//方法一,比较笨的方法。
double len0 = pl.getdistatpoint(pl.getpoint3dat(i));
double len1 = pl.getdistatpoint(pl.getpoint3dat(i+1));
double midlen = (len0 + len1)/2;
ed.writemessage("\n第二种方法计算的圆弧中点是:" + midp3d.tostring());
//方法二,但是速度比较慢好像,因为如果加上下面的代码,运行速度明显慢,前面是感觉不出来的,后面的要停顿一下,可能有异常
point3d midl = pl.getpointatparameter(i+0.5);
ed.writemessage("\n第二种方法计算的圆弧中点是:" + midl.tostring());
}
}
}
}
trans.commit();
trans.dispose();
}
}
catch{}
finally
{
}
}
}
}
复制代码
很好,已经加精了。
c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。
getpointatparameter这个好用哦。。。楼主提供这么好的代码。。。
感谢楼主的分享
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
 


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭



所有的时间均为北京时间。 现在的时间是 06:16 AM.


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多