размер объекта

Автор Тема: размер объекта  (Прочитано 10590 раз)

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

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

  • ADN OPEN
  • Сообщений: 29
  • Карма: 0
размер объекта
« : 27-01-2016, 09:14:43 »
добрый день, помогите идеями, как узнать объем объекта автокада? в байтах или процентах, без разницы в чем. но мне нужно узнать какой объем занимает объект при хранении в файле DWG.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 534
  • Карма: 117
Re: размер объекта
« Ответ #1 : 27-01-2016, 10:54:21 »
добрый день, помогите идеями, как узнать объем объекта автокада? в байтах или процентах, без разницы в чем. но мне нужно узнать какой объем занимает объект при хранении в файле DWG.
бррр.......объем линии автокада 0,001% может объем в литрах лучше? ;-)

Ты наверное хочешь:
1. получить сам объект.
2. получить размер объекта в байтах.
3. сравнить с размером чего-то? (Файла или другого объекта.)

уточни задачу, для чего это нужно. А то может тебе вовсе и не размер нужен!

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

  • ADN OPEN
  • Сообщений: 29
  • Карма: 0
Re: размер объекта
« Ответ #2 : 27-01-2016, 11:20:47 »
уточняю.
у меня есть DWG файлы, они велики, их объем может быть 10мб, а может и 30мб. был случай, когда объем файла достиг 640мб. при это в этих файлах не так то много информации, их реальный объем 1-2мб. эти файлы можно почистить _purge, но как правило это не так-то помогает. можно отключить прохи-графику _proxygrphics=0, это помогает, но не сильно.
как выяснилось, даже если из этих файлов удалить все, что видно, файлы остаются в своем преждем объеме минус 1-2мб. объекты полнящие файл не визуальны, это огромное количество библиотек, таблиц, х-данных и всякой фигни, как позже выяснилось, не нужной для работы файла.
я уже вычистил, все, что могу идентифицировать, как лишнее, это позволяет легко уменьшать файлы до их почти реальных размеров, но все же, что-то остается.
можно ловить блох и вычищать дальше, но мне хочется видеть, что реально занимает место. очевидно, что это что-то большое, одного типа и происхождения.
поэтому я хочу видеть какие объекты сколько занимают.
получить размер объекта в байтах, меня вполне устроит.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 534
  • Карма: 117
Re: размер объекта
« Ответ #3 : 27-01-2016, 11:43:45 »
поэтому я хочу видеть какие объекты сколько занимают.
по идее получаешь объект
DbObject  dbObject = tr.GetObject( .....
int byteCount = sizeof(dbObject);
И возможно удастся что-то вычислить и проанализировать

...но размер точно не будет соответствовать размеру в файле, это размер DbObject. Но возможно хватит для нахождения "лишней информации"

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

  • ADN OPEN
  • Сообщений: 29
  • Карма: 0
Re: размер объекта
« Ответ #4 : 27-01-2016, 11:49:10 »
не получится - sizeof даст размер для типа, а не для объекта.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 534
  • Карма: 117
Re: размер объекта
« Ответ #5 : 27-01-2016, 11:53:27 »
не получится - sizeof даст размер для типа, а не для объекта.
тогда попробуй
Marshal.SizeOf
Возвращает неуправляемый размер объекта в байтах.

https://msdn.microsoft.com/ru-ru/library/y3ybkfb3.aspx

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

  • ADN OPEN
  • Сообщений: 29
  • Карма: 0
Re: размер объекта
« Ответ #6 : 27-01-2016, 12:01:16 »
ну идея была не плохая, я даже водумал "вот оно!!!", но нет ексцепшн:
System.ArgumentException: Невозможно упаковать тип "Autodesk.AutoCAD.DatabaseServices.BlockTable" как неуправляемую структуру; невозможно вычислить размер или смещение, имеющие смысл.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: размер объекта
« Ответ #7 : 27-01-2016, 13:13:08 »
Охохо...
В .NET вы оперируете с обертками, поэтому размер объекта/примитива даже в оперативной памяти вы определить не можете. Это можно сделать средствами ObjectARX/C++ но и это явно не то, что тебя интересует. Ведь ты же спрашиваешь про:
какой объем занимает объект при хранении в файле DWG.
Ну так поступи таким образом:
1) Сохрани базу в dwg-файл
2) Получи его размер
3) Добавь к базе нужный тебе примитив
4) Сохрани базу в dwg-файл
5) Получи его размер
6) Найди разницу в размерах
Вот и будет тебе размер объекта.
При этом:
1) Системная переменная ISAVEPERCENT должна быть равнв 0
2) Лучше добавлять не один объект, а скажем сотню. И потом разницу в размерах файлов делить на количество добавленных объектов - для точности вычисления.

