![]() |
【转帖】[arx]如何闭合正在画的n边形?(给出源程序)
[arx]如何闭合正在画的n边形?(给出源程序)
[arx]如何闭合正在画的n边形?(给出源程序) 附上我的测试程序,里面提供了我尺寸标注 求面积 画表格的程序 #include <aced.h> #include <acedads.h> #include <dbents.h> #include <dbsymtb.h> #include <dbgroup.h> #include <dbapserv.h> #include <acestext.h> #include <migrtion.h> #include <geassign.h> #include <math.h> #include <dbpl.h > ads_point pt1[512]; acgepoint3d pt[512]; int nodenumcount; void area() { int i=0; acedgetpoint(null,"\n请选择起始点:",asdblarray(pt[0])); do { acedgetpoint(asdblarray(pt[i]),"\n拾取下一点:",asdblarray(pt[i+1])); acdbline *pline=new acdbline(pt[i],pt[i+1]); acdbblocktable *pblktable2; acdbhostapplicationservices()->workingdatabase() ->getsymboltable(pblktable2, acdb::kforread); acdbblocktablerecord *pblocktablerecord; pblktable2->getat(acdb_model_space, pblocktablerecord, acdb::kforwrite); pblktable2->close(); acdbobjectid lineid=acdbobjectid::knull; pblocktablerecord->appendacdbentity(lineid, pline); pblocktablerecord->close(); pline->close(); changepoint(pt1[i+1],pt[i+1]);//转换点的类型 changepoint(pt1[0],pt[0]);//转换点的类型 i++; nodenumcount=i;//取得边数 } while((equal_points (pt1[i], pt1[0]))==0);//起始点=终点时结束循环 } int equal_points (const ads_point p1, const ads_point p2) //判断两点是否为同一点 { // 指定误差范围 const ads_real equality_margin = (ads_real)0.0001; int c ; for (c = x ; c <= z ; c++) { if (fabs(p1[c] - p2[c]) > equality_margin) { return (0) ; } } { acdbline *pline=new acdbline(pt[0],pt[nodenumcount]); acdbblocktable *pblktable2; acdbhostapplicationservices()->workingdatabase() ->getsymboltable(pblktable2, acdb::kforread); acdbblocktablerecord *pblocktablerecord; pblktable2->getat(acdb_model_space, pblocktablerecord, acdb::kforwrite); pblktable2->close(); acdbobjectid lineid=acdbobjectid::knull; pblocktablerecord->appendacdbentity(lineid, pline); pblocktablerecord->close(); pline->close(); return (1) ; } } void changepoint(ads_point& ads_pt,acgepoint3d acge_pt) //acgepoint3d转换成ads_point类型 { double x=acge_pt[0]; double y=acge_pt[1]; double z=acge_pt[2]; ads_pt[x]=x; ads_pt[y]=y; ads_pt[z]=z; } 对于如上这段画n边形的程序,有个失误的地方,就是他是以起点=终点来判断n边形画结束的,如果遇到图形线段很多时,如果找不到起点,就会陷入死循环!! 在正常的cad画图中我们可以用“c”命令来闭合当前正在画的图形,请问这在程序中如何实现,希望有高手指点一下! 斑竹能不能给个意见啊 谢谢了 你可以用acdbpolyline来画多边形,然后调用setclosed(adesk::ktrue)实现闭合 哈哈,我又回来了。互相学习,共同提高qq:250623330我的群:1083110 |
所有的时间均为北京时间。 现在的时间是 01:20 AM. |