_

Spis elementów przy użyciu Dataextraction

Forum poświęcone flagowemu produktowi oraz aplikacjom pochodnym Autodesku. To jedyne forum mające w tytule nazwę programu, a to ze względu na jego olbrzymią popularność w Polsce. Można tutaj umieszczać również posty z ogólnie pojętej tematyki "Kreślarskie 2D".

Spis elementów przy użyciu Dataextraction

Postprzez Heniekag » sty 15, 2018 14:08

Witam

Mam rysunek na którym mam sporo różnych bloków dynamicznych (użytych w różnych "widzialnościach") ale wszystkie one maja jeden atrybut, w którym definiuję co to za element.
Wygląda to tak, że mam dokument Excela, gdzie mam spis wszystkich elementów i każdemu elementowi przyporządkowany jest numer, a dodatkowo znajdują się tam opisy każdego elementu.
Teraz mam takich rysunków kilkanaście (czasami kilkadziesiąt - zależy od projektu).
W momencie gdy rysunek jest gotowy, odpalam dataextraction i po atrybucie zlicza jest ilość elementów a poprzez pod podlinkowanie pliku Excela, AutoCAd wybiera sobie opis do odpowiednich elementów ze spisu elementów.
Wszystko ładnie działa ale ma jeden mankament. Nie mam w otrzymanej tabeli spisu elementów symboli elementów.
Zastanawiam się teraz jak najlepiej uzyskać taki symbol.
Widzę dwie drogi:
- Pierwsza, to znaleźć sposób aby w Excelu w odpowiedniej komórce umieścić odpowiedni symbol - ale to to chyba tylko poprzez stworzenie swojej palety fontów i wgranie jej na kompa - i wgranie jej na wszystkie inne komputery, na których będzie ten system wykorzystywany - niezbyt fajny sposób.
- Druga, to znaleźć sposób, aby AutoCAD wgrywał w odpowiednie miejsce tabeli odpowiedni symbol. Tu niestety nie mam pomysłu jak to można zrobić. Czy jest możliwość, żeby AutoCAD za pomocą jakiejś formuły ściągniętej z odpowiedniej komórki Excela wgrywał odpowiedni blok w komórce tabeli, gdzie powinien być symbol? Albo jakiś lisp, który odczytywałby numer elementu i wgrywał np. blok o nazwie numeru elementu w odpowiednie miejsce w tabeli? Tutaj musiałbym przygotować zestaw zwykłych bloków (nie dynamicznych), bo do tabeli wgrywana jest tylko podstawowa widzialność bloku dynamicznego. Ale to to już mógłbym przygotować, bo z projektu na projekt elementy się nie zmieniają tak bardzo.

Jak ktoś ma jakieś pomysły to proszę o pomoc.
Pozdrawiam
Heniekag
 
Posty: 25
Dołączył(a): wrz 12, 2007 12:32

Re: Spis elementów przy użyciu Dataextraction

Postprzez kojacek » sty 15, 2018 15:13

Heniekag napisał(a): <ciach>(...)Albo jakiś lisp, który odczytywałby numer elementu i wgrywał np. blok o nazwie numeru elementu w odpowiednie miejsce w tabeli? Tutaj musiałbym przygotować zestaw zwykłych bloków (nie dynamicznych), bo do tabeli wgrywana jest tylko podstawowa widzialność bloku dynamicznego. Ale to to już mógłbym przygotować, bo z projektu na projekt elementy się nie zmieniają tak bardzo.


Proste makro wstawiające w komórkę tabeli blok o nazwie określonej w jej treści, zdaje się jest łatwo zrobić. Dla rozróżnienia warto np. ustalić że, bloki wstawiane są w komórki zawierające treść typu: BL:NAZWA_BLOKU1, BL:NAZWA_BLOKU2 itd. <klick>:
IBLTAB.gif

(https://kojacek.wordpress.com/2018/01/15/bloki-w-tabeli/)
Avatar użytkownika
kojacek
 
Posty: 5489
Dołączył(a): paź 03, 2005 20:17

Re: Spis elementów przy użyciu Dataextraction

Postprzez ziele_o2k » sty 16, 2018 10:50

kojacku, a da redę pokolorować blok w tabeli ?
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 750
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Re: Spis elementów przy użyciu Dataextraction

Postprzez kojacek » sty 16, 2018 11:21

ziele_o2k napisał(a):kojacku, a da redę pokolorować blok w tabeli ?


Oczywiście, LISP-em funkcją (metodą) vla-SetCellContentColor. To tak samo jak dla tekstu. Może kolejny wpis?
Avatar użytkownika
kojacek
 
Posty: 5489
Dołączył(a): paź 03, 2005 20:17

Re: Spis elementów przy użyciu Dataextraction

Postprzez Heniekag » sty 16, 2018 13:02

Wielkie dzięki. Ładnie działa. Już kilka używanych w firmie lispów ma Kojacek gdzieś w opisie. :)
Ze stworzeniem tabeli nie ma problemu. W Excelu można w kolumnie "symbol" wpisać co potrzeba i importować w momencie użycia Dataextraction.
Jedyne o czym muszę pamiętać, to odblokowaniu tabeli - czyli chyba najwygodniej detach Dataextraction.
Przy kolejnej rewizji rysunku i tak u nas nazwa pliku się zmienia, więc trzeba edytować plik dxe.
Jedyne, czego mi teraz brakuje to możliwość wczytania wszystkich bloków, które maja być symbolami w tabeli do rysunku.
W moim przypadku bloki symboli nie są tymi samymi blokami, które są używane na rysunku, ze względu na to, że wszystkie użyte na rysunku, to bloki dynamiczne i jak pisałem wczytują się do tabeli tylko z podstawową widzialnością.