P.S.: Считаю задачу совершенно бессмысленной пока меня не убедят в обратном.
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

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

  • ADN OPEN
  • Сообщений: 29
  • Карма: 0
Re: размер объекта
« Ответ #8 : 27-01-2016, 13:17:58 »
меня устроит и объем занимаемый в памяти при загрузке DWG. как узнать объем в objectARX?
добавить интересующий меня примитив не могу - так как не знаю какой объект жрет объем.

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: размер объекта
« Ответ #9 : 27-01-2016, 13:25:07 »
добрый день, помогите идеями, как узнать объем объекта автокада? в байтах или процентах, без разницы в чем. но мне нужно узнать какой объем занимает объект при хранении в файле DWG.
Какова практическая польза сего действа?

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: размер объекта
« Ответ #10 : 27-01-2016, 13:28:33 »
Это можно сделать средствами ObjectARX/C++ но и это явно не то, что тебя интересует.
Кроме того, совершенно не факт, что структура и размер объекта в памяти соответствует структуре и размеру того, в каком виде эта информация сохраняется в DWG, т.к. вовсе не исключено (хотя и не обязательно), что в этом случае может присутствовать некоторая оптимизация.

Цитата: Александр Ривилис
Считаю задачу совершенно бессмысленной пока меня не убедят в обратном.
Аналогично.

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

  • Administrator
  • *****
  • Сообщений: 13830
  • Карма: 1784
  • Рыцарь ObjectARX
  • Skype: rivilis
Re: размер объекта
« Ответ #11 : 27-01-2016, 13:33:03 »
как узнать объем в objectARX?
В ObjectARX: sizeof(<имя класса объекта>). Хотя это тоже всё неправильно. Допустим это растровый объект. Размер класса один и тотже, а в памяти будет занимать разный объем в зависимости от размера растра. Единственный более-менее корректный способ - это:
1) Определяем объем оперативной памяти, занятый AutoCAD
2) Добавить/создать измеряемый объект
3) Определяем объем оперативной памяти, занятый AutoCAD
4) Получаем разницу между 3) и 1) 
Не забывайте про правильное Форматирование кода на форуме
Создание и добавление Autodesk Screencast видео в сообщение на форуме
Если Вы задали вопрос и на форуме появился правильный ответ, то не забудьте про кнопку Решение

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 534
  • Карма: 117
Re: размер объекта
« Ответ #12 : 27-01-2016, 13:40:30 »
Какова практическая польза сего действа?
Андрей не дочитал! в 3 сообщении Алексей написал для какой цели. Хотя скорее всего сам размер в том виде и не нужен.

...кстати Александр напомнил ISAVEPERCENT был 0? ...это нужно было перед очисткой выставить, а то можно долго искать не то и не там :-)

Оффлайн Андрей Бушман

  • ADN Club
  • *****
  • Сообщений: 2000
  • Карма: 163
  • Пишу программки...
    • Блог
  • Skype: Compositum78
Re: размер объекта
« Ответ #13 : 27-01-2016, 13:45:32 »
можно отключить прохи-графику _proxygrphics=0, это помогает, но не сильно.
как выяснилось, даже если из этих файлов удалить все, что видно, файлы остаются в своем преждем объеме минус 1-2мб. объекты полнящие файл не визуальны, это огромное количество библиотек, таблиц, х-данных и всякой фигни, как позже выяснилось, не нужной для работы файла.
я уже вычистил, все, что могу идентифицировать, как лишнее, это позволяет легко уменьшать файлы до их почти реальных размеров, но все же, что-то остается.
По части уменьшения размера файла...
А если расчленить все прокси (в т.ч. и не графические) с последующим их удалением - в этом случае объём файла насколько сокращается в твоём примере? А.Н. Ривилис предоставлял утилиту для этого на своём сайте. В качестве альтернативы можно попробовать воспользоваться .net-аналогом. Так же интересует, насколько отличается объём DWG файла, полученного путём экспорта всего контента через команду _.WBLOCK.

Оффлайн Привалов Дмитрий

  • ADN Club
  • *****
  • Сообщений: 534
  • Карма: 117
Re: размер объекта
« Ответ #14 : 27-01-2016, 14:05:22 »
_.WBLOCK
насколько помню
_.WBLOCK практически копирует старую базу, оставляя стили, словари и т.д. и удаляет из нее не выбранные объекты.
(Ну или реализует близкую логику.)

поэтому результат _.WBLOCK стоит сравнить с созданием нового чертежа и копированием примитивов в него.