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

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

Динамический блок и значение атрибута

Ответ
Поиск в этой теме
Непрочитано 16.12.2005, 10:32 #1
Динамический блок и значение атрибута
_Andre_
 
механизатор
 
Самара
Регистрация: 28.12.2004
Сообщений: 312

Можно ли в динамическом блоке связать длину отрезка и длину значения атрибута?

Иными словами в составе блока есть линия выноска из двух отрезков и атрибута и нужно чтобы длина полки была равна длине значения атрибута.
Просмотров: 5987
 
Непрочитано 16.12.2005, 10:38
#2
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,283


Можно сделать, что в значение атрибута будет вписываться длинна отрезка.
Цитата:
длина значения атрибута
чета мне кажется неправильно сказано.
Используй вместо полочки %%U перед текстом содержимого атрибута - это будет подчеркивание и полочка. ИМХО
asys вне форума  
 
Автор темы   Непрочитано 16.12.2005, 13:23
#3
_Andre_

механизатор
 
Регистрация: 28.12.2004
Самара
Сообщений: 312
<phrase 1=


Цитата:
Используй вместо полочки %%U перед текстом содержимого атрибута
К сожалению в таком виде большинство пользователей не сможет использовать блок, так как будут забывать добавлять %%U. Либо использовать реаторы.

Но идея интересная, спасибо =)
_Andre_ вне форума  
 
Непрочитано 16.12.2005, 13:50
#4
asys

архитектор
 
Регистрация: 10.08.2005
Ростов-на-Дону
Сообщений: 5,283


Мне как-то понадобилось из блока слева (см. картинку) сделать блок как справа. Единственное что я с исходным блоком сделал - добавил паравметр видимости, который убирает кружок и все, остальное - все работа с атрибутом
[ATTACH]1134730311.jpg[/ATTACH]
asys вне форума  
 
Непрочитано 08.12.2006, 10:08
#5
bernata


 
Регистрация: 22.09.2005
здесь могла быть ваша реклама
Сообщений: 1,279


Доброе время суток, мой вопрос наверно ближе к теме "програмирование"...
но не хотелось забивать форум новой темой.

Есть блок с атрибутами. Как сделать так что бы при вставке этого блока атрибутам придавались произвольные числовые значения в промежутке от 1 до 4 включтительно с периодом 0.5 ?
Тоесть 0.5; 1; 1.5; 2; 2.5; 3; 3.5; 4.
По предварительным подсчётам вставить необходимо более 3500 блоков. А если задавать значения каждого атрибута в ручную, на это уйдёт целая весность.... Видимо без ЛИСПа тут не обойтись...
Образец блока в приложении.

Заранее благодарю за помощь.
Или по крайней мере за сочувствие....
[ATTACH]1165561678.dwg[/ATTACH]
bernata вне форума  
 
Непрочитано 08.12.2006, 10:23
#6
Кулик Алексей aka kpblc
Moderator

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


Что значит "произвольные"? Потому что как только будет прописан этот алгоритм, лиспово решение, думаю, появится.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.12.2006, 10:37
#7
bernata


 
Регистрация: 22.09.2005
здесь могла быть ваша реклама
Сообщений: 1,279


Да. Немного не корректно обозначил задачу.
При вставке блока каждому атрибуту в произвольном порядке д.б. указаны числовые значения от 1 до 4 включтительно с периодом 0.5
Тоесть в значениях атрибутов в хаотичном порядке должны чередоваться числа
0.5; 1; 1.5; 2; 2.5; 3; 3.5 и 4.

Сразу же возникает вопрос за чем это делается.
Дело в том, что в эксплуотацию сдаются законченные здания.
Естественно текущую документацию о геодезическом контроле за монтажными работами на объектах никто не вёл. И заказчик и подрядчик лазили с теодолитами и смотрели только что бы небыло отклонений выше допустимых.
А теперь заказчик вспомнил про исполнительную и требует что бы ему хоть какую-то документацию сделали с указанием отклонений, иначе объекты архнадзор не примет...
Ну и понятное дело побежали сразу ко мне...к генпланировщику
Ты мол архитектор - ты и найди выход из положения.
Ну а я понял, что в одиночку не справиться и бегом на форум за помощью
bernata вне форума  
 
Непрочитано 08.12.2006, 13:22
#8
bernata


 
Регистрация: 22.09.2005
здесь могла быть ваша реклама
Сообщений: 1,279


Упс... :cry:
видимо в ручную придётся проставлять все значения....
bernata вне форума  
 
Непрочитано 08.12.2006, 13:25
#9
Кулик Алексей aka kpblc
Moderator

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


Если вариант случайного ручного тырканья в блоки покатит, спробуй:
Код:
[Выделить все]
(defun c:try (/                               blk
              *kpblc-activedoc*               _kpblc-get-ent-no-error-by-type
              _kpblc-block-attr-get-pointer-mask
              )

  (defun _kpblc-block-attr-get-pointer-mask (blk mask / res)
    (setq res
           (vl-sort
             (vl-remove-if-not
               '(lambda (x)
                  (wcmatch (strcase (vla-get-tagstring x)) (strcase mask))
                  ) ;_ end of lambda
               (vlax-safearray->list (vlax-variant-value (vla-getattributes blk)))
               ) ;_ end of vl-remove-if-not
             '(lambda (a b)
                (< (strcase (vla-get-tagstring a)) (strcase (vla-get-tagstring b)))
                ) ;_ end of lambda
             ) ;_ end of vl-sort
          ) ;_ end of setq
    res
    ) ;_ end of defun

  (defun _kpblc-get-ent-no-error-by-type (enttype msg / res)
    (setvar "errno" 0)
    (setq msg (strcat "\n"
                      (vl-string-trim
                        "\n: "
                        (if (not msg)
                          (setq msg "Выберите элемент")
                          msg
                          ) ;_ end of if
                        ) ;_ end of vl-string-trim
                      " <Отмена> : "
                      ) ;_ end of strcat
          ) ;_ end of setq
    (if (/= (type enttype) 'list)
      (setq enttype (list enttype))
      ) ;_ end of if
    (setq enttype (mapcar 'strcase enttype))
    (while
      (and
        (setq res (entsel msg))
        (not (member (strcase (cdr (assoc 0 (entget (car res)))))
                     enttype
                     ) ;_ end of member
             ) ;_ end of not
        ) ;_ end of or
       (princ "\nОшибка выбора примитива - не тот тип")
       (setvar "errno" 0)
       ) ;_ end of while
    (if res
      (list (car res) (trans (cadr res) 1 0))
      ) ;_ end of if
    ) ;_ end of defun

  (vl-load-com)
  (vla-startundomark
    (setq *kpblc-activedoc* (vla-get-activedocument (vlax-get-acad-object)))
    ) ;_ end of vla-StartUndoMark
  (setq counter 0.5)
  (while (and (setq blk (_kpblc-get-ent-no-error-by-type "INSERT" nil))
              (= (cdr (assoc 66 (entget (car blk)))) 1)
              ) ;_ end of and
    (vl-catch-all-apply
      (function (lambda ()
                  (vla-put-textstring
                    (car (_kpblc-block-attr-get-pointer-mask
                           (vlax-ename->vla-object (car blk))
                           "verh"
                           ) ;_ end of _kpblc-block-attr-get-pointer-mask
                         ) ;_ end of car
                    (rtos counter 2 2)
                    ) ;_ end of vla-put-TextString
                  (setq counter (if (>= counter 4.)
                                  4.
                                  (+ counter 0.5)
                                  ) ;_ end of if
                        ) ;_ end of setq
                  ) ;_ end of lambda
                ) ;_ end of function
      ) ;_ end of vl-catch-all-apply
    ) ;_ end of while
  (vla-endundomark *kpblc-activedoc*)
  (princ)
  ) ;_ end of defun

(princ "\nНаберите try в ком.строке для запуска")
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.12.2006, 14:08
#10
bernata


 
Регистрация: 22.09.2005
здесь могла быть ваша реклама
Сообщений: 1,279


Уважаемый КрЫс !!!
Это просто гениально !!!
Код просто супер !!! Теперь поменяв названия TAGов в атрибутах любого блока, или поменяв TAG атрибута в твоём коде: "verh" на любой другой необходимый - можно работать с кучей других блоков !!!
Прсто в точку.
Теперь копирую блоки масивом, а потом просто тыкая мышкой меняю значения. КрЫс - ты сэкономил как минимум 50 часов моей жизни!
Спасибо огромное !!! [img]sm/sm166.gif[/img]
bernata вне форума  
 
Непрочитано 08.12.2006, 14:12
#11
Кулик Алексей aka kpblc
Moderator

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


Значится так. Можно поменять код (совсем чуток) и, к примеру, для блоков с именем "BlockName" и атрибутом с тэгом "AttTag" будет идти одна нумерация (к примеру, шаг 0.1; в диапазоне от -10 до +12.6), для другого (соответственно "NewName" и "NewTag") - по другому принципу. Ну как, надо такое?
Единственное "но". Мне просто лень, если честно, делать нумерацию сразу для 2 и более атрибутов (там же может быть разная последовательность, и диапазоны тож разные).
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 08.12.2006, 14:38
#12
bernata


 
Регистрация: 22.09.2005
здесь могла быть ваша реклама
Сообщений: 1,279


Спасибо, пока нестоит усложнять.
Попытаюсь выжать максимум для полезного для себя разобравшись с кодом самостоятельно. По скольку я "чайник" в ЛИСПе - потребуется время. Пока что конструктивный вопрос сформулировать немогу.
Но чуть позже обязательно спрошу.
Ещё раз спасибо ОГРОМНОЕ !
bernata вне форума  
 
Непрочитано 08.12.2006, 15:29
#13
VVA

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


Пока меня отвлекали работой, тут уже все сотворили.
Вариан со вставкой блока
Код:
[Выделить все]
;;; name - имя блока
(defun ins321 ( name / attd attr *error* adoc Xm Ym Ug)
(defun *error* (msg)(princ msg)
    (setvar "ATTDIA" attd)(setvar "ATTREQ" attr))
(defun round (value to)
 (cond((zerop to) value)
   (t (setq to (abs to))(* to (fix (/ ((if (minusp value) - +)
    value (* to 0.5) )  to)))))) ;_ end of defun
;defun
(defun r_i ( s / i j k lst)
    (setq j (menucmd "M=$(edtime,$(getvar,date),MSEC)"))(repeat 20 (princ))
    (setq i(menucmd "M=$(edtime,$(getvar,date),MSEC)"))
    (setq i (VL-LIST->STRING(reverse(VL-STRING->LIST i))))
    (setq j (substr j 3 1))(repeat 20 (princ))
    (setq k (substr (menucmd "M=$(edtime,$(getvar,date),MSEC)") 2 1))
    (setq i (substr i 1 1))(setq lst (list i j k))
    (setq i (strcat (nth (rem s 3) lst)(nth (rem (+ s 1) 3)lst)(nth (rem (+ s 2) 3)lst)))
    (setq i (* (atof i) 0.01)))
(defun set_all_att_random (blk_obj / i at)(setq i 0)
 (if (eq (type blk_obj) 'ENAME)(setq blk_obj (vlax-ename->vla-object blk_obj)))
  (if (and (= (vla-get-ObjectName blk_obj) "AcDbBlockReference")
	   (vlax-property-available-p blk_obj 'Hasattributes)
	   (vlax-read-enabled-p blk_obj)(vlax-write-enabled-p blk_obj))
      (progn
        (mapcar '(lambda (x)(while (> (setq at (r_i (setq i (1+ i)))) 8.49))
              (setq at (round at 0.5) at (rtos at 2 1) at (vl-string-right-trim ".0" at))  
	      (vla-put-TextString x at))
      (vlax-invoke blk_obj 'Getattributes))))
(vla-update blk_obj))
(vl-load-com)
(setq  attd (getvar "ATTDIA") attr (getvar "ATTREQ"))
 (setq Xm 1       ;_Масштаб по Х  nil - запрос
       Ym 1       ;_Масштаб по Y  nil - запрос
       Ug nil     ;_Угол поворота nil - запрос
       )
(setvar "attdia" 0)
(setvar "attreq" 0)
(setvar "CMDECHO" 1)    
(command "_INSERT" (if name name pause) ;_Имя
	           pause                ;_Точка вставки
	         (if Xm Xm pause) ;_Масштаб по Х
	         (if Ym Ym pause) ;_Масштаб по Y
	         (if Ug Ug pause) ;_Угол поворота
	 )
(setvar "ATTDIA" attd)(setvar "ATTREQ" attr)
(set_all_att_random (entlast))
(princ)
    )
(defun C:ins321 (  / name )
    (princ "\nESC - выход")
    (while t (ins321 "321")) ;_321 - имя блока
(princ))
Там все в коментариях. По умолчанию блок 321
VVA вне форума  
 
Непрочитано 08.12.2006, 16:13
#14
MIP

инженер
 
Регистрация: 13.12.2004
Минск
Сообщений: 496


>>VVA
Оказываеться...
Цитата:
меня отвлекали работой
Надо чаще будет отвлекать!!!!
А то расслабуха пошла!!! :twisted:
MIP вне форума  
 
Непрочитано 08.12.2006, 16:38
#15
bernata


 
Регистрация: 22.09.2005
здесь могла быть ваша реклама
Сообщений: 1,279


VVA cпасибо за поддержку!
Да. Этот код исчерпывающе выолняет алгоритм.
В половину работы уже навставлял блоков для последующей обработки значений переменных кодом от kpbIc`a, оставшуюся половину сделаю кодом VVA.
На выходных будет чем заняться.
Постараюсь самостоятельно разобраться с кодами.
Ещё раз спасибо ОГРОМНОЕ !!!
bernata вне форума  
 
Непрочитано 08.12.2006, 23:55
#16
bernata


 
Регистрация: 22.09.2005
здесь могла быть ваша реклама
Сообщений: 1,279


Цитата:
Сообщение от MIP
А то расслабуха пошла!!! :twisted:
Ну так пятница же !
:P
bernata вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > AutoCAD > Динамические блоки > Динамический блок и значение атрибута

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

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