![]() |
【转帖】半年都没有解决的难题!
半年都没有解决的难题!
半年都没有解决的难题! 请教(急):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#,有问题再请教。 |
所有的时间均为北京时间。 现在的时间是 08:48 AM. |