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

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

AutoCAD: Программная вставка дин.блоков с их предварительной настройкой

Ответ
Поиск в этой теме
Непрочитано 07.04.2014, 14:01 #1
AutoCAD: Программная вставка дин.блоков с их предварительной настройкой
mankurt
 
геодезист
 
Москва
Регистрация: 25.10.2011
Сообщений: 45

Подскажите, пожалуйста, как это сделать...
Идея такая - есть библиотека однотипных динамических блоков с одним параметром visibility и несколькими собственно этими "визибилити", настроенными для этого параметра.
Нужно программно вставлять блоки в чертеж и выбирать определенный visibility по ситуации. То есть все параметры и visibility для каждого блока уже настроены, нужно только изменить visibility у конкретного вставленного блока. Полдня бьюсь - не могу понять как это делается.

Есть ли какие-то Activex-методы, которые работают с visibility? Или нужно действовать через entmod?
Прочитав по ссылке сделал вывод, что текущим отображением visibility заведует группа (91. ...) из BLOCKVISIBILITYPARAMETER, правильно?
Но, насколько я наблюдаю, для разных видов одного и того же блока у меня значение в точечной паре 91 неизменно равно 0.
Как же быть?
Просмотров: 3879
 
Непрочитано 07.04.2014, 15:01
#2
AlphaGeo


 
Сообщений: n/a


Offtop: mankurt, имхо, не в ту тему пишешь...
Инструментальная палитра не устроит? Создаешь dwg в котором все твои блоки в нескольких желаемых вариантах. Каждый блок (вхождение блока) закидываешь на палитру. При вставке с палитры блоки будут уже с предопределенными свойствами.
 
 
Автор темы   Непрочитано 07.04.2014, 15:12
#3
mankurt

геодезист
 
Регистрация: 25.10.2011
Москва
Сообщений: 45


Цитата:
Сообщение от AlphaGeo Посмотреть сообщение
Offtop: mankurt, имхо, не в ту тему пишешь...
Инструментальная палитра не устроит? Создаешь dwg в котором все твои блоки в нескольких желаемых вариантах. Каждый блок (вхождение блока) закидываешь на палитру. При вставке с палитры блоки будут уже с предопределенными свойствами.
Т.к. вставка блока это только небольшая часть программы, которую я пишу. Программа обрабатывает текстовый файл с координатами и кодами, и автоматически расставляет блоки и рисует линии по кодам, принятым в организации. Операция не интерактивная, а в автоматическом режиме, поэтому палитра - немного не про то. С динамическими блоками не так много работал, поэтому не знаю, как к ним программно подступиться. Идея как раз в том и состоит, чтобы обойтись меньшим количеством блоков в библиотеке, но динамическими блоками.
mankurt вне форума  
 
Непрочитано 07.04.2014, 15:24
1 | #4
AlphaGeo


 
Сообщений: n/a


Цитата:
Сообщение от mankurt Посмотреть сообщение
Идея как раз в том и состоит, чтобы обойтись меньшим количеством блоков в библиотеке, но динамическими блоками.
А оправданно ли? AutoCAD всё равно каждое различное по настройкам вхождение дин.блока воспринимает как "новый" блок.
 
 
Автор темы   Непрочитано 07.04.2014, 15:41
#5
mankurt

геодезист
 
Регистрация: 25.10.2011
Москва
Сообщений: 45


Цитата:
Сообщение от AlphaGeo Посмотреть сообщение
А оправданно ли? AutoCAD всё равно каждое различное по настройкам вхождение дин.блока воспринимает как "новый" блок.
гм.. да, не знал я об этом. тем более, что блоков даже не сотни будет в чертежах, а тысячи и десятки тысяч.
mankurt вне форума  
 
Непрочитано 08.04.2014, 13:08
#6
Солидворкер
Moderator

Конструктор (машиностроение)
 
Регистрация: 23.10.2006
Россия
Сообщений: 23,259
<phrase 1=


Цитата:
Сообщение от AlphaGeo Посмотреть сообщение
Offtop: mankurt, имхо, не в ту тему пишешь...
Тему отделил

mankurt, убедительная просьба на будущее - следить за соответствием вопроса теме топика, в котором вопрос задается. Этим облегчается жизнь всем тем, кто пойдет следом.
Солидворкер вне форума  
 
Автор темы   Непрочитано 08.04.2014, 13:23
#7
mankurt

геодезист
 
Регистрация: 25.10.2011
Москва
Сообщений: 45


Цитата:
Сообщение от Солидворкер Посмотреть сообщение
mankurt, убедительная просьба на будущее - следить за соответствием вопроса теме топика, в котором вопрос задается. Этим облегчается жизнь всем тем, кто пойдет следом.
Извините, буду стараться.


Цитата:
Сообщение от AlphaGeo Посмотреть сообщение
А оправданно ли? AutoCAD всё равно каждое различное по настройкам вхождение дин.блока воспринимает как "новый" блок.
Дальнейшие думы над предметом привели к выводу, что оправдано, если динамический блок содержит внутри себя простой статический блок.
Получается так: 1) Вставляем в чертеж динамический блок, который сам по себе более удобен для редактирования, чем статический
2) Изменяем нужные свойства и параметры (видимость, stretch и прочее)
3) Взрываем с помощью функции Burst из Express tools
4) Чистим чертеж на наличие временных *U-блоков
В результате имеем стандартный статический блок на своем месте, атрибуты взрываются в текст, содержащий нужные значения (например высоту блока, содержащуюся в поле взорванного атрибута), без новых созданных блоков.

В-общем, опять же встает вопрос, как при вставке динамического блока программно присвоить нужное значение Visibility?
mankurt вне форума  
 
Непрочитано 08.04.2014, 13:43
1 | #8
Krieger

инженер (КМ)
 
Регистрация: 30.10.2004
Красноярск
Сообщений: 3,837


Функция kpblc-а для переопределения параметров динамического блока:
Код:
[Выделить все]
(defun _kpblc-block-dyn-change-values (ent              lst
                                       /                prop_lst
                                       _kpblc-conv-vla-to-list
                                       )
                                      ;|
	ent	указатель на вхождение блока
	lst	список вида:
      '((<property> . <value>)
	(<property> . <value>)
	)
*    примеры вызова:
(_kpblc-block-dyn-change-values (car(entsel))'(("dist*" . 162.56) ("ang*" . 5.)))
;; Углы надо задавать в радианах!
(_kpblc-block-dyn-change-values (car (entsel)) '(("type" . "minimum")))
|;

  (defun _kpblc-conv-vla-to-list (value / res)
                                 ;|
*    Преобразовывает vlax-variant или vlax-safearray в список.
|;
    (cond
      ((= (type value) 'variant)
       (_kpblc-conv-vla-to-list (vlax-variant-value value))
       )
      ((= (type value) 'safearray)
       (if (>= (vlax-safearray-get-u-bound value 1) 0)
         (vlax-safearray->list value)
         ) ;_ end of if
       )
      (t value)
      ) ;_ end of cond
    ) ;_ end of defun

  (vl-load-com)

  (vl-catch-all-apply
    '(lambda ()
       (setq
         ent (cond
               (ent)
               (t (car (entsel "\nУкажите вхождение дин.блока <Отмена> : ")))
               ) ;_ end of cond
         ) ;_ end of setq
       ) ;_ end of lambda
    ) ;_ end of vl-catch-all-apply
  (if (and ent
           (setq ent (cond
                       ((= (type ent) 'ename) (vlax-ename->vla-object ent))
                       ((= (type ent) 'vla-object) ent)
                       (t nil)
                       ) ;_ end of cond
                 ) ;_ end of setq
           (= (strcase (vla-get-objectname ent) t) "acdbblockreference")
           (= (vla-get-isdynamicblock
                (vla-item
                  (vla-get-blocks
                    (vla-get-activedocument (vlax-get-acad-object))
                    ) ;_ end of vla-get-blocks
                  (vla-get-effectivename ent)
                  ) ;_ end of vla-item
                ) ;_ end of vla-get-isdynamicblock
              :vlax-true
              ) ;_ end of =
           ) ;_ end of and
    (progn
      (setq
        prop_lst (vlax-safearray->list
                   (vlax-variant-value (vla-getdynamicblockproperties ent))
                   ) ;_ end of vlax-safearray->list
        ) ;_ end of setq
      (foreach item (mapcar '(lambda (a) (cons (strcase (car a)) (cdr a))) lst)
        (if (setq prop
                   (car
                     (vl-remove-if-not
                       '(lambda (x)
                          (wcmatch (strcase (vla-get-propertyname x)) (car item))
                          ) ;_ end of lambda
                       prop_lst
                       ) ;_ end of vl-remove-if-not
                     ) ;_ end of car
                  ) ;_ end of setq
          ;; Имя совпало
          (vl-catch-all-apply
            '(lambda ()
               (vla-put-value
                 prop
                 (vlax-make-variant
                   (cdr item)
                   (vlax-variant-type (vla-get-value prop))
                   ) ;_ end of vlax-make-variant
                 ) ;_ end of vla-put-value
               (vla-update ent)
               ) ;_ end of lambda
            ) ;_ end of vl-catch-all-apply
          ) ;_ end of if
        ) ;_ end of foreach
      ) ;_ end of progn
    ) ;_ end of if
  ) ;_ end of defun
Почему у меня русские символы в кодах не распознаются при копировании из Visual LISP editor?
__________________
Делай хорошо, плохо само получится.
Krieger вне форума  
 
Автор темы   Непрочитано 08.04.2014, 13:53
#9
mankurt

геодезист
 
Регистрация: 25.10.2011
Москва
Сообщений: 45


Цитата:
Сообщение от Krieger Посмотреть сообщение
Функция kpblc-а для переопределения параметров динамического блока:
Спасибо большое! ) То что нужно, даже лучше.
А я как раз только нашел, что есть такая штука, как vla-getdynamicblockproperties...
mankurt вне форума  
 
Непрочитано 08.04.2014, 14:15
#10
13Rossoneri


 
Регистрация: 22.07.2011
Украина
Сообщений: 478
<phrase 1=


а не будет "тупить" компьютер тысяча динамических блоков? Обычные блоки, насколько я понимаю - "легче".
13Rossoneri вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > AutoCAD: Программная вставка дин.блоков с их предварительной настройкой



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Видеоуроки AutoCAD kosmax AutoCAD 173 17.02.2017 15:08
Вставка AutoCAD чертежа в Word Youdgin AutoCAD 36 02.09.2011 17:14
AutoCAD 2008 - вставка блоков из файла в файл Vavan Metallist AutoCAD 14 25.05.2009 19:37
вставка в autocad ссылки на excel nicolas Программирование 5 16.10.2008 19:18
Вставка bmp-рисунка в autocad gool AutoCAD 8 28.03.2008 11:28