| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Оптимизация динамических блоков

Оптимизация динамических блоков

Ответ
Поиск в этой теме
Непрочитано 10.07.2007, 15:49 #1
Оптимизация динамических блоков
Дима_
 
Продуман
 
Питер
Регистрация: 22.02.2007
Сообщений: 2,840

Всем здравствуйте, подскажите где ошибка: если я создаю блок - то соответственно, где-то в файле лежит его описание вместе с динамическими характристиками и при вставке этого блока в рисунок никакого нового тела не создается, просто указывается что в координате x,y,z под углом @ лежит блок А. Похоже так и происходит если это обычный блок, но если это динамический, то размер файла растет пропорционально количеству блоков - создаем большой дин.блок (килобайт на 100), и вставляем 5 таких-же с другими параметрами - размер вырастает на 500 кило???, можете сами проверить, вопрос лечится ли это какими либо настройками, либо апгрейдами ибо по моему это косяк откровенный. Если есть другие мысли по этому поводу (может я чего не понимаю), пожалуйста напишите.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Просмотров: 3778
 
Непрочитано 10.07.2007, 16:02
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


ИМХО, ИМХО, ИМХО...
С точки зрения "стандартного" лиспа каждый дин.блок является анонимным блоком с навешанными на него реакторами. Со всеми вытекающими - если у нескольких дин.блоков параметры одинаковые, объем файла будет расти меньше, поскольку имена одинаковые и работает схема стандартных блоков. Стоит начать вносить изменения, как тут же меняется имя блока (я не про эффективное имя, которое показывается в свойствах говорю). Соответственно это новое описание, которое надо хранить. Вот и увеличение объема.
Мораль: вряд ли излечимо. За удобства надо платить.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.07.2007, 16:17
#3
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


По факту получается так, но если я изменю 1 дин. блок (не всмысле потяну за реактор, а в редакторе блоков), то и все другие поменяются, то есть выходит, что хранит он (acad) исходный блок в одном месте, а лисповое имя присваивает координате и значению реакторов и опять пришли к той же ситуации - то ли он зачем то в рисунке копию создает - но вопрос зачем, то ли просто autodesk накосячили чего-то.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 10.07.2007, 16:39
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Конечно хранит, а как же иначе-то?
Попробуй вставить любой дин.блок и запусти код (писал на коленках, так что не сильно красиво, можно было покомпактнее, наверное):
Код:
[Выделить все]
(defun test01 (/ ent try-effective try-normal)
  (defun try-effective (ent / res)
    (vlax-for item
              (vla-item
                (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
                (vla-get-effectivename ent)
                ) ;_ end of vla-item
      (setq res (cons item res))
      ) ;_ end of vlax-for
    (reverse res)
    ) ;_ end of defun

  (defun try-normal (ent / ent res)
    (vlax-for item
              (vla-item
                (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object)))
                (vla-get-name ent)
                ) ;_ end of vla-item
      (setq res (cons item res))
      ) ;_ end of vlax-for
    (reverse res)
    ) ;_ end of defun

  (if
    (and (not (vl-catch-all-error-p
                (vl-catch-all-apply
                  '(lambda ()
                     (setq ent (car (entsel "\nУкажите дин.блок <Отмена> : ")))
                     ) ;_ end of lambda
                  ) ;_ end of vl-catch-all-apply
                ) ;_ end of vl-catch-all-error-p
              ) ;_ end of not
         ent
         (= (cdr (assoc 0 (entget ent))) "INSERT")
         (setq ent (vlax-ename->vla-object ent))
         (vlax-property-available-p ent 'isdynamicblock)
         (= (vla-get-isdynamicblock ent) :vlax-true)
         ) ;_ end of and
     (progn
       (princ "\nEffectiveName \t\tName")
       (mapcar '(lambda (x y)
                  (princ (strcat "\n"
                                 (vla-get-objectname x)
                                 "; "
                                 (vl-princ-to-string (vla-get-objectid x))
                                 "\t ::: \t"
                                 (vla-get-objectname y)
                                 "; "
                                 (vl-princ-to-string (vla-get-objectid y))
                                 ) ;_ end of strcat
                         ) ;_ end of princ
                  ) ;_ end of LAMBDA
               (try-effective ent)
               (try-normal ent)
               ) ;_ end of mapcar
       ) ;_ end of progn
     ) ;_ end of if
  (textscr)
  (princ)
  ) ;_ end of defun
