subGetOsnapPoints

Автор Тема: subGetOsnapPoints  (Прочитано 8047 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Николай ГорловАвтор темы

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
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.  

но видать чего-то не хватает и в ЭТИ функции дебагер вообще не заходит, ну и собственно получается, что никаких привязок у объекта нет :(
« Последнее редактирование: 14-11-2014, 11:45:24 от Александр Ривилис »

Отмечено как Решение Николай Горлов 14-11-2014, 11:57:16

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: subGetOsnapPoints
« Ответ #1 : 14-11-2014, 11:49:44 »
Ну как минимум замени int gsSelectionMark на Adesk::GsMarker gsSelectionMark.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Николай ГорловАвтор темы

  • ADN
  • *
  • Сообщений: 238
  • Карма: 34
Re: subGetOsnapPoints
« Ответ #2 : 14-11-2014, 11:52:30 »
точно, спасибо Aлександр.
твою  ж ... ну вот как так можно. это практически рабочий пример для autocad 2008 был. переносил в новый созданный для 2013. и вот такая шляпа. параметры поменяли, а оно даже не выругалось, что я пытаюсь перегрузить то, чего не существует в действительности. теперь все ок.

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: subGetOsnapPoints
« Ответ #3 : 14-11-2014, 12:00:45 »
Это известные грабли, на которые я тоже неоднократно наступал. Особенно с учетом того, что ObjectARX Wizard подставляет int вместо Adesk::GsMarker при создании Custom Entity и приходится каждый раз это править вручную. Я даже когда-то отсылал этот баг Cyrille Fauvel (он автор ObjectARX Wizard), но не помню было ли это исправлено.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: subGetOsnapPoints
« Ответ #4 : 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
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн alex-63

  • ADN OPEN
  • Сообщений: 19
  • Карма: 0
  • Skype: alx_14521963
Re: subGetOsnapPoints
« Ответ #5 : 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.  
И хотелось бы узнать  дебагер  хватает  ЭТИ функции  у Вас ?

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: subGetOsnapPoints
« Ответ #6 : 05-07-2022, 15:36:30 »
alex-63,
Прочти всю тему от начала и до конца.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн alex-63

  • ADN OPEN
  • Сообщений: 19
  • Карма: 0
  • Skype: alx_14521963
Re: subGetOsnapPoints
« Ответ #7 : 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
Спасибо

Оффлайн Александр Ривилис

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: subGetOsnapPoints
« Ответ #8 : 05-07-2022, 16:47:34 »
alex-63,
Вполне возможно, что забыли исправить.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн alex-63

  • ADN OPEN
  • Сообщений: 19
  • Карма: 0
  • Skype: alx_14521963
Re: subGetOsnapPoints
« Ответ #9 : 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 когда столько ошибок в примерах. :-[
« Последнее редактирование: 15-12-2022, 13:33:24 от alex-63 »