Poradziłem sobie z tym poprzez wstawienie dodatkowych kilku linii z programem BLK_InsertBlock i wykorzystaniem zmiennej "n". Wstawione bloki od razu są kasowane z rysunku komendą "_erase".
Aby to zadziałało, muszą być przygotowane, gdzieś w zalinkowanym w ustawieniach AutoCAD-a katalogu, bloki o nazwach takich, jakie są użyte w tabeli po prefiksie "BL:"
Program nie jest zabezpieczony i się wali w momencie, gdy potrzebny blok nie istnieje - jeszcze będę się z tym bawił w wolnych chwilach i w miarę powtórnego po kilku latach wdrażania się w AutoCAD-a.

Jeszcze raz dzięki Kojacek.

Lisp wygląda teraz tak (oryginalny, jak wyżej podano, jest do ściągnięcia tu):
Kod: Zaznacz cały
; =============================================================== ;
; C:IBLTAB - 2018 by kojacek                                      ;
; --------------------------------------------------------------- ;

(defun C:IBLTAB (/ e o v n i p)
  (setq p "BL:")
  (if
    (and
      (setq e (car (entsel "\nChoose table: ")))
      (= "ACAD_TABLE" (cdr (assoc 0 (entget e))))
    )
    (if
      (vlax-write-enabled-p e)
      (progn
        (setq o (vlax-ename->vla-object e))
        (setq v (apply 'append (jk:TAB-GetCellsVal o)))
        (cd:SYS_UndoBegin)
   ;Fragment sluzacy tylko wstawieniu blokow na rysunek - dodane przez HB
        (foreach % v
          (if
            (and
              (setq i (caddr %))
              (= (type i) 'STR)
              (= (substr i 1 (strlen p)) p)
            )
         (progn
                (setq n
                  (substr i (1+ (strlen p))(strlen i))
                )
          (cd:BLK_InsertBlock '(0 0 0) n '(1 1 1) 0 T)    ; wstawia blok na rysunek
          (command "_erase" (ssget "_l") "")      ; kasowanie ostatnio narysowanego bloku
         )
          )
        )
   ;Kontynuacja oryginalnego programu
   (foreach % v
          (if
            (and
              (setq i (caddr %))
              (= (type i) 'STR)
              (= (substr i 1 (strlen p)) p)
            )
            (if
              (and
                (setq n
                  (substr i (1+ (strlen p))(strlen i))
                )
                (tblobjname "BLOCK" n)
              )
         (progn
                (vla-SetBlockTableRecordId
                  o (car %)(cadr %)
                  (vla-get-ObjectId
                    (vla-item (cd:ACX_Blocks) n))
                  :vlax-false
                )
                (vla-SetBlockScale o (car %)(cadr %) 0.75)
              )
            )
          )
        )
        (cd:SYS_UndoEnd)
      )
      (princ "\nThe table is blocked for edition. ")
    )
    (princ "\nYou must choose a table: ")
  )
  (princ)
)
; --------------------------------------------------------------- ;
(defun jk:TAB-Cells (Obj / r c)
  (setq c (cd:CAL_Sequence 0 (vla-get-Columns Obj) 1)
        r (cd:CAL_Sequence 0 (vla-get-Rows Obj) 1)
  )
  (mapcar '(lambda (%1)(mapcar '(lambda (%2)(list %1 %2)) c)) r)
)
; --------------------------------------------------------------- ;
(defun jk:TAB-GetCellsVal (Obj / c)
  (setq c (jk:TAB-Cells Obj))
  (mapcar
     '(lambda (%1)
        (mapcar
         '(lambda (%)
            (append
              %
              (list
                (vlax-variant-value
                  (vla-GetCellValue Obj (car %)(cadr %))
                )
              ))
          ) %1)) c
  )
)
; --------------------------------------------------------------- ;
(princ)
Ostatnio edytowany przez Heniekag, sty 16, 2018 14:55, edytowano w sumie 1 raz
Heniekag
 
Posty: 25
Dołączył(a): wrz 12, 2007 12:32


Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: GekOn