|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Определение размера описания элементов AutoCAD-a
Руководитель фирмы
Москва
Регистрация: 28.03.2007
Сообщений: 1,831
|
||
Просмотров: 4964
|
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
>>Как определить размер описания элемента программно?
Размер описания в файле и в памяти - разные вещи, в файл не сохраняется "избыточная" информация для уменьшения размера, в памяти она хранится чтоб не тратить время каждый раз на ее вычисление. + в последних версиях вроде как встроенный архиватор. |
|||
![]() |
|
||||
Задача не стоит мерять в битах или байтах, оценка нужна размера одного, относительно другого. Архивирует - и ладно. он же и то и то архивирует, а вот с памятью и разворачиванием сложнее.
В теории, каждый объект это СОМ объект и он размещаясь в памяти сжирает ее часть, а вот какую? Может ObjectARX поможет? Ломаю,ломаю голову - никак. |
||||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
Даже с определением линии ИМХО не все так просто: размер в памяти должен зависить от кучи параметров, например от типа линии, каждый штрих считается и гдето хранится. Наверно в ObjectARX можно посмотреть размер класса линии, но сколько еще памяти выделяет экземпляр объекта, узнать сложнее.
Последний раз редактировалось zamtmn, 15.06.2009 в 20:15. |
|||
![]() |
|
||||
От этой задачи зависит очень многое. Тут народ, "слегка" заболел взрыванием блоков. Даже просят прогу написать, чтобы все блоки повзрывала, а вот к какому это объему файла приведет и как такое можно пошевелить - не понимают и я не понимаю. Если через размер файла смотреть, то надо сохранять и сравнивать относительно предидущего размера, но откатить будет уже не легко. Надо будет страховую копию делать, а заменять существующее страховой копией - летят все загруженные проги. Жуть, короче.
Узнать бы хотя бы сколько в памяти занимает открытый файл. Тогда можно прогой создавать два чистых файла и в один кидать одну группу элементов, а в другую - другую, сохранять эти файлы как временные и сравнивать их размеры. Все это делать без их активации прямо из рабочего файла. Индикацию делать сразу с учетом дельты на оболочку. Ах если бы, ах если бы, не жизнь была б, а песня бы! ![]() |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Делай (entget) для примитива. Полученный список умножай на {размер целого (ключ) + размер второй части точечной пары + размер указателя на следующий размер списка}.
Последний элемент для меня самый "темный" в смысле размера. Он может быть равен как размеру целого, так и размеру следующей точечной пары (для последней принимать равным тогда надо 0). По идее искать надо в ObjectARX SDK. Вопрос: не проще ли будет показать на живом примере, к чему приводит разбитие блоков?
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
kpblc, ничего не понял. Как можно список умножать на какой-то ключ?
Размер второй части точечной пары это что? По счету или 2 DXF код? Размер указателя на следующий размер списка это где? И как быть со всякими там словарями и пр. нечистью? Тут не раз и не два entget надо делать. Да и не оперирует машина DXF кодами, она ими только представляет содержание, чтобы нам понятней было. Длинна списка совсем не означает, что в памяти будет занято определенное, соотносящееся с этой длинной пространство. Тут либо надо искать в процессе указатели на объект и смотреть его ресурс, либо косвенно как-то вычислять. Надо для автокада создавать свои законы квантовой механики, точнее автокадовой. Цитата:
Лично мне надо не взрывать, а оценивать что лучше блок или куча примитивов? У меня много раз повторяется один и тот же набор элементов. Это не "виртуальные изделия" или "виртуальные материалы" просто одинаковые группы примитивов и я их копирую, предварительно объединив в блок (временный), так потом мне их лучше взорвать, или так оставить? Постоянно на эти грабли наступаю. Если я смогу узнать размер выделенной памяти для отдельного, открытого файла - все станет ОК. |
||||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Как я понимаю (если сейчас придет сюда А.Ривилис, я получу по ушам) вариант получается таким:
'((1 . 2) (2 . 3) (4 . "asd")) даст объем: Последний элемент : (int + string(4) + null) = 6 байт Предпоследний элемент: (int + int + int) = 3 байт Первый элемент: (int + int + int) = 3 байт Итого: 12 байт + указатель на начало списка (int) = 13 байт. --- Добавлено: наверняка напутал с размерностью.
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
Moderator
LISP, C# (ACAD 200[9,12,13,14]) Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406
|
Насколько я понял, данные в ObjARX представляются как массив структур типа resbuf:
Цитата:
__________________
Моя библиотека lisp-функций --- Обращение ко мне - на "ты". Все, что сказано - личное мнение. |
|||
![]() |
|
||||
КИПиА Регистрация: 21.03.2005
Tyumen
Сообщений: 1,352
![]() |
размер списка вовсе не равен размеру объекта.
Supermax Странные у тебя мысли)), зачем это знать в лиспе непонимаю. пример с блоками не показателен, ясно что если вставок блока >1 и блок сложный, ане просто POINT - разбивать не может быть невыгодно |
|||
![]() |
|
||||
päällikön suunnittelijat Регистрация: 04.12.2010
Pietari, Venäjä
Сообщений: 63
|
Для каждого Блок как АкадБлок в Акад.Документ.Блоки
Создать МассивЛист новый Для каждого Примитив как АкадПримитив в Блок МассивЛист.Добавить(Примитив ) конец Для каждого Примитив Определить Массив(МассивЛист.Размер) Записать НовыйБлок(Массив, Блок.Имя, ПутьКудаПисать) конец Для каждого Блок В результате получим все блоки чертежа, аккуратно сложенные в папку. Будет и размер и все, что хошь. |
|||
![]() |
![]() |
|
|
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Видеоуроки AutoCAD | kosmax | AutoCAD | 173 | 17.02.2017 15:08 |
Определение площади поверхности и объема тел в AutoCAD на VBA. | shumilovvv | Программирование | 23 | 21.07.2014 14:44 |
запуск программы из AutoCADа | kminas | Программирование | 19 | 15.06.2012 13:42 |
Случайный эксцентриситет | p_sh | Прочее. Архитектура и строительство | 14 | 22.07.2009 11:32 |
Численное определение свободных длин элементов | eilukha | Конструкции зданий и сооружений | 4 | 28.11.2008 08:38 |