Сообщество программистов Autodesk в СНГ

ADN Club => ObjectARX => Тема начата: Николай Горлов от 14-11-2014, 11:43:09

Название: subGetOsnapPoints
Отправлено: Николай Горлов от 14-11-2014, 11:43:09
как-то совсем запутался.
есть свой объект, наследник от AcDbCurve. переопределил кучу методов, но видать не достаточное количество :):):)
вопрос в следующем, что заставит отработаться функцию subGetOsnapPoints. Сама функция переопределена, ничего военного в ней  нет, вот код (m_pCurve - это приватная переменная класса, к которой собственно и нужно привязываться):
Код - C++ [Выбрать]
  1. Acad::ErrorStatus CAcDbCurveText::subGetOsnapPoints (AcDb::OsnapMode osnapMode,int gsSelectionMark,const AcGePoint3d &pickPoint,const AcGePoint3d &lastPoint,const AcGeMatrix3d &viewXform,AcGePoint3dArray &snapPoints,AcDbIntArray &geomIds) const
  2. {
  3.         assertReadEnabled();
  4.         Acad::ErrorStatus es = Acad::eAmbiguousInput;
  5.         if (m_pCurve != NULL)
  6.                 es = m_pCurve->getOsnapPoints(osnapMode, gsSelectionMark, pickPoint, lastPoint, viewXform, snapPoints, geomIds);
  7.  
  8.         //acutPrintf(_T("\nsubGetOsnapPoints: %s"),acadErrorStatusText(es));
  9.         return es;
  10. }
  11.  
  12. Acad::ErrorStatus CAcDbCurveText::subGetOsnapPoints (AcDb::OsnapMode osnapMode,int gsSelectionMark,const AcGePoint3d &pickPoint,const AcGePoint3d &lastPoint,const AcGeMatrix3d &viewXform,AcGePoint3dArray &snapPoints,AcDbIntArray &geomIds,const AcGeMatrix3d &insertionMat) const
  13. {
  14.         assertReadEnabled();
  15.         Acad::ErrorStatus es = Acad::eAmbiguousInput;
  16.         if (m_pCurve != NULL)
  17.                 es = m_pCurve->getOsnapPoints(osnapMode, gsSelectionMark, pickPoint, lastPoint, viewXform, snapPoints, geomIds, insertionMat);
  18.  
  19.         //acutPrintf(_T("\nsubGetOsnapPoints: %s"),acadErrorStatusText(es));
  20.         return (es);
  21. }
  22.  

но видать чего-то не хватает и в ЭТИ функции дебагер вообще не заходит, ну и собственно получается, что никаких привязок у объекта нет :(
Название: Re: subGetOsnapPoints
Отправлено: Александр Ривилис от 14-11-2014, 11:49:44
Ну как минимум замени int gsSelectionMark на Adesk::GsMarker gsSelectionMark.
Название: Re: subGetOsnapPoints
Отправлено: Николай Горлов от 14-11-2014, 11:52:30
точно, спасибо Aлександр.
твою  ж ... ну вот как так можно. это практически рабочий пример для autocad 2008 был. переносил в новый созданный для 2013. и вот такая шляпа. параметры поменяли, а оно даже не выругалось, что я пытаюсь перегрузить то, чего не существует в действительности. теперь все ок.
Название: Re: subGetOsnapPoints
Отправлено: Александр Ривилис от 14-11-2014, 12:00:45
Это известные грабли, на которые я тоже неоднократно наступал. Особенно с учетом того, что ObjectARX Wizard подставляет int вместо Adesk::GsMarker при создании Custom Entity и приходится каждый раз это править вручную. Я даже когда-то отсылал этот баг Cyrille Fauvel (он автор ObjectARX Wizard), но не помню было ли это исправлено.
Название: Re: subGetOsnapPoints
Отправлено: Александр Ривилис от 14-11-2014, 12:11:38
Посмотрел в ObjectARX Wizard 2015 - исправлено, а в ObjectARX Wizard 2012 - нет. Вообще-то и в ней это можно исправить в файлах:
C:\Program Files (x86)\Autodesk\ObjectARX Wizards for AutoCAD 2012\ArxWizCustomObject\Templates\1033\object.cpp
C:\Program Files (x86)\Autodesk\ObjectARX Wizards for AutoCAD 2012\ArxWizCustomObject\Templates\1033\object.h
заменить int gsSelectionMark на Adesk::GsMarker gsSelectionMark
Название: Re: subGetOsnapPoints
Отправлено: alex-63 от 05-07-2022, 13:44:35
День добрый. Может подскажите почему не срабатывает subIntersectWith.  (пример из 2008 в 2014).
Код - C++ [Выбрать]
  1.  Acad::ErrorStatus AsdkCurveText::subIntersectWith(const AcDbEntity* ent,AcDb::Intersect   intType,
  2.                                                                                                 const AcGePlane&  projPlane,AcGePoint3dArray& points,int  thisGsMarker,
  3.                                                                                                 int   otherGsMarker) const
  4. {assertReadEnabled();  
  5. assert(m_pCurve);
  6.  Acad::ErrorStatus es = Acad::eOk;
  7.  if (ent == NULL) es= Acad::eNullEntityPointer;
  8.  else
  9.          es=m_pCurve->intersectWith(ent, intType, projPlane, points, thisGsMarker, otherGsMarker);
  10.         acutPrintf(_T("\nsubIntersectWith_1: %s"),acadErrorStatusText(es));
  11.  return es;}
  12.  
И хотелось бы узнать  дебагер  хватает  ЭТИ функции  у Вас ?
Название: Re: subGetOsnapPoints
Отправлено: Александр Ривилис от 05-07-2022, 15:36:30
alex-63,
Прочти всю тему от начала и до конца.
Название: Re: subGetOsnapPoints
Отправлено: alex-63 от 05-07-2022, 16:45:50
Я подозревал что int на  Adesk::GsMarker  поменять надо. Пример Polysamp смутил :-\
Код - C++ [Выбрать]
  1. Acad::ErrorStatus
  2. AsdkPoly::subIntersectWith(
  3.     const AcDbEntity* ent,
  4.     AcDb::Intersect intType,
  5.     AcGePoint3dArray& points,
  6.     int /*thisGsMarker*/,
  7.     int /*otherGsMarker*/) const
Спасибо
Название: Re: subGetOsnapPoints
Отправлено: Александр Ривилис от 05-07-2022, 16:47:34
alex-63,
Вполне возможно, что забыли исправить.
Название: Re: subGetOsnapPoints
Отправлено: alex-63 от 15-12-2022, 11:08:30
Пример hilight.cpp то же содержит ошибку. Вместо  marker = pTemp->resval.rint;    
надо  marker = pTemp->resval.mnInt64.
ErrorStatus getObjectAndGsMarker(AcDbObjectId& objId, /* int */  Adesk::GsMarker & marker).
Хотя с solid ом работает корректно а прикрутить его к примеру polysamp сразу не получается :(
Может у кого уже есть примеры для 2014 без ошибок?
Тяжко изучать custom object in arx когда столько ошибок в примерах. :-[