(запускать как (test01), прямо так, со скобками). И посмотри на разницу. В левой части (которая до " ::: ") - данные, взятые из общего описания блока, в правой - из конкретной вставки. Разница однако... Если закомментировать строки
Код:
[Выделить все]
(vlax-property-available-p ent 'isdynamicblock)
(= (vla-get-isdynamicblock ent) :vlax-true)
, то становится возможным подобным образом обрабатывать и простые блоки. Попробуй ради приколу - данные будут совпадать (кроме атрибутов, конечно).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 10.07.2007, 17:29
#5
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Бррр. Оперативно написал! Ну так я про это и говорю - вся разница между описанием блока и вставкой в этих строчках (которые лисп выводит) - все, но ониж не занимает размер всего блока, а рисунок растет именно на размер блока, как будто при изменении реактора - он копирует весь блок? Вобщем, по моему я чего-то не понимаю, или объяснить не могу, ибо 3 раз одно и тоже пишу.
AcDb3dSolid; 2130350200 ::: AcDb3dSolid; 2130351776
AcDb3dSolid; 2130350208 ::: AcDb3dSolid; 2130351784
AcDb3dSolid; 2130350216 ::: AcDb3dSolid; 2130351792
AcDb3dSolid; 2130350224 ::: AcDb3dSolid; 2130351800
AcDb3dSolid; 2130350232 ::: AcDb3dSolid; 2130351808
AcDb3dSolid; 2130350240 ::: AcDb3dSolid; 2130351816
AcDb3dSolid; 2130350248 ::: AcDb3dSolid; 2130351824
AcDb3dSolid; 2130350256 ::: AcDb3dSolid; 2130351832
AcDb3dSolid; 2130350264 ::: AcDb3dSolid; 2130351840
AcDb3dSolid; 2130350272 ::: AcDb3dSolid; 2130351848
AcDb3dSolid; 2130350280 ::: AcDb3dSolid; 2130351856
AcDb3dSolid; 2130350288 ::: AcDb3dSolid; 2130351864
AcDb3dSolid; 2130350296 ::: AcDb3dSolid; 2130351872
AcDb3dSolid; 2130350304 ::: AcDb3dSolid; 2130351880
AcDb3dSolid; 2130350312 ::: AcDb3dSolid; 2130351888
AcDb3dSolid; 2130350320 ::: AcDb3dSolid; 2130351896
AcDb3dSolid; 2130350328 ::: AcDb3dSolid; 2130351904
AcDb3dSolid; 2130350336 ::: AcDb3dSolid; 2130351912

Вот вся разница - а каждый новый блок 100 кило весит!
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 10.07.2007, 17:34
#6
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


Цитата:
Сообщение от Дима_
Бррр. Оперативно написал! Ну так я про это и говорю - вся разница между описанием блока и вставкой в этих строчках (которые лисп выводит) - все, но ониж не занимает размер всего блока, а рисунок растет именно на размер блока, как будто при изменении реактора - он копирует весь блок? Вобщем, по моему я чего-то не понимаю, или объяснить не могу, ибо 3 раз одно и тоже пишу.
Блин ну просто в описание анонимного блока добавляются, дополнительное опсиание, в связи с тем что по сравнению с блоком аналогом, это уже фактически другой блок вот и записывает он его еще раз в рисунок.
PS.
ГЫЫ както сумбурно получилось описание, но все на уровне интуиции.
Ну это как бы мое видение, по крайней мере по эксперементировав с динамическими блоками в "чистом рисунке", пришел к такому выводу.
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Автор темы   Непрочитано 10.07.2007, 17:47
#7
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,840


Ладно - по порядку, я создаю блок, в нем 10 настраиваемых свойств - каждое размером, к примеру, в 5 байт. Если я в этот-же рисунок добавляю второй ТАКОЙ-ЖЕ, все что надо сделать - это сказать координата х,у блок А и 50 байт настраиваемых свойств, все.
Как текст песни пишут, потом в скобках (припев), сдесь то же самое только (припев, 2 раза) или (припер, две последние строки) - там же не пишут (две последние строки припева кстати вот они ...), я понимаю, что этому описанию дают новое уникальное имя, чтобы к нему можно было обратиться, но зачем в него "припев" то копировать.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Оптимизация динамических блоков

Размещение рекламы