How to avoid AutoCAD to crash?

How to avoid AutoCAD to crash?

D_D_K
Advocate Advocate
1,453 Views
4 Replies
Message 1 of 5

How to avoid AutoCAD to crash?

D_D_K
Advocate
Advocate

Hi,

I used this code on autocad2021 but autocad was crashing at the end of the code.
Looks like the problem is with Accarray.
how can i fix this? despite having met many times, but I still haven't really figured out!

 

0 Likes
Accepted solutions (1)
1,454 Views
4 Replies
Replies (4)
Message 2 of 5

Alexander.Rivilis
Mentor
Mentor
Accepted solution

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
Expert Elite Member

Message 3 of 5

D_D_K
Advocate
Advocate

Thanks expert for the both answers, my problem is solved! 

0 Likes
Message 4 of 5

1127204185
Advocate
Advocate

How can we just shift outward

0 Likes
Message 5 of 5

Alexander.Rivilis
Mentor
Mentor

@1127204185 wrote:

How can we just shift outward


Is it a question? You can calculate area of both polylines. Biggest area - outward shifted polyline.

Відповідь корисна? Клікніть на "ВПОДОБАЙКУ" цім повідомленням! | 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
Expert Elite Member

0 Likes