![]() |
【转帖】[arx]arx计算选取的直线总长度
[arx]arx计算选取的直线总长度
[arx]arx计算选取的直线总长度 本人用arx编写了一个计算所选取直线总长度的程序,感觉挺不方便,大家给点意见。 void getsellens() { ads_name ent1,ssents; long i(0),n; char* entname; struct resbuf *rb,*rbtmp; double flength(0); acgepoint3d *pt1,*pt2; acedssget(null,null,null,null,ssents); acedsslength(ssents,&n); for (;i<n;i++) { acedssname(ssents,i,ent1); rb=acdbentget(ent1); for (rbtmp=rb;rbtmp!=null;rbtmp=rbtmp->rbnext) { if (rbtmp->restype==0) { entname=rbtmp->resval.rstring; continue; } if (rbtmp->restype==10) pt1=new acgepoint3d(rbtmp->resval.rpoint[x],rbtmp->resval.rpoint[y], rbtmp->resval.rpoint[z]); if (rbtmp->restype==11) pt2=new acgepoint3d(rbtmp->resval.rpoint[x],rbtmp->resval.rpoint[y], rbtmp->resval.rpoint[z]); } if (!strcmp(entname,"line")) { flength+=getlinelen(pt1,pt2); } } acutprintf("总长度 %f",flength); // return 0; } double getlinelen(acgepoint3d *pt1,acgepoint3d *pt2) { double len=sqrt(pow(pt1->x-pt2->x,2)+pow(pt1->y-pt2->y,2)+pow(pt1->z-pt2->z,2)); return len; } 有人用vlisp编写了计算弧线和直线总长的程序,很简单。 (defun c:calen (/ curve tlen ss n sumlen) (vl-load-com) (setq sumlen 0) (setq ss (ssget '((0 . "circle,ellipse,line,*polyline,spline,arc")))) (setq n 0) (repeat (sslength ss) (setq curve (vlax-ename->vla-object (ssname ss n))) (setq tlen (vlax-curve-getdistatparam curve (vlax-curve-getendparam curve) ) ) (setq sumlen (+ sumlen tlen)) (setq n (1+ n)) ) (print (strcat "总长度: " (rtos sumlen 2 5))) (princ) ) |
所有的时间均为北京时间。 现在的时间是 02:11 AM. |