Бързи справки по критерии в атрибутите на блоковете

Безплатни 20 урока
регистрирай се и научи

Ако сте вече потребител - Регистриран съм
Видео

Тест за преминаване към следващия урок

 
Можем ли да търсим по стойности на атрибут в AutoCAD?
Не, това е невъзможно с AutoCAD и никъде не е документирано
Да, първо избираме блоковете за този атрибут и после с FIND търсим по атрибута
Да, само с външна autolisp програмка

Въпроси и отговори

  • Find не търси в атрибути с invisible=Yes

    Иван Цукев:

    Трябва да се отбележи, че find не търси в скрити атрибути.

    Гергана Касърова:

    Това уточнение е важно!

    VAiOS:

    Току що пробвах това на версия 2018 и всъщност ТЪРСИ. Може би, защото е по-нова версия, но като махна отметката на "Ignore hidden items" (снимка) си търси и в атрибути с invisible=Yes. Използвал съм файла към упражнението.

  • Краси Кръстев:

    Здравей, предполгам че болтовете гайките и т.н. са с различни големини, ако им за всеки различен вид от даден елемент имаш различен блок с различно име, няма проблем да направиш една бърза справка по име ( с QP ) за дадения блок - слектирай ми блоковете с име M12 ( т.е. болтове M12 ) и съответно в properties да видиш тяхната бройка. АКо искаш да ги извадиш за количествена сметка с dataextraction тогава просто като информация при dataextraction извади блоковете с тяхното име като сложиш и колона count и съответно кажеш тази колона count да ти събира блоковете с едно и също име и така срещу всяко име на блок ще си изкараш бройката.

    Все пак ако искаш повече информация и имаш доста различния в блковете може с наученото от курса да ги направиш по - хитри с атрибути на различни visibility - та и т.н. да не навлизам в много подробности в курса относно ваденето на количества има доста показани неща, във форума ако поразтърсите има и доста теми и коментари на тази тема за вадене на количества бързи справки, както и други алетрнативни методи за вадене на количества.
    Надявам се да съм бил полезен с отговора и да съм ви насочил, ако срещнете затрунения пишете тук за допълнителни разяснения.
  • Защо не се променя?

    Албена Стойкова:

    Здравейте, влизам в block edit и задавам на последните 3 невидими атрибута - invisible-yes, за да мога да ги използвам за филтриране , но не се променят,остават си невидими.

    Краси Кръстев:

    ATTSYNC, за вече въведениете блокове направили ?

    Албена Стойкова:

    Не съм. Благодаря!

  • Как може да се търси ако имаме дублаж в стойностите?

    VAiOS:

    Трика от видеото е много полезен. Ползвам го често. В общия случай върши страхотна работа.

    За съжаление съм се сблъсквал и със следния проблем - дублиращите се стойности в различните атрибути.

    пример: излолзвам блока за врата от урока. Имам атрибут ВИСОЧИНА със стойност 210

    и атрибут ЦЕНА, в която също имам стойност 210.

    Как лесно и бързо да накарам да търси само във ВИСОЧИНА ?

    Ако някой знае някакъв трик - моля да сподели.

    Краси Кръстев:

    Здравей,

    Ето този LISP ще свърши работата, която искаш -

    (defun C:SelBlksByAttTag ( / msg dcl des dch dcf r )
    
     (vl-some (function (lambda (x / msg) (and (vl-catch-all-error-p (setq msg (vl-catch-all-apply (eval x)))) (prompt (strcat "\nError: " (vl-catch-all-error-message msg))))))
       '(
         (function 
           (lambda nil 
             (and (setq dcl (vl-filename-mktemp nil nil ".dcl")) (setq des (open dcl "w"))
               (mapcar (function (lambda (x) (princ (strcat "\n" x) des))) 
                 '("SelBlksByAttTag : dialog"
                   "{ label = \"Select by Attribute\"; spacer_1;"
                   "  : boxed_column"
                   "  { label = \"Attribute options\";"
                   "    : toggle { label = \"Tag\"; key = \"at\"; value = 1; }"
                   "    : toggle { label = \"Value\"; key = \"av\"; value = 1; }"
                   "  }"
                   "  spacer;"
                   "  : boxed_radio_column"
                   "  { label = \"Block Selection\";"
                   "    : radio_button { label = \"All\"; key = \"sx\"; value = 1; }"
                   "    : radio_button { label = \"Manual\"; key = \"ss\"; }"
                   "  }"
                   "  spacer;"
                   "  : column"
                   "  {"
                   "    : toggle { label = \"Same Name Blocks\"; key = \"b\"; alignment = centered; }"
                   "  }"
                   "  spacer_1; ok_cancel; : text { key = \"error\"; }"
                   "}"
                 ); list
               ); mapcar
               (not (setq des (close des))) (< 0 (setq dch (load_dialog dcl))) (new_dialog "SelBlksByAttTag" dch)
               (progn 
                 (action_tile "accept"
                   (vl-prin1-to-string
                     (quote
                       (
                         (lambda ( / tmp )
                           (cond 
                             ( (not (setq tmp (apply &#039;append (mapcar &#039;(lambda (x) (if (= "1" (get_tile x)) (list x))) &#039;("at" "av")))))
                               (set_tile "error" "Specify Attribute Option!")
                             )
                             ( (setq r (append (list (= "1" (get_tile "b"))) (vl-some &#039;(lambda (x) (if (= "1" (get_tile x)) (list x))) &#039;("sx" "ss")) tmp))
                               (done_dialog 1) 
                             )
                           ); cond
                         ); lambda
                       )
                     ); quote
                   ); vl-prin1-to-string
                 ); action_tile
                 (/= 1 (setq dcf (start_dialog)))
               ); progn
               (setq r nil)
             ); and
           ); lambda
         ); function 
         (function 
           (lambda ( / nfo SS L )
             (cond
               ( (not r) )
               ( 
                 (not
                   (setq nfo
                     (&#039;((f)(setvar &#039;errno 0) (f))
                       &#039;(( / e enx o )
                         (cond
                           ( (= 52 (getvar &#039;errno)) nil)
                           (
                             (or
                               (not (setq e (car (nentsel "\nPick Attribute <exit>: ")))) 
                               (not (member &#039;(0 . "ATTRIB") (setq enx (entget e)))) 
                               (and (= 7 (getvar &#039;errno)) (princ "\nMissed, try again.") (setvar &#039;errno 0))
                             )
                             (f)
                           )
                           ( (setvar &#039;errno 52) (setq o (vlax-ename->vla-object e))
                             (cons (vla-get-EffectiveName (vlax-ename->vla-object (cdr (assoc 330 enx)))) (mapcar &#039;(lambda (x) (vlax-get o x)) &#039;(TagString TextString)))
                           )
                         )
                       )
                     )
                   ); setq nfo
                 ); not
               )
               (
                 (not
                   (setq SS 
                     (ssget (cdr (assoc (cadr r) &#039;(("ss" . "_:L-I")("sx" . "_X")))) 
                       (append 
                         &#039;((0 . "INSERT") (66 . 1))
                         (if (car r) (list (cons 2 (strcat "`**," (car nfo)))))
                         (list (if (= 1 (getvar &#039;cvport)) (cons 410 (getvar &#039;ctab)) &#039;(410 . "Model")))
                       ); append
                     ); ssget
                   ); setq SS
                 ); not
               )
               (
                 (
                   &#039;(( b / bnm i o ) 
                     (setq i (sslength SS))
                     (cond 
                       (b
                         (setq bnm (car nfo))
                         (repeat i (and (eq bnm (vla-get-EffectiveName (setq o (vlax-ename->vla-object (ssname SS (setq i (1- i))))))) (setq L (cons o L))))
                       ); b
                       ( (repeat i (setq L (cons (vlax-ename->vla-object (ssname SS (setq i (1- i)))) L))) )
                     ); cond
                     (not L)
                   ); list
                   (car r)
                 )
               )
               (
                 (
                   &#039;(( m v / nSS ) 
                     (setq nSS (ssadd))
                     (vl-some (function (lambda (a b) (if (equal a m) (eval b))))
                       &#039;(("at" "av")("at")("av"))
                       &#039;(
                         (foreach x L (and (vl-some &#039;(lambda (att) (equal v (mapcar &#039;(lambda (xx) (vlax-get att xx)) &#039;(TagString TextString)))) (vlax-invoke x &#039;GetAttributes)) (ssadd (vlax-vla-object->ename x) nSS)))
                         (progn (setq v (car v)) (foreach x L (and (vl-some &#039;(lambda (att) (eq (vlax-get att &#039;TagString) v)) (vlax-invoke x &#039;GetAttributes)) (ssadd (vlax-vla-object->ename x) nSS))))
                         (progn (setq v (cadr v)) (foreach x L (and (vl-some &#039;(lambda (att) (eq (vlax-get att &#039;TextString) v)) (vlax-invoke x &#039;GetAttributes)) (ssadd (vlax-vla-object->ename x) nSS))))
                       ); list
                     ); vl-some
                     (sssetfirst nil nSS)
                   ); list
                   (cddr r)
                   (cdr nfo)
                 )
               )
             ); cond
           ); lambda
         ); function
       ); list
     ); vl-some
    
     &#039;(((87 114 105 116 116 101 110 32 98 121) (71 114 114 114) (67 114 101 100 105 116 115 32 116 111) (76 101 101 32 77 97 99))
       (104 116  116  112 58 47 47 119  119 119 46 99 97 100 116  117 116  111 114 46 110   101  116  47 102 111 114 117 109 47 115 104 111  119    116 104 114 101 97 100 
         46 112 104 112 63 49 48    50 55 56 54 45 83 101 108 101 99 116  45 98 108  111 99 107 115 45 98 121 45 97 116 116 114 105 98 117 116 101 45 84 65 71
       )
     )
    
     (vl-catch-all-apply &#039;eval
       &#039;(
         (progn
           (and (< 0 dch) (unload_dialog dch))
           (and (eq &#039;FILE (type des)) (close des))
           (and (eq &#039;STR (type dcl)) (findfile dcl) (vl-file-delete dcl))
         ); progn
       ); list
     ); vl-catch-all-apply
     (princ)
    ); defun
    (vl-load-com) (princ)
    

    Зарежда се като нормален Лисп ... селектира на база TAG или Value на точно определен атрибут, като избора на този тончо определен атрбут е с цъкане, т.е. ако искаш да селелктираш блоковете с атрибутна информация Височина и стоиност на височината 200, трябва да кликнеш върху такъв атрибут и ще ти селектира всички блокове с дадения атрибут с дадената стойност.

    VAiOS:

    Тоя лисп е страхотен, Краси!

    Не знам от къде ги вадиш, но ти Благодаря!

    Краси Кръстев:

    Моля!

    Супер е че ти върши работа.

    VAiOS:

    Дори успешно търси в атрибути с invisible=Yes...стига преди това да съм ги направил видими на екрана като сменя временно състоянието на ATTDISP от "Normal" на "ON"