ObjectOverrule.Close

Автор Тема: ObjectOverrule.Close  (Прочитано 13487 раз)

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

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: ObjectOverrule.Close
« Ответ #30 : 05-02-2019, 15:01:05 »
получается что по 5 раз ее перезаписывает
Куда перезаписывает?

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: ObjectOverrule.Close
« Ответ #31 : 05-02-2019, 15:11:15 »
пользователь двигает, я записываю в XData

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: ObjectOverrule.Close
« Ответ #32 : 05-02-2019, 15:15:12 »
В методе Open - получение начальной и конечной точки. В методе Close - снова их получаем и сравниваем с теми значениями, которые получены в Open. Если не совпадают - перезаписываем XData.

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: ObjectOverrule.Close
« Ответ #33 : 05-02-2019, 15:35:02 »
Ну т е это будет происходить 5 раз? в любом случае..

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: ObjectOverrule.Close
« Ответ #34 : 05-02-2019, 15:40:15 »
Проверка - да, перезапись XData - только один раз. И только если положение действительно изменилось.

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: ObjectOverrule.Close
« Ответ #35 : 05-02-2019, 15:51:04 »
Понял, спасибо!

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: ObjectOverrule.Close
« Ответ #36 : 05-02-2019, 16:35:32 »
пользователь двигает, я записываю в XData
Когда пользователь двигает Close может происходить несколько раз даже без твоего кода.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: ObjectOverrule.Close
« Ответ #37 : 06-02-2019, 17:13:03 »
получается так, что в попытке открыть соседние объекты, получаю ошибку, что один из них уже открыт для записи
работаю с OpenCloseTransaction
Open/Close не спасет да?
как быть?

и играет ли роль когда вызывать   base.Close(dbObject)  до своих инструкций или после?

Оффлайн Дмитрий Загорулькин

  • ADN
  • *
  • Сообщений: 2531
  • Карма: 735
Re: ObjectOverrule.Close
« Ответ #38 : 06-02-2019, 17:54:58 »
получается так, что в попытке открыть соседние объекты, получаю ошибку, что один из них уже открыт для записи
работаю с OpenCloseTransaction
Open/Close не спасет да?
как быть?
Значит, придётся открывать соседние объекты в каком-то другом месте (в какой-то другой момент). Метод Close для этого не подходит, получается.
и играет ли роль когда вызывать   base.Close(dbObject)  до своих инструкций или после?
Смотря что эти инструкции делают.

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: ObjectOverrule.Close
« Ответ #39 : 06-02-2019, 18:16:01 »
и играет ли роль когда вызывать   base.Close(dbObject)  до своих инструкций или после?
Только если ты его же пытаешься открыть.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: ObjectOverrule.Close
« Ответ #40 : 07-02-2019, 13:23:33 »
В методе Open - получение начальной и конечной точки. В методе Close - снова их получаем и сравниваем с теми значениями, которые получены в Open. Если не совпадают - перезаписываем XData.

Происходит так, что открываются для записи все трубы, что есть в чертеже (хотя в данный момент я их не трогаю), якобы для модфикации. пересохраняют последовательно точки начальные и конечные!
а потом так же последовательно закрываются и получается что сравниваются точки последнего открытого объекта, соответственно все изменяются т к точки разные
Отфильтровать их у меня не получилось..
что тогда словарь создавать и соотносить точки с конкретным объектом, их и сравнивать? постоянно хранить в памяти словарь со всеми точками? или есть другой выход

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: ObjectOverrule.Close
« Ответ #41 : 07-02-2019, 13:27:20 »
что тогда словарь создавать и соотносить точки с конкретным объектом, их и сравнивать?
Конечно. А как иначе?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: ObjectOverrule.Close
« Ответ #42 : 07-02-2019, 13:28:34 »
я честно говоря рассчитывал что они последовательно откроются закроются и как раз сравню соответствующие точки.. наивно рассчитывал..
понял, спасибо!

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

  • Administrator
  • *****
  • Сообщений: 13829
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: ObjectOverrule.Close
« Ответ #43 : 07-02-2019, 13:31:39 »
наивно рассчитывал..
Конечно наивно рассчитывал. Если используют транзакцию, то условно говоря идут последовательные Open для всех объектов, открываемых в транзакции, а затем последовательные Close при вызове Transaction.Commit().
Да и для обычных Open/Close тоже возможны различные варианты. Например для проверки пересечения IntersectWith требуется, чтобы они оба были открыты. Т.е. два Open, а затем два Close.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • ****
  • Сообщений: 411
  • Карма: 9
Re: ObjectOverrule.Close
« Ответ #44 : 07-02-2019, 13:33:04 »
Логично, понял!
еще одно уточнение словарь такого вида Dictionary<ObjectId,Point3d[]> ?