static int ads_entsinters(void)
{
int es1, es2;
ads_name ent1, ent2;
ads_point pt1, pt2;
AcDbObjectId entId1, entId2;
AcDbEntity* pEnt1 = NULL;
AcDbEntity* pEnt2 = NULL;
AcGePoint3dArray points;
// Выбор первого объекта по запросу
es1 = acedEntSel(L"\nУкажите объект 1: ", ent1, pt1);
if (es1 != RTNORM)
{
acutPrintf(L"\nОбъект не выбран. ");
return (RTNORM);
}
// Вычисление ID для перехода от ads_name к AcDbObjectId
es1 = acdbGetObjectId(entId1, ent1);
if (es1 != Acad::eOk)
{
acutPrintf(L"\nНе получен Id 1 ");
return (RTNORM);
}
// Вычисление указателя на AcDbEntity
es1 = acdbOpenAcDbEntity(pEnt1, entId1, AcDb::kForRead);
if (es1 != Acad::eOk)
{
acutPrintf(L"\nНе открыт объект 1 ");
return (RTNORM);
}
// Подсветка первого объекта
pEnt1->highlight();
//<<<<Тут ставим точку, чтобы в локальных переменных увидеть значение pEnt1
// Выбор второго объекта по запросу
label_select2:
es2 = acedEntSel(L"\nУкажите объект 2: ", ent2, pt2);
if (es2 != RTNORM)
{
pEnt1->unhighlight(); // сброс подсветки
pEnt1->close(); // закроем объект 1
acutPrintf(L"\nОбъект не выбран. ");
return (RTNORM);
}
// Вычисление ID для перехода от ads_name к AcDbObjectId
es2 = acdbGetObjectId(entId2, ent2);
if (es2 != Acad::eOk)
{
pEnt1->unhighlight();
pEnt1->close(); // закроем объект 1
acutPrintf(L"\nНе получен Id 2 ");
return (RTNORM);
}
// Проверка совпадения объектов
if (entId2 == entId1)
{
acutPrintf(L" Повторите выбор: ");
goto label_select2;
}
// Вычисление указателя на AcDbEntity
es2 = acdbOpenAcDbEntity(pEnt2, entId2, AcDb::kForRead);
if (es2 != Acad::eOk)
{
pEnt1->unhighlight();
pEnt1->close(); // закроем объект 1
acutPrintf(L"\nНе открыт объект 2 ");
return (RTNORM);
}
// Подсветка второго объекта
pEnt2->highlight();
// Распечатка выбранных объектов
acutPrintf(L"\n"); // переход на новую строку
pEnt1->list();
acutPrintf(L"\n");
pEnt2->list();
// Вычисление точек пересечения для объектов
es1 = pEnt2->intersectWith(pEnt1, AcDb::kOnBothOperands, points);
int len;
if ( (es1 != Acad::eOk) || ((len = points.length() ) == 0) )
acutPrintf(L"\nОбъекты не пересекаются. ");
else
{
acutPrintf(L"\nТочки пересечения:");
for (int i=0; i<len; ++i)
{
acutPrintf(L"\n %d: %.6f %.6f %.6f",
i+1, points[i].x, points[i].y, points[i].z);
}
}
// Сброс подсветки
pEnt1->unhighlight();
pEnt2->unhighlight();
// Закрытие объектов с освобождением памяти
pEnt1->close();
pEnt2->close();
// TODO: Replace the following line by your returned value if any
acedRetVoid () ;
return (RTNORM) ;
}