chpmould 发表于 2011-6-18 16:57:00

取得选择集包围盒

这是我在网上下载的一个[取得选择集包围盒]子程序,调试不能通过,请高手帮看看是什么原因
BOOL GetSSExtents(ads_name ss, ads_point &maxpt, ads_point &minpt)
{
long len;
int ret=ads_sslength(ss,&len);
if(ret!=RTNORM||lengetGeomExtents(extent);
pt1=extent.maxPoint();
pt2=extent.minPoint();
pEnt->close();
//主要是这里调试不能通过,请帮看看是什么原因
for(int i=0;igetGeomExtents(extent);
if(pt1extent.minPoint()||pt2>extent.minPoint())
   pt2=extent.minPoint();
//主要是这里调试不能通过,请帮看看是什么原因
pEnt->close();
}
maxpt=pt1;
maxpt=pt1;
maxpt=pt1;
minpt=pt2;
minpt=pt2;
minpt=pt2;
return TRUE;
}

highflybird 发表于 2011-6-18 22:40:00

楼主的代码都抄的错误百出。
这里给出修改后的。以后说不定也可以用的着。

Acad::ErrorStatus GetSSExtents(ads_name ss, ads_point &maxpt, ads_point &minpt)
{
long len;
int ret=ads_sslength(ss,&len);
if(ret!=RTNORM || lengetGeomExtents(extent) !=Acad::eOk)
{
   continue;
}

pt1=extent.maxPoint();
pt2=extent.minPoint();
pEnt->close();
if (maxpt==LDBL_MAX)
{
   maxpt=pt1.x;
   maxpt=pt1.y;
      maxpt=pt1.z;
   minpt=pt2.x;
   minpt=pt2.y;
   minpt=pt2.z;
}
//下面的段应该写成函数的,太啰嗦了。
if (pt1.x > maxpt) maxpt=pt1.x;
if (pt1.y > maxpt) maxpt=pt1.y;
if (pt1.z > maxpt) maxpt=pt1.z;
if (pt2.x < minpt) minpt=pt2.x;
if (pt2.y < minpt) minpt=pt2.y;
if (pt2.z < minpt) minpt=pt2.z;
}
return Acad::eOk;
}

highflybird 发表于 2011-6-18 22:42:00


回复
简单的测试代码:
               ads_name sel;
                int ret=acedSSGet(NULL,NULL,NULL,NULL,sel);
                if( ret!=RTNORM)
                {
                        acedSSFree(sel);
                        return;
                }
                ads_point maxpt,minpt;
                if (GetSSExtents(sel,maxpt,minpt) != Acad::eOk)
                {
                        acutPrintf(_T("\n获取失败,请检查选择集!"));
                        return;
                }
                acedGrDraw(minpt,maxpt,1,1);

chpmould 发表于 2011-6-19 09:11:00


非常感谢你的指导和热心,我再去试试
页: [1]
查看完整版本: 取得选择集包围盒