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

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

Маркеровка динамических блоков. Автоматизация передачи данных в маркер.

Ответ
Поиск в этой теме
Непрочитано 20.08.2016, 18:15
Маркеровка динамических блоков. Автоматизация передачи данных в маркер.
Red Nova
 
ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Торонто
Регистрация: 23.10.2007
Сообщений: 1,974

Доброго.

Пришла пора мне вернуться к Автокаду.
Компания с которой я работаю производит особые панели перекрытия.
Требуется упростить/автоматизировать процесс построения и маркировки этих панелей.
Немного подумав решил что удобнее всего будет иметь динамический блок как для панели так и для маркера.
В прикрепленном файле примеры такой панели и соответствующего маркера. В правой части показано как они будут окончательно показаны на чертеже.
Для начала хотелось бы иметь возможность скопировать данные из свойств блока панели в соответствующие атрибуты блока маркера.
В приведенном файле из блока требуется извлечь значения все Custom Properties и атрибутов, затем записать совпадающие по наименованию в атрибуты маркера. К слову в маркере может быть и такой атрибут для которого нет свойства или атрибута в блоке плиты, их не трогаем.
Предполагаемый алгоритм работы - выбор блока панели - enter - выбор блока маркера - enter.
У кого ни будь есть подобные наработки?
Есть мысли и на счет более глубокой автоматизации, но это потом.

Заранее спасибо за ответы.

Вложения
Тип файла: dwg
DWG 2007
Маркирование панелей.dwg (109.7 Кб, 74 просмотров)


Последний раз редактировалось Red Nova, 21.08.2016 в 21:16.
Просмотров: 4560
 
Автор темы   Непрочитано 07.09.2016, 17:36
#21
Red Nova

ՃԱՐՏԱՐԱԳԵՏ, Տ.Գ.Թ.
 
Регистрация: 23.10.2007
Торонто
Сообщений: 1,974
Отправить сообщение для Red Nova с помощью Skype™


Ввиду необходимости кроме копирования содержимого совпатающих атрибутов также афтоматизировать подсчет выбранных блоков и записать в атрибут блока маркера подсчитанное количество - я развил код от kp+, добавив указанную возможность.

Принцып работы:
Выбираем участок с блоками (в моем примере панели) на которые ставим маркер, выбрать при этом можно рамкой, не задумываясь о лишних выбранных примитивах. Затем указываем блок маркера. Из выбранных элементов кодом фильтруются ИСХОДНЫЕ блоки с заданным в коде наименованием (в моем случае "BMP ComSlab Top"), подсчитывается количество таких блоков и затем данное количество записывается в атрибут блока маркера с тегом "NUMBER". Кроме того производится сверка атрибутов с совпадающими тегами между последним ИСХОДНЫМ блоком и блоком маркера и производится копирование значений атрибутов (собственно это часть кода от kp+).

P.S. Offtop: Подскажите плиз как в сообщение гифки вставлять чтоб не в прикрепленном а в самом сообщении. В прикрепленном выглядит как-то не очень.

Код:
[Выделить все]
 
(defun c:ATT_transf_and_count (/ count blk ATTS1 ATTS2)
  (vl-load-com)
  (setq count (countmyblk))
  (setq blk (vlax-ename->vla-object (car (entsel "Select TAG block:"))))
  (LM:vl-setattributevalue blk "NUMBER" count)
  (setq atts1 (vlax-invoke CURRENTBLK 'Getattributes))
  (setq atts2 (vlax-invoke blk 'Getattributes))
      (foreach att2 atts2
      (foreach att1 atts1
    (if (= (vla-get-tagstring att2)  (vla-get-tagstring att1))
      (vla-put-textstring att2 (vla-get-textstring att1))
     );if
      );foreach
    );foreach
);defun

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

(defun countmyblk( / ss s i n ent obj)
  (vl-load-com)
  (setq ss (ssget '((0 . "INSERT"))))
  (setq s 0)
  (if ss
    (progn
      (setq i 0)
      (setq n (sslength ss))
      (while (< i n)
    (setq ent (ssname ss i))
    (setq obj (vlax-ename->vla-object ent))
    (if (= "BMP ComSlab Top" (vlax-get obj 'EffectiveName))
      (setq s (+ s 1)
	    CURRENTBLK obj);setq
    );if
    (setq i (+ i 1))
      );while
     );progn
  );if
 s
);defun


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;


;; Set Attribute Value  -  Lee Mac
;; Sets the value of the first attribute with the given tag found within the block, if present.
;; blk - [vla] VLA Block Reference Object
;; tag - [str] Attribute TagString
;; val - [str] Attribute Value
;; Returns: [str] Attribute value if successful, else nil.

(defun LM:vl-setattributevalue ( blk tag val )
    (setq tag (strcase tag))
    (vl-some
       '(lambda ( att )
            (if (= tag (strcase (vla-get-tagstring att)))
                (progn (vla-put-textstring att val) val)
            )
        );lambda
        (vlax-invoke blk 'getattributes)
    );vl-some
);defun
Миниатюры
Нажмите на изображение для увеличения
Название: ATT_transf_and_count.gif
Просмотров: 38
Размер:	176.6 Кб
ID:	175806  
Вложения
Тип файла: dwg
DWG 2010
Sample.dwg (215.5 Кб, 13 просмотров)

Последний раз редактировалось Red Nova, 09.09.2016 в 05:21.
Red Nova вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Маркеровка динамических блоков. Автоматизация передачи данных в маркер.

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Руководство по созданию динамических блоков tanushka_ch Динамические блоки 20 25.11.2015 20:46
Сквозная нумерация динамических блоков zenon Программирование 212 02.09.2015 05:29
Добрый день! Нужно решить проблему. Имеется фасад с разложенными композитными кассетами. Кассеты в виде динамических блоков, где имеется высота и шири Геннадий Ганьков Программирование 7 25.06.2014 15:56
Проблема вставки Динамических блоков Владимир М Программирование 11 12.09.2007 15:42
Загрузка параметров дин. блоков из базы данных Дима_ Прочее. Программное обеспечение 11 04.09.2007 17:03