Почитать количество дубликатов объекта в документе

Автор Тема: Почитать количество дубликатов объекта в документе  (Прочитано 12295 раз)

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

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

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

  • ADN OPEN
  • Сообщений: 20
  • Карма: 0
Доброго времени суток, дорогие друзья!

У меня стоит задача, почитать количество каждого объекта в документе.
То есть, если объект скопировали и вставили много раз, то мне нужно узнать это количество.

Просто получить список объектов - я получил. Но вот определить, какие из них являются дублирующими - я не знаю как.
Я могу сравнить некоторые параметры, но нет уверенности, что этого достаточно (вдруг похожий объект тоже попадет под это сравнение, у которого будут эти параметры совпадать, у какие-то нет.)

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
То есть, если объект скопировали и вставили много раз, то мне нужно узнать это количество.
Во-первых, о каких объектах (примитивах AutoCAD) идёт речь?
Во-вторых, если примитив скопировали, а потом поменяли ему цвет (или слой, или тип линии), то это дубликаты или нет?
В-третьих,...
Короче говоря как минимум следует определиться с постановкой задачи. Пока же это чистая абстракция, не имеющая однозначного решения.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Можно в принципе отслеживать операции копирования, и тогда можно точно знать дубликаты это или нет. Но! А что делать, если один из дубликатов потом изменили? И какие изменения считать важными, а какие нет?
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
ИМХО,  очень похоже на очередную попытку определить производительность чертежника на основе подсчета количества линий...

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
ИМХО,  очень похоже на очередную попытку определить производительность чертежника на основе подсчета количества линий...
Думаю, что скорее другое - попытка получения спецификации объектов. Но тут можно долго гадать...
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 20
  • Карма: 0
Да, мне нужно вывести список типа: деревьев - 10 штук. Только вместо названий нужно выводить картинку.
Я подумал, что можно как-то сравнить объекты по их всем параметрам, чтобы понять, идентичны ли они.
На крайний случай я буду тупо по наименованию сравнивать. Но опять же, не буду застрахован от того, что объект скопировали и видоизменили его. В этом случае сравнение по наименованиям не будет работать.
Можете что-нибудь подсказать? Это реально, сравнить два объекта по всем параметрам? И даст ли это сравнения мне ответ - идентичны ли они (визуально на чертеже)?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
На крайний случай я буду тупо по наименованию сравнивать
По какому названию?
Это реально, сравнить два объекта по всем параметрам?
Ну в принципе да.
И даст ли это сравнения мне ответ - идентичны ли они (визуально на чертеже)?
Да. Но при этом визуально идентичные объекты не обязательно имеют одинаковые свойства.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 20
  • Карма: 0


Свойство "Имя". У дублированных объектов это поля одинаковое. Я говорил о сравнении этого поля. Если с остальным сравнением не получится, то наверно я хотя бы по одному этому полю буду сравнивать. Это не защитит от "изменения" объекта после дублирования, но все же.

Так, ну в итоге можно как-то так сравнить объекты на чертеже программно, чтобы я точно узнал, являются ли они идентичными (то есть скопировали один объект и вставили кучу раз - получилось много дубликатов)? Мне важна визуальная идентичность. Если да, то подскажите как, пожалуйста. Лучше всего конечно какой-нибудь примерчик. :)

Отмечено как Решение alexeyOMG 24-07-2016, 18:53:58

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Свойство "Имя". У дублированных объектов это поля одинаковое.
Так бы сразу и сказал, что речь идёт о вставке блока (BlockReference). Тогда всё намного проще.
Это не защитит от "изменения" объекта после дублирования, но все же.
Если блок не динамический, то после вставки его изменить нельзя. Можно конечно поменять его положение, масштаб, угол поворота. Но форма от этого не изменится и думаю, что ты можешь их считать одинаковыми. Если блок динамический, то меняя параметр Видимость (Visibility) можно поменять его внешний вид (например, дерево с листьями или дерево без листьев). Если считать, что это разные деревья (тут ты должен сам определиться), то тогда можно сравнивать имя блока и состояние видимости. Если эти два параметра одинаковы, то это одно и тоже дерево.

P.S.: Похоже нужно начать с изучения AutoCAD...
P.S.: Указанный на картинке блок был вставлен через буфер обмена - об этом говорит его имя и он не динамический.
« Последнее редактирование: 24-07-2016, 00:26:57 от Александр Ривилис »
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Владимир Шу

  • ADN Club
  • *****
  • Сообщений: 624
  • Карма: 158
    • ПГСу Бложик
Похоже нужно начать с изучения AutoCAD...
Ага и окажется, что для решения поставленной задачи, программирование то и не нужно.

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Ага и окажется, что для решения поставленной задачи, программирование то и не нужно.
Намекаешь на DataExtraction? Тут скорее всего нужно получить некую ведомость условных знаков, где вместо имени нужно вставить соответствующий блок.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 20
  • Карма: 0
Ну на чертежах есть не только блоки (которые я могу по "имени" сравнить).
Но например полилинии, круги как? Их тоже куча на графике. И их тоже надо почитать. И они тоже могут быть дублированы. Их как сравнивать на идентичность? По каким параметрам?

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

  • ADN OPEN
  • Сообщений: 20
  • Карма: 0
По сути у каждого типа объекта (круг, полилиния и тд) есть свой перечень параметров, который может говорить об идентичности.
Неужели нужно будет для каждого типа объекта делать свой механизм сравнения (по своим параметрам, которые вместе будут отвечать за идентичность при сравнении)?

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
И их тоже надо почитать. И они тоже могут быть дублированы. Их как сравнивать на идентичность? По каким параметрам?
А вот это думаю уже тупиковая ветка. Окружность может быть нарисована примитивом CIRCLE (класс Circle), а можно при помощи нескольких дуг ARC (класс Arc) - внешне ты их не отличишь. Дальше можно нарисовать одну полилинию, а потом расчленить её на составляющие (получатся отрезки и дуги). Но внешне оно останется тем же. В общем случае ты эту задачу не решишь. Она бредовая. Так что ставь нормальные ограничения на то, с какими примитивами AutoCAD ты можешь работать. Это и называется постановкой задачи.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • Administrator
  • *****
  • Сообщений: 13882
  • Карма: 1787
  • Рыцарь ObjectARX
  • Skype: rivilis
Неужели нужно будет для каждого типа объекта делать свой механизм сравнения (по своим параметрам, которые вместе будут отвечать за идентичность при сравнении)?
Если ставить задачу именно так, то так и придётся делать. Потому что если использовать для этой цели Reflection, то придётся всё равно отсекать свойства, которые не определяют внешний вид объекта.
Кстати, а что делать с цветом, типом линии, слоём, весом линии и т.д. и т.п.? Считать ли такие объекты одинаковыми? Надеюсь, что ты понимаешь о чем я спрашиваю.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение