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


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


 
 
主题工具 搜索本主题 显示模式
旧 2009-04-16, 09:10 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 【转帖】半年都没有解决的难题!

半年都没有解决的难题!
半年都没有解决的难题!
请教(急):vs3+objectarx开发的"三通"绘制程序.
基本功能如下:
1。获得用户输入点及直径。
2。以用户输入点为基点,输入直径为参数绘制三通管件。
在我的机器上运行正常,换到其他人的机器上画出的图全乱了???
我的机器和其他机器均安装的autocad4中文版
怀疑是坐标系的问题或与其他二次开发第三方软件冲突,请高手帮忙!多谢!!
你用的是c++吗?
c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。
肯定是,一定是。
肯定是,一定是。
那就无能为力了。建议去xdcad.net问问。
c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。
我认为这样的问题没法回答.你要贴出代码,才能有懂c++的高手帮你解答!
禀告大侠,是用的c++,relaese版和debug版都试了,问题一样。
没用过什么高级引用
源程序如下:
void draw_st()
{
ads_hdlg hdlg; //对话框的handle
int dcl_id, //对话框标识字
dlg_status; //对话框的状态
struct resbuf rb; //供存取autocad系统变量之用
short sht1,sht2; //对话框中幻灯片的尺寸
ads_point pt,pt1[22],pt2[35],pt3[23],pt_temp1,pt_temp2;
ads_real flyg,flk,zxxcg;//法兰缘高,法兰宽,中心线超高
ads_name ent,ss,ent1,ent2,ent3;
if(ads_load_dialog("st.dcl", &dcl_id)!=rtnorm) {
//将对话框文件set_env.dcl调入内存
acedalert("装入st.dcl文件出错.");
return;
}
if(ads_new_dialog("draw_st",dcl_id,(clientfunc)0,&hdlg)!=rtnorm) {
//显示对话框,图10-1
acedalert("显示draw_st对话框时出错.");
ads_unload_dialog(dcl_id);
return;
}
ads_dimensions_tile(hdlg,"image_st",&sht1,&sht2); //显示幻灯片
ads_start_image(hdlg,"image_st");
ads_slide_image(0,0,sht1,sht2,"stimage"); //幻灯片名为stimage
ads_end_image();
ads_set_tile(hdlg,"dia", "300");
ads_action_tile(hdlg, "accept", (clientfunc)xd_draw_st);
//由对话框返回直径diameter和绘制类型draw_style
ads_start_dialog(hdlg, &dlg_status); //与对话框进行交互
if(acedgetpoint(null,"\npick a point:",pt)==rtnorm)
{
/*初始化工作环境*/
layer_do("m","fat"); //创建线层
layer_do("m","thin");
layer_do("m","cen");
layer_edit("c","white","fat"); //设定颜色
layer_edit("c","white","thin");
layer_edit("c","green","cen");
layer_edit("l","continuous","fat"); //设定线型
layer_edit("l","continuous","thin");
layer_edit("l","center","cen");
layer_edit("lw","0.3","fat"); //设置线宽
acedcommand(rtstr,"ltscale",rtreal,10.0,0);
}
else
{
acedalert("输入插入点错误.");
}
if(diameter>=)
{
flyg=100;
zxxcg=150;
}
else
{
flyg=60;
zxxcg=90;
}
flk=30;
if(draw_style[0]=='1')
{
//计算主视图中各点坐标
spoint(pt1[0],pt[x],pt[y],pt[z]);
spoint(pt1[1],pt1[0][x]-flk,pt1[0][y]+diameter/2+flyg,pt1[0][z]);
spoint(pt1[2],pt1[1][x]+flk,pt1[1][y],pt1[1][z]);
spoint(pt1[3],pt1[2][x]+flk,pt1[2][y],pt1[2][z]);
spoint(pt1[4],pt1[3][x]-2*flk,pt1[3][y]-diameter-2*flyg,pt1[3][z]);
spoint(pt1[5],pt1[4][x]+flk,pt1[4][y],pt1[4][z]);
spoint(pt1[6],pt1[5][x]+flk,pt1[5][y],pt1[5][z]);
spoint(pt1[7],pt1[6][x],pt1[6][y]+diameter+flyg,pt1[6][z]);
spoint(pt1[8],pt1[7][x],pt1[7][y]-diameter,pt1[7][z]);
spoint(pt1[9],pt1[8][x]+3*diameter/2-flk,pt1[8][y]+diameter+zxxcg,pt1[8][z]);
spoint(pt1[10],pt1[9][x],pt1[9][y]-zxxcg,pt1[9][z]);
spoint(pt1[11],pt1[10][x],pt1[10][y]-diameter/2,pt1[10][z]);
spoint(pt1[12],pt1[11][x]-diameter/2,pt1[11][y]-diameter/2,pt1[11][z]);
spoint(pt1[13],pt1[12][x]+diameter/2,pt1[12][y],pt1[12][z]);
spoint(pt1[14],pt1[13][x]-diameter/2,pt1[13][y]-3*diameter/2+flk,pt1[13][z]);
spoint(pt1[15],pt1[14][x]+diameter/2,pt1[14][y],pt1[14][z]);
spoint(pt1[16],pt1[15][x]-diameter/2-flyg,pt1[15][y],pt1[15][z]);
spoint(pt1[17],pt1[16][x],pt1[16][y]-flk,pt1[16][z]);
spoint(pt1[18],pt1[17][x],pt1[17][y]-flk,pt1[17][z]);
spoint(pt1[19],pt1[18][x]+diameter/2+flyg,pt1[18][y]+2*flk,pt1[18][z]);
spoint(pt1[20],pt1[19][x],pt1[19][y]-flk,pt1[19][z]);
spoint(pt1[21],pt1[20][x],pt1[20][y]-flk,pt1[20][z]);
//绘制中心线
layer_do("s","cen");
acedcommand(rtstr,"line",rt3dpoint,pt1[9],rt3dpoint,pt1[21],rtstr,"",0);
acedcommand(rtstr,"line",rt3dpoint,pt1[0],rt3dpoint,pt1[11],rtstr,"",0);
acdbentlast(ent);
acedssadd(ent,null,ss);
//绘制细实线
layer_do("s","thin");
acedcommand(rtstr,"line",rt3dpoint,pt1[1],rt3dpoint,pt1[4],rtstr,"",0);
acdbentlast(ent);
acedssadd(ent,ss,ss);
acedcommand(rtstr,"line",rt3dpoint,pt1[2],rt3dpoint,pt1[5],rtstr,"",0);
acdbentlast(ent);
acedssadd(ent,ss,ss);
acedcommand(rtstr,"line",rt3dpoint,pt1[3],rt3dpoint,pt1[6],rtstr,"",0);
acdbentlast(ent);
acedssadd(ent,ss,ss);
acedcommand(rtstr,"line",rt3dpoint,pt1[1],rt3dpoint,pt1[3],rtstr,"",0);
acdbentlast(ent);
acedssadd(ent,ss,ss);
acedcommand(rtstr,"line",rt3dpoint,pt1[4],rt3dpoint,pt1[6],rtstr,"",0);
acdbentlast(ent);
acedssadd(ent,ss,ss);
acedcommand(rtstr,"line",rt3dpoint,pt1[16],rt3dpoint,pt1[19],rtstr,"",0);
acdbentlast(ent);
acedssadd(ent,ss,ss);
acedcommand(rtstr,"line",rt3dpoint,pt1[17],rt3dpoint,pt1[20],rtstr,"",0);
acdbentlast(ent);
acedssadd(ent,ss,ss);
acedcommand(rtstr,"line",rt3dpoint,pt1[18],rt3dpoint,pt1[21],rtstr,"",0);
acdbentlast(ent);
acedssadd(ent,ss,ss);
acedcommand(rtstr,"line",rt3dpoint,pt1[16],rt3dpoint,pt1[18],rtstr,"",0);
acdbentlast(ent);
acedssadd(ent,ss,ss);
//绘制粗实线
layer_do("s","fat");
acedcommand(rtstr,"line",rt3dpoint,pt1[7],rt3dpoint,pt1[10],rtstr,"",0);
acdbentlast(ent);
acedssadd(ent,ss,ss);
acedcommand(rtstr,"line",rt3dpoint,pt1[8],rt3dpoint,pt1[12],rtstr,"",0);
acdbentlast(ent);
acedssadd(ent,ss,ss);
acedcommand(rtstr,"line",rt3dpoint,pt1[12],rt3dpoint,pt1[14],rtstr,"",0);
acdbentlast(ent);
acedssadd(ent,ss,ss);
acedcommand(rtstr,"arc",rtstr,"c",rt3dpoint,pt1[13],rt3dpoint,pt1[11],rt3dpoint,pt1[12],0);
acdbentlast(ent);
acedssadd(ent,ss,ss);
//拷贝有半部分
acedcommand(rtstr,"mirror",rtpicks,ss,rtstr,"",rt3dpoint,pt1[9],rt3dpoint,pt1[21],rtstr,"n",0);
}
else if(draw_style[0]=='2')
{
...
}
else
{
...
}
ads_unload_dialog(dcl_id); //清理内存
acedgetvar("diastat",&rb);
if(rb.resval.rint==0) {
acedretvoid(); //直接返回autolisp,不回显nil
return; //cancel结束对话框,返回
}
又试了一下,简直要疯了.
加载奔特力海思德的watercad后 即发生变形,我该怎么办?这该死的程序倒底修改了什么设置?
加载奔特力海思德的watercad后,作程序画一横线,正常。画一竖线也正常。横线竖线一起画就变形了。
c++的真的是无能为力。
c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。
谢谢版主。.net上手快么
比c++开发效率高得多,上手也容易很多。
c#最适合开发autocad,因为它拥有vb容易的特点,却具有vc++的强大功能。
因为在程序中调用cad命令,别人机器上打开对象捕捉的缘故。
有空看看c#,有问题再请教。
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
 


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

高级搜索
显示模式

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

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



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


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