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

ADN Club => AutoCAD .NET API => Тема начата: Алексей (IdeaSoft) от 25-12-2019, 11:18:51

Название: Отследить программно дату и время изменения примитива
Отправлено: Алексей (IdeaSoft) от 25-12-2019, 11:18:51
Подскажите есть ли в AutoCAD API возможность прочитать
дату и время изменения примитива.
Это нужно для анализа изменений в проекте.

В других САПР программах (не буду уточнять в каких чтобы не
рекламировать других производителей) такое есть.
 
Название: Re: Отследить программно дату и время изменения примитива
Отправлено: Александр Ривилис от 25-12-2019, 11:26:13
Подскажите есть ли в AutoCAD API возможность прочитать
дату и время изменения примитива.
Нет. Эта информация в dwg-файле не хранится.
Название: Re: Отследить программно дату и время изменения примитива
Отправлено: Алексей (IdeaSoft) от 25-12-2019, 11:36:40
Ну тогда наверное придется через XData что-то придумывать.
Но это ж на каждый элемент нужно прицеплять событие изменения
 
Название: Re: Отследить программно дату и время изменения примитива
Отправлено: Алексей (IdeaSoft) от 25-12-2019, 11:45:06
Как же это лучше технически сделать?
У кого есть какие идеи?

Может какою табличку придумать в Xrecord и
добавлять в нее Handle тех примитивов которые были изменены.

Имя Xrecord путь будет к примеру дата (ну это если я хочу контролировать изм. раз в сутки)
А записи XRecord это список Handle и в том числе для новых, которые были добавлены.
 
 
Название: Re: Отследить программно дату и время изменения примитива
Отправлено: Александр Ривилис от 25-12-2019, 12:04:50
Как же это лучше технически сделать?
У кого есть какие идеи?
Лучшая идея - не делать это. Любая реализация будет страдать недостатками.
Название: Re: Отследить программно дату и время изменения примитива
Отправлено: avc от 25-12-2019, 12:24:26
У Solid3d есть свойство NumChanges. Этого достаточно, чтоб отследить изменения в 3d-деталях.
Название: Re: Отследить программно дату и время изменения примитива
Отправлено: Александр Ривилис от 25-12-2019, 12:26:18
У Solid3d есть свойство NumChanges. Этого достаточно, чтоб отследить изменения в 3d-деталях.
1. Какое отношение количество изменений имеет к дате/времени изменения?
2. А если история редактирования 3DSOLID сброшена?
Название: Re: Отследить программно дату и время изменения примитива
Отправлено: avc от 25-12-2019, 12:30:18
1. К дате - никакого отношения. А к задаче отслеживания модификаций чертежа - самое непосредственное. И да, условия задачи придется менять, увы.
2. История не влияет, счетчик нарастает в любом случае
Название: Re: Отследить программно дату и время изменения примитива
Отправлено: Алексей (IdeaSoft) от 25-12-2019, 12:32:46
У Solid3d есть свойство NumChanges
Так и нет солидов в проектах. Обычные элементы.
Название: Re: Отследить программно дату и время изменения примитива
Отправлено: Алексей (IdeaSoft) от 25-12-2019, 12:34:50
1. К дате - никакого отношения.
Ну в принципе счетчик это тоже способ отследить изменения (что мне собственно и нужно).
Потому как дату на компе можно изменить и тогда будут искажения.
Название: Re: Отследить программно дату и время изменения примитива
Отправлено: Александр Ривилис от 25-12-2019, 12:43:05
Ну в принципе счетчик это тоже способ отследить изменения (что мне собственно и нужно).
У объектов/примитивов AutoCAD такого счетчика нет (кроме Solid3d, Region, Body).
Название: Re: Отследить программно дату и время изменения примитива
Отправлено: avc от 25-12-2019, 12:44:47
Советую пойти в обход. Например, сравнивать две версии чертежа. И это кстати уже штатная функция Автокада. Точно нужен свой велосипед?
Название: Re: Отследить программно дату и время изменения примитива
Отправлено: Привалов Дмитрий от 25-12-2019, 15:23:09
Как же это лучше технически сделать?
У кого есть какие идеи?

Может какою табличку придумать в Xrecord и
добавлять в нее Handle тех примитивов которые были изменены.

Все конечно зависит от задачи и чертежей.
Но я бы не стал все пихать в dwg. Большие файлы и так страдают от ошибок и лишней информации.
Лучше выделить внешний файл, нужного формата, например xml.
Если что-то не сработает, просто отключаешь режим протоколирования, и dwg не испорчены.

Название: Re: Отследить программно дату и время изменения примитива
Отправлено: Дмитрий Загорулькин от 25-12-2019, 16:54:16
Но я бы не стал все пихать в dwg. Большие файлы и так страдают от ошибок и лишней информации.
Лучше выделить внешний файл, нужного формата, например xml.
Если что-то не сработает, просто отключаешь режим протоколирования, и dwg не испорчены.
Интересный вариант! Для второстепенных данных, наверное, годится. Но если данные важные и их наличие критично - лучше, всё же, в чертеже хранить. Так есть гарантия, что даже перемещённый-пересланный файл чертежа не потеряет эти данные.
Название: Re: Отследить программно дату и время изменения примитива
Отправлено: Алексей (IdeaSoft) от 25-12-2019, 19:22:59

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

Идея такая.
Сначала суть задачи чуть более подробно.
Мне нужно знать подвинули трубу или колодец или еще какой либо элемент на плане и не важно
какая была дата и версии файла.
Для меня важен только один критерий -  изменение геометрического положения объекта.
Если это отрезок - то нужно сверить две точки
Если это дуга то параметры геометрии по дуге,
ну и т. д. у каждой фигуры своя геометрия.

Я вот что думаю.
Может просто наложить графику из
двух версий файлов прогнать _OVERKILL

Но проблема в том что _OVERKILL оставляет среди дублированных объектов одну копию.
А мне желательно чтобы эта команда удалила все дублированные объекты.
И тогда у меня останется набор различающихся объектов.
И я пойму объем изменений в файле плана.

Может есть что-то коме _OVERKILL

DOUBLEKILL что-то вроде этого.






 
Название: Re: Отследить программно дату и время изменения примитива
Отправлено: Дмитрий Загорулькин от 25-12-2019, 20:53:15
Может есть что-то коме _OVERKILL
Дык:
Советую пойти в обход. Например, сравнивать две версии чертежа. И это кстати уже штатная функция Автокада. Точно нужен свой велосипед?
Описание: http://help.autodesk.com/view/ACD/2019/RUS/?guid=GUID-628460AC-6F4C-4ABF-B2D3-85D9D813891A
Название: Re: Отследить программно дату и время изменения примитива
Отправлено: avc от 25-12-2019, 20:56:22
Тем более не понимаю чем не устраивает _Compare
Название: Re: Отследить программно дату и время изменения примитива
Отправлено: Привалов Дмитрий от 25-12-2019, 21:10:46
Интересный вариант! Для второстепенных данных, наверное, годится. Но если данные важные и их наличие критично - лучше, всё же, в чертеже хранить. Так есть гарантия, что даже перемещённый-пересланный файл чертежа не потеряет эти данные.

Александр дал как всегда точный ответ.
Лучшая идея - не делать это. Любая реализация будет страдать недостатками.

На мой взгляд эти данные не критичны и не важны, в отличие от самих примитивов.
Гарантии сохранения также нет. Т.к. примитивы разбивают, копируют в новый чертеж, файлы перезаписывают с помощью "save as",  сохраняют с помощью "пблок" и "-exporttoautocad" и т.д. и этот процесс неконтролируемый. Пока система будет отлажена, архив будет замусорен xrecord, xdata и т.д.
Скорость обработки больших файлов неизбежно пострадает.
Название: Re: Отследить программно дату и время изменения примитива
Отправлено: Привалов Дмитрий от 25-12-2019, 21:21:19
Подскажите есть ли в AutoCAD API возможность прочитать
дату и время изменения примитива.

Мне нужно знать подвинули трубу или колодец или еще какой либо элемент на плане и не важно
какая была дата и версии файла.

А задача то кардинально изменилась. :-)