
static void zffObjectARX_MyCommand17(void)
	{
		ads_name ss;
		AcDbVoidPtrArray ents;
		if (acedSSGet(NULL,NULL,NULL,NULL,ss)!=RTNORM)
		{
			acedAlert(_T("选择实体失败!"));
			return;
		}
		AcGePoint3dArray pts;
		long num;
		acedSSLength(ss,&num);
		if (num<3)
		{
			acedAlert(_T("无需均分!"));
			return;
		}
		for (int i=0;i<num;i++)
		{
			AcDbObjectId entId;
			AcDbEntity* pEnt=NULL;
			ads_name name;
			AcGePoint3d pt;
			acedSSName(ss,i,name);
			acdbGetObjectId(entId,name);
			if (acdbOpenObject(pEnt,entId,AcDb::kForWrite)!=Acad::eOk)
			{
				acedAlert(_T("部分实体打开失败,无法均分!"));
				pEnt->close();
				return;
			}
			if (pEnt->isKindOf(AcDbLine::desc()))
			{
				AcDbLine* pLine=AcDbLine::cast(pEnt);
				pLine->getClosestPointTo(AcGePoint3d::kOrigin,pt,Adesk::kTrue);
				pts.append(pt);
				ents.append(static_cast<void*>(pLine));
			}
			else
			{
				pEnt->close();
			}
		}
		acedSSFree(ss);
		AcGePoint3d pt1,pt2;
		double dist=0,dist1;
		long len=pts.length();
		for (int i=0;i<len;i++)
		{
			for (int j=i+1;j<len;j++)
			{
				dist1=pts[i].distanceTo(pts[j]);
				if (dist1>dist)
				{
					dist=dist1;
					pt1=pts[i];
					pt2=pts[j];
				}
			}
		}
		pts.remove(pt1);
		pts.remove(pt2);
		int m,n=0;
		for (int j=0;j<pts.length();)
		{
			dist=pt1.distanceTo(pt2);
			for (int i=0;i<pts.length();i++)
			{
				dist1=pts[i].distanceTo(pt1);
				if (dist1<dist)
				{
					dist=dist1;
					m=i;
				}
			}
			AcGeVector3d vec=pt1-pts[m]-(pt1-pt2)*(n+1)/(len-1);
			AcGeMatrix3d max;
			max.setToTranslation(vec);
			for (int i=0;i<ents.length();i++)
			{
				AcDbLine* pLine=static_cast<AcDbLine*>(ents[i]);
				AcGePoint3d ptclose;
				pLine->getClosestPointTo(pts[m],ptclose,Adesk::kTrue);
				if (pts[m].distanceTo(ptclose)<0.001)
				{
					pLine->transformBy(max);
				}
			}
			pts.remove(pts[m]);
			n++;
		}
		for (int i=0;i<ents.length();i++)
		{
			AcDbLine* pLine1=static_cast<AcDbLine*>(ents[i]);
			pLine1->close();
		}
	}
                    
                
				 
                
            
        
浙公网安备 33010602011771号