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

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

Сквозная нумерация динамических блоков

Ответ
Поиск в этой теме
Непрочитано 18.09.2007, 17:45
Сквозная нумерация динамических блоков
zenon
 
Остекляем!!! Алюминим!!!
 
Москва
Регистрация: 21.02.2005
Сообщений: 3,826

Назрело!
В связи с введением динамических блоков начиная с AutoCAD2006, по роду моей деятельности появилась возможность рисовать монтажную схему стоек с указание ее длины в аттрибуте, с автоматическим изменением аттрибута в зависимости от удлинения стойки.
Поэтому назрел вопрос о сквозной нумерации, то бищь присвоении 2му аттрибуту номера стойки в зависимости от ее длины.
см. чертеж
[ATTACH]1190123036.dwg[/ATTACH]
Можно ли расстановку позиций реализовать программно?
ps предварительно расставив стойки.
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
Просмотров: 88546
 
Непрочитано 29.07.2008, 14:07
#121
Кулик Алексей aka kpblc
Moderator

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


http://dwg.ru/f/showpost.php?p=236819&postcount=1
http://dwg.ru/f/showthread.php?t=8940
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 04.08.2008, 09:01
#122
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,535
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Очень нужная тема!
А можно сделать тоже самое, но уже отталкиваться от 2х свойств?
У меня динамический блок - панель. Размеры меняются динамически, а позицию я присваиваю вручную. Типа А1, А2... На небольшой объект доходит до 200 типов
Кроме того можно и сбиться, а потом искать где ввел 2 одинаковых имени для разных размеров. Контролирую наличие с помощью _dataextraction.
Отличия моего блока:
- определяющие размеры "длина" и "ширина" - свойства д.блока
- шаг изменения 1 мм. (закреплено в свойствах д.блока)
- нет атрибутов "длина" "ширина"(свойства д.блоков извлекаются также хорошо, как и читаются лиспом)
- маркировка блоков м.б. А1,А2... B1, B2...где буква означает цвет панели, а цифра - уникальное сочетание длины и ширины.

Блок прилагается.
Вложения
Тип файла: rar кассета.rar (249.2 Кб, 201 просмотров)
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 05.08.2008, 14:26
#123
OHUKC


 
Регистрация: 29.07.2008
Сообщений: 55


ПриветА не подскажите почему в динамических блоках штриховкавнутри тела при изменении не растягивается??
или ссылку на сообщение киньте пожалуйста на что-нить похожее
OHUKC вне форума  
 
Автор темы   Непрочитано 05.08.2008, 15:27
#124
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,826
<phrase 1=


Цитата:
Сообщение от OHUKC Посмотреть сообщение
ПриветА не подскажите почему в динамических блоках штриховкавнутри тела при изменении не растягивается??
или ссылку на сообщение киньте пожалуйста на что-нить похожее
Мне так думается, что штриховка не ассоциативная, нет???
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 05.08.2008, 15:58
#125
OHUKC


 
Регистрация: 29.07.2008
Сообщений: 55


а поподробнее))где мне ассоциативность штриховки указать????
OHUKC вне форума  
 
Автор темы   Непрочитано 05.08.2008, 16:13
#126
zenon

Остекляем!!! Алюминим!!!
 
Регистрация: 21.02.2005
Москва
Сообщений: 3,826
<phrase 1=


Цитата:
Сообщение от OHUKC Посмотреть сообщение
а поподробнее))где мне ассоциативность штриховки указать????
ассоциативность задается при создании штриховки
__________________
Мы можем делать быстро, качественно и недорого, выбирайте любые 2 условия.:search:
zenon вне форума  
 
Непрочитано 05.08.2008, 16:26
#127
OHUKC


 
Регистрация: 29.07.2008
Сообщений: 55


посмотри пожалуйста...чёт у меня ничё не получается
Вложения
Тип файла: dwg
DWG 2004
узел.dwg (653.4 Кб, 1381 просмотров)
OHUKC вне форума  
 
Непрочитано 06.08.2008, 03:08
#128
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,535
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Цитата:
Сообщение от OHUKC Посмотреть сообщение
а поподробнее))где мне ассоциативность штриховки указать????
http://dwg.ru/f/showthread.php?t=8940&page=28

пост 553
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)

Последний раз редактировалось wetr, 06.08.2008 в 03:39.
wetr вне форума  
 
Непрочитано 06.08.2008, 10:37
#129
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,535
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Ассоциативность штриховки указывается при ее создании. Просто поставь галочку "Associative"
Миниатюры
Нажмите на изображение для увеличения
Название: 1111.jpg
Просмотров: 176
Размер:	66.6 Кб
ID:	9023  
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 06.08.2008, 10:56
#130
OHUKC


 
Регистрация: 29.07.2008
Сообщений: 55


спасибо..поставил...тока всё-равно нифига не растягивается
OHUKC вне форума  
 
Непрочитано 06.08.2008, 11:42
#131
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,535
<phrase 1= Отправить сообщение для wetr с помощью Skype™


читай по ссылке в 128 посте - здесь не та тема
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 06.08.2008, 11:50
#132
Кулик Алексей aka kpblc
Moderator

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


wetr, это относилось к удаленному посту OHUKC'a, как я понимаю?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 06.08.2008, 13:59
#133
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,535
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Кулик Алексей aka kpblc, это относится к посту №130
Цитата:
спасибо..поставил...тока всё-равно нифига не растягивается
А по моему вопросу не выскажешь мнение (№122)?
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 06.08.2008, 21:21
#134
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992
<phrase 1= Отправить сообщение для VVA с помощью Skype™


wetr,
Особо не проверял. Файл для примера в #122
Код:
[Выделить все]
;_ Маркировка динамических блоков для Wetr
(defun c:NDB_W ( / adoc ss name bname lst lstLen poz attTo 
                            *error* dynProp1 dynProp2 dp1 dp2 i
              )
;;;================================================
;;;======== НАСТРОЙКИ ПРОГРАММЫ ===================
;;;================================================
 (vl-load-com)
 (defun *error* (msg)(princ msg)(vla-EndUndoMark adoc)) 
  (setq bname "*") ;_Имя блока 
  (setq dynProp1 "Высота(H) кассеты") ;_Имя динамического свойства1
  (setq dynProp2 "Ширина(B) кассеты") ;_Имя динамического свойства1
  (setq attTo "NAME") ;_Имя аттрибута куда вбивать

  (setq adoc (vla-get-activedocument (vlax-get-acad-object))) 
;;;============================================================= 
;;;====================== MAIN PART ============================ 
;;;============================================================= 
  (vla-StartUndoMark adoc)
  (setq *PREF* (mip-conv-to-str *PREF*))
  (setq *SUFF* (mip-conv-to-str *SUFF*))
  (princ "\nВведите префикс или Пробел - нет <")(princ *PREF*)(princ ">: ")
  (setq poz (getstring t))
  (if (/= poz "")(setq *PREF* poz))(if (= poz " ")(setq *PREF* ""))
  (princ "\nВведите суффикс или Пробел - нет <")(princ *SUFF*)(princ ">: ")
  (setq poz (getstring t))
  (if (/= poz "")(setq *SUFF* poz))(if (= *SUFF* " ")(setq *SUFF* ""))
  (if (and (setq ss (ssget  '((0 . "INSERT")(66 . 1))))
	   (princ "\nЭтап 1. Построение списка блоков.")
           (setq lstLen (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss))))
           )
    (progn
      (princ "\nЭтап 2. Анализ блоков.")
      (setq i 0  lstLen (mapcar 'vlax-ename->vla-object lstlen))
      (foreach blk lstLen
        (setq name (cond 
                     ((and (vlax-property-available-p blk 'isdynamicblock) 
                           (= (vla-get-isdynamicblock blk) :vlax-true) 
                           ) ;_ end of and 
                      (vla-get-effectivename blk) 
                      ) 
                     (t (vla-get-name blk)) 
                     ) ;_ end of cond
	      i (1+ i)
              ) ;_ end of setq 
        (if (and (wcmatch (strcase name)(strcase bname))
		 (setq dp1 (GetDynamicBlockPropertyNameValue blk dynProp1))
		 (setq dp2 (GetDynamicBlockPropertyNameValue blk dynProp2))
		 )
	  (progn
          (setq lst (cons (strcat (itoa(fix dp1))":"(itoa(fix dp2))) lst))
	  )
	  ) 
         ;_ end of if 
        ) ;_ end of foreach
      (princ "... Обработано ")(princ i)(princ " блоков")
      (princ "\nЭтап 3. Построение списка из уникальных значений.")
      (setq lst (mip_MakeUniqueMembersOfList lst))
      (princ "\nЭтап 4. Обновление атрибутов блоков.")(setq i 0)
      (foreach blk lstLen
        (setq name (cond 
                     ((and (vlax-property-available-p blk 'isdynamicblock) 
                           (= (vla-get-isdynamicblock blk) :vlax-true) 
                           ) ;_ end of and 
                      (vla-get-effectivename blk) 
                      ) 
                     (t (vla-get-name blk)) 
                     ) ;_ end of cond
	      i (1+ i)
              ) ;_ end of setq 
        (if (and (wcmatch (strcase name)(strcase bname))
		 (setq dp1 (GetDynamicBlockPropertyNameValue blk dynProp1))
		 (setq dp2 (GetDynamicBlockPropertyNameValue blk dynProp2))
		 (setq poz (vl-position (strcat (itoa(fix dp1))":"(itoa(fix dp2))) lst))
		 )
	  (progn
          (mip-block-setattr-bylist blk
              (list (cons (strcase attTo)(strcat *PREF* (itoa (1+ poz)) *SUFF*))))
	  )
	  ) 
         ;_ end of if 
        ) ;_ end of foreach
      (princ "... Обновлено ")(princ i)(princ " атрибутов в блоках \n")
      (vla-regen adoc acactiveviewport) 
      ) ;_ end of progn 
    ) ;_ end of if
  (vla-EndUndoMark adoc)
  (princ) 
  )

(defun GetDynamicBlockPropertyList (obj / lstProperties)
 (if (and (vlax-property-available-p obj "IsDynamicBlock")
          (= (vla-get-IsDynamicBlock obj) :vlax-true)
          (setq lstProperties (vlax-safearray->list 
                                           (variant-value 
                                            (vla-GetDynamicBlockProperties obj)))))
  (progn
   (mapcar '(lambda (x)(list (vla-get-propertyname X)
                             (variant-value (vla-get-value X))
                             x
                             )) 
           lstProperties))))
(defun GetDynamicBlockPropertyNameValue ( obj PropertyName / Plist)
  (and
  (setq PropertyName (strcase PropertyName))
  (setq Plist (GetDynamicBlockPropertyList obj))
  (setq Plist (car(vl-remove-if-not '(lambda (x)
                                   (= (strcase (car x)) PropertyName))
                Plist
                ))
        )
  )
   (cadr Plist)
  )
(defun mip-block-setattr-bylist (obj att_list / txt lst) 
(if (= (type obj) 'ENAME)(setq obj (vlax-ename->vla-object obj))) 
(setq att_list (mapcar '(lambda(x)(cons (strcase (mip-conv-to-str(car x)))(mip-conv-to-str(cdr x)))) att_list)) 
  (if (and obj 
           (not(vlax-erased-p obj)) 
           (= (vla-get-ObjectName obj) "AcDbBlockReference") 
      (eq :vlax-true (vla-get-HasAttributes obj)) 
      (vlax-property-available-p obj 'Hasattributes) 
      (vlax-write-enabled-p obj) 
      ) 
    (vl-catch-all-apply 
      (function 
   (lambda   () 
          (foreach at (vlax-invoke obj 'Getattributes) 
            (if (setq lst (assoc(strcase(vla-get-TagString at)) att_list)) 
              (vla-put-TextString at (cdr lst)) 
            ) 
            ) 
          ) 
        ) 
      ) 
    ) 
  ) 
(defun mip-conv-to-str (dat) 
  (cond ((= (type dat) 'INT)(setq dat (itoa dat))) 
         ((= (type dat) 'REAL)(setq dat (rtos dat 2 12))) 
        ((null dat)(setq dat "")) 
        (t (setq dat (vl-princ-to-string dat))))) 
(defun mip-put-hyperlink (ENAME URLDescription) 
  (if (eq (type ENAME) 'ENAME) 
    (setq ENAME (vlax-ename->vla-object ENAME)) 
  ) ;_ end of if 
  (vlax-for hyp (vla-get-hyperlinks ENAME) (vla-delete hyp)) 
  (vla-add (vla-get-hyperlinks ENAME) 
           "about:blank" 
           URLDescription 
  ) ;_ end of vla-add 
) ;_ end of DEFUN 

;;;Удаляет одинаковые (дубликаты) элементы из списка 
;;;(defun mip_MakeUniqueMembersOfList  ( lst / OutList head) 
;;;  (while lst 
;;;    (setq head (car lst) 
;;;          lst (vl-remove head lst) 
;;;          OutList (append OutList (list head)))) 
;;;  OutList 
;;;  ) 
(defun mip_MakeUniqueMembersOfList  ( lst / OutList head) 
  (while lst 
    (setq head (car lst) 
          lst (vl-remove-if '(lambda(pt)(equal pt head 1e-6)) lst) 
          OutList (append OutList (list head)))) 
  OutList 
  ) 
(defun member-i ( lst num / i) 
 (setq i 0)(while (and lst (not(equal (car lst) num 1e-6))) 
    (setq i (1+ i) lst(cdr lst))) 
  (if (equal (car lst) num 1e-6) i nil)) 
  (defun get-all-atts (obj) 

  (if (and obj 
      (eq :vlax-true (vla-get-HasAttributes obj)) 
      (vlax-property-available-p obj 'Hasattributes) 
       
      ) 
    (vl-catch-all-apply 
      (function 
   (lambda   () 
     (mapcar (function (lambda (x) 
               (cons (vla-get-TagString x) 
                (vla-get-TextString x) 
               ) 
             ) 
        ) 
        (append (vlax-invoke obj 'Getattributes) 
           (vlax-invoke obj 'Getconstantattributes) 
        ) 
     ) 
   ) 
      ) 
    ) 
  ) 
)
Настройки см. здесь
Код:
[Выделить все]
  (setq bname "*") ;_Имя блока 
  (setq dynProp1 "Высота(H) кассеты") ;_Имя динамического свойства1
  (setq dynProp2 "Ширина(B) кассеты") ;_Имя динамического свойства1
  (setq attTo "NAME") ;_Имя аттрибута куда вбивать
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 08.08.2008 в 12:07. Причина: Новая редакция
VVA вне форума  
 
Непрочитано 07.08.2008, 08:07
#135
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,535
<phrase 1= Отправить сообщение для wetr с помощью Skype™


VVA, очередное мега СПАСИБО
Работает как надо, даже с разными блоками (именами). Думаю эту наработку - блок и лисп - нужно взять многим фасадчикам на вооружение!
Offtop: ЗЫ Как расшифровывается "mip" ?
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 07.08.2008, 12:08
#136
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992
<phrase 1= Отправить сообщение для VVA с помощью Skype™


wetr, mip - МинскИнжПроект
Имена обрабатываемых блоков можно задавать здесь
Код:
[Выделить все]
(setq bname "*") ;_Имя блока
по шаблонам wcmatch:
(setq bname "*") ;_Все имена
(setq bname "B*");_С именами, начинающимися на B
(setq bname "B#*");_С именами, начинающимися на B и следующей цифрой
__________________
Как использовать код на Лиспе читаем здесь

Последний раз редактировалось VVA, 07.08.2008 в 12:21.
VVA вне форума  
 
Непрочитано 08.08.2008, 02:05
#137
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,535
<phrase 1= Отправить сообщение для wetr с помощью Skype™


VVA, а можно сделать, чтобы программа запоминала последний введенный суффикс и префикс?
Смотрю в к.строку:
Введите префикс или Пробел - нет <A>:
кажется нажму пробел - будет А по умолчанию - а получается, что вообще нет никакого префикса.
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
 
Непрочитано 08.08.2008, 12:08
#138
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,992
<phrase 1= Отправить сообщение для VVA с помощью Skype™


wetr, Обновил код в #134
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 21.12.2009, 16:50
#139
Crane


 
Регистрация: 07.05.2009
Астрахань
Сообщений: 103


Цитата:
всё разобрался как запускать....клёвая прога
А можно повторить для особо одаренных ). В каком посте взять работающий лисп-файл для маркировки элементов по длинам. Как лисп подгрузить в акад вроде ясно. Запускать его потом из ком.строки?
__________________
Debes, ergo potes
Crane вне форума  
 
Непрочитано 22.12.2009, 03:02
#140
wetr

инженер
 
Регистрация: 09.08.2006
Владивосток
Сообщений: 1,535
<phrase 1= Отправить сообщение для wetr с помощью Skype™


Crane, лисп завязан на определенный блок с конкретными названиями свойств. Выложи свой блок сюда, если ничего не получается
__________________
14 Ибо если вы будете прощать людям согрешения их, то простит и вам Отец ваш Небесный (Мф 6, 14)
wetr вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Сквозная нумерация динамических блоков

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