Вопрос по привязка на пересечение

Автор Тема: Вопрос по привязка на пересечение  (Прочитано 21821 раз)

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

Тема содержит сообщение с Решением. Нажмите здесь чтобы посмотреть его.

Оффлайн ЭдАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
У меня создан объект из трех примитивов: на базе полилинии AcDbPolyline - основной объект, и два объекта на базе штриховки и отрезка - в виде массива указателей в составе полилинии.
Но на отрезке не работают привязки на пересечение (остальные привязки работают).
Как добиться чтобы привязка на пересечение у отрезка тоже работала, желательно унаследованным способом от отрезка AcDbLine?



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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вопрос по привязка на пересечение
« Ответ #1 : 15-09-2015, 11:21:43 »
Думаешь эта картинка сильно поможет в понимании того почему у тебя не работает привязка? ;) Нужен весь проект.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ЭдАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вопрос по привязка на пересечение
« Ответ #2 : 15-09-2015, 11:25:41 »
Вот действующий проект. Запускается командой MyCommand1. (VS 2008).

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вопрос по привязка на пересечение
« Ответ #3 : 15-09-2015, 11:57:04 »
В методах AuPolyline::subGetOsnapPoints ты должен вызвать соответствующие методы subGetOsnapPoints для входящих в него примитивов.
В коде я этого не увидел. И если мне не изменяет память необходимо также переопределить метод subIntersectWith чтобы он воспринимал не только основную полилинию, но и все вложенные примитивы.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Отмечено как Решение Эд 15-09-2015, 21:23:25

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вопрос по привязка на пересечение
« Ответ #4 : 15-09-2015, 12:09:11 »
По поводу subIntersectWith цитата из документации:
Цитировать
Note: The intersection object snap mode is processed differently from getOsnapPoints(). It uses AcDbEntity::intersectWith(), not getOsnapPoints().
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ЭдАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вопрос по привязка на пересечение
« Ответ #5 : 15-09-2015, 12:28:33 »
SubGetOsnapPoint я переопределил для всех объектов, вы просто не заметили:
   
Код - C++ [Выбрать]
  1. Acad::ErrorStatus er;
  2.         objArray::const_iterator it;
  3.         for(it=m_Array.begin();it!=m_Array.end();it++)
  4.         {
  5.                 AcRxObject* intPtr=0;
  6.                 intPtr=(*it).second;
  7.                 if (intPtr)
  8.                 {
  9.                         er=dynamic_cast<smejny*>(intPtr)->myGetOsnap(osnapMode,gsSelectionMark,pickPoint,
  10.                                 lastPoint,viewXform,snapPoints,geomIds);
  11.                         if (er!=Acad::eOk)
  12.                                 return er;
  13.                 }

и все привязки с отрезком у меня работают (кроме пересечения).

Относительно subIntersectWith, спасибо, попробую. Должен извинится, что с английского плохо перевожу.
« Последнее редактирование: 15-09-2015, 14:04:13 от Эд »

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вопрос по привязка на пересечение
« Ответ #6 : 15-09-2015, 13:29:30 »
SubGetOsnapPoint я переопределил для всех объектов, вы просто не заметили:
Причина в том, что ты такого накрутил у себя в коде...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ЭдАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вопрос по привязка на пересечение
« Ответ #7 : 15-09-2015, 14:22:25 »
у штриховки и линии один общий базовый класс AcDbEntyti где методы привязки защищены протектид. Хотя штриховку можно исключить из привязки и для других объектов использовать AcDbCurve. Ну и кроме того потом хочу добавить возможности к вложенным объектам, поэтому применяю производные от стандартных классов.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вопрос по привязка на пересечение
« Ответ #8 : 15-09-2015, 14:42:29 »
у штриховки и линии один общий базовый класс AcDbEntyti где методы привязки защищены протектид.
??? Вообще-то у всех примитивов базовый класс AcDbEntity. Методы subGetOsnapPoints действительно защищенные, т.е. их можно только переопределять в производном классе, но нельзя напрямую вызывать не внутри класса или производных классов. А вызывать можно и нужно не subGetOsnapPoints, а getOsnapPoints - это публичные методы, которые в конечном итоге и вызывают переопределённые методы subGetOsnapPoints.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вопрос по привязка на пересечение
« Ответ #9 : 15-09-2015, 14:43:53 »
Ну и кроме того потом хочу добавить возможности к вложенным объектам, поэтому применяю производные от стандартных классов.
Это какие-такие возможности?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ЭдАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вопрос по привязка на пересечение
« Ответ #10 : 15-09-2015, 14:58:39 »
хочу программу написать для расчета материалов для витражей. В витражах есть элементы каркаса с вложенными деталями, размеры которых нужно точно соблюдать. При проектировании витражей приходится делать огромные спецификации.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вопрос по привязка на пересечение
« Ответ #11 : 15-09-2015, 15:05:23 »
хочу программу написать для расчета материалов для витражей. В витражах есть элементы каркаса с вложенными деталями, размеры которых нужно точно соблюдать. При проектировании витражей приходится делать огромные спецификации.
Мне не стало яснее какие именно данные ты собираешься использовать. В любом случае общий класс, производным от которого ты делаешь свои Custom Entities, не нужен. Можно прекрасно обойтись и без него. IMHO у тебя пока не проработана структура классов, которые ты будешь использовать. Да и вообще не очень понятно зачем тебе Custom Entity для этой задачи.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн ЭдАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вопрос по привязка на пересечение
« Ответ #12 : 15-09-2015, 15:21:25 »
этот пример опытный. только для проверки моих и ObjArx возможностей. На самом деле мне например нужен будет ригель или стойка с одним несущим стержнем и несколькими декоративными или конструктивными элементами. Каждый элемент, включая несущий элемент, должен обладать определенными свойствами, которые можно было бы менять пользователю (свойства - габаритные и атрибуты типа текста или чисел). Витраж состоит из множества ригелей и стоек. Все это нужно считать и вывести в спецификации для дальнейшего заказа материалов или для задания в цех. Кроме того будут еще заполнения витражей (например стекла). Такие программы есть, но не в автокаде. Вернее в автокаде такие программы 2-3 штуки в мире, не совсем удобные и непродуманные.

Оффлайн ЭдАвтор темы

  • ADN OPEN
  • **
  • Сообщений: 87
  • Карма: 0
Re: Вопрос по привязка на пересечение
« Ответ #13 : 16-09-2015, 14:35:18 »
я дописал код, тупо отправил выполнение в функции subIntersectWith вложенных объектов сохраняя все аргументы. Теперь привязка работает, но очень плохо. Возможно надо GiMarkers как то менять.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: Вопрос по привязка на пересечение
« Ответ #14 : 16-09-2015, 16:36:22 »
я дописал код, тупо отправил выполнение в функции subIntersectWith вложенных объектов сохраняя все аргументы. Теперь привязка работает, но очень плохо. Возможно надо GiMarkers как то менять.


Вроде всё работает. Смотри исправленный пример.
« Последнее редактирование: 16-09-2015, 18:03:05 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение