Try this code instead:
//-----------------------------------------------------------------------------
//----- acrxEntryPoint.cpp
//-----------------------------------------------------------------------------
#include "StdAfx.h"
#include "resource.h"
//-----------------------------------------------------------------------------
#define szRDS _RXST("")
//-----------------------------------------------------------------------------
//----- ObjectARX EntryPoint
class COffsetPolylineApp : public AcRxArxApp {
public:
COffsetPolylineApp() : AcRxArxApp() {}
virtual AcRx::AppRetCode On_kInitAppMsg(void* pkt) {
AcRx::AppRetCode retCode = AcRxArxApp::On_kInitAppMsg(pkt);
return (retCode);
}
virtual AcRx::AppRetCode On_kUnloadAppMsg(void* pkt) {
AcRx::AppRetCode retCode = AcRxArxApp::On_kUnloadAppMsg(pkt);
return (retCode);
}
virtual void RegisterServerComponents() { }
static void RivilisOffsetPoly()
{
ads_point p; ads_name en;
static double distOffset = 1.0;
if (acedEntSel(L"\nSelect Polyline: ", en, p) != RTNORM)
return;
AcDbObjectId idPoly;
acdbGetObjectId(idPoly, en);
if (!idPoly.objectClass()->isDerivedFrom(AcDbPolyline::desc()))
{
acutPrintf(L"\nIt is not a AcDbPolyline!");
return;
}
AcGeMatrix3d mat; acedGetCurrentUCS(mat);
AcDbObjectPointer<AcDbPolyline> pPoly(idPoly, AcDb::kForRead);
AcGePoint3d pOnPline;
pPoly->getClosestPointTo(asPnt3d(p).transformBy(mat), pOnPline);
pOnPline.transformBy(mat.inverse());
if (acedGetDist(asDblArray(pOnPline), L"\nOffset distance: ", &distOffset) == RTCAN)
return;
AcDbBlockTableRecordPointer pBtr(pPoly->ownerId(), AcDb::kForWrite);
AcDbVoidPtrArray pArr;
if (pPoly->getOffsetCurves(distOffset, pArr) == Acad::eOk)
{
for (int i = 0; i < pArr.length(); i++)
{
pBtr->appendAcDbEntity(reinterpret_cast<AcDbEntity *>(pArr[i]));
reinterpret_cast<AcDbEntity*>(pArr[i])->close();
}
}
pArr.setLogicalLength(0);
if (pPoly->getOffsetCurves(-distOffset, pArr) == Acad::eOk)
{
for (int i = 0; i < pArr.length(); i++)
{
pBtr->appendAcDbEntity(reinterpret_cast<AcDbEntity*>(pArr[i]));
reinterpret_cast<AcDbEntity*>(pArr[i])->close();
}
}
}
};
//-----------------------------------------------------------------------------
IMPLEMENT_ARX_ENTRYPOINT(COffsetPolylineApp)
ACED_ARXCOMMAND_ENTRY_AUTO(COffsetPolylineApp, Rivilis, OffsetPoly, OffsetPoly, ACRX_CMD_MODAL, NULL)
Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | Do you find the posts helpful? "LIKE" these posts!
Находите сообщения полезными? Поставьте "НРАВИТСЯ" этим сообщениям!
На ваше запитання відповіли? Натисніть кнопку "ПРИЙНЯТИ РІШЕННЯ" | Have your question been answered successfully? Click "ACCEPT SOLUTION" button.
На ваш вопрос успешно ответили? Нажмите кнопку "УТВЕРДИТЬ РЕШЕНИЕ"
Alexander Rivilis / Александр Ривилис / Олександр Рівіліс
Programmer & Teacher & Helper / Программист - Учитель - Помощник / Програміст - вчитель - помічник
Facebook | Twitter | LinkedIn
