_

Zautomatyzowany PISZBLOK wielu rysunków

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".

Re: Zautomatyzowany PISZBLOK wielu rysunków

Postprzez kojacek » lut 21, 2018 14:11

Zobacz jak to chodzi. Uwagi:
1] CADPack-PL musi być załadowany
2] Pliki zapisuje w katalogu rysunku
3] Nadpisuje jeśli już takie pliki istnieją
4] Są tu 3 zmienne globalne:
Kod: Zaznacz cały
(setq *jk-SheetBName* "ramka_1") ; -> okresla blok ramki
(setq *jk-TableBName* "aaaa") ; -> okresla blok tabelki
(setq *jk-TableAtt* "NUMER")  ; -> okresla atrybut w tabelce z nazwa

Pozwalają one uelastycznić exporty (można mieć kilka ramek, albo inne tabelki itp.)
Kod programu (polecenie WBL):
Kod: Zaznacz cały
; =============================================================== ;
; LspWBlock.lsp by kojacek 2018
; --------------------------------------------------------------- ;
(setq *jk-SheetBName* "ramka_1")
(setq *jk-TableBName* "aaaa")
(setq *jk-TableAtt* "NUMER")
; --------------------------------------------------------------- ;
(defun C:WBL (/ p s r b x u v a)
  (setq p (getvar "DWGPREFIX"))
  (if
    (and
      (= (getvar "CTAB") "Model")
      (setq s (ssget "_x"
        (list (cons 0 "INSERT")
              (cons 2 *jk-SheetBName*)
              (cons 410 "Model")))
      )
    )
    (if
      (setq l (cd:SSX_Convert s 0))
      (progn
        (jk:TMP_ZoomSave nil)
        (foreach % l
          (jk:ENT_ZoomEnt % 0.1)
          (setq r (ssadd))
          (ssadd % r)
          (setq x (LM:ssboundingbox r))
          (if
            (setq u (ssget "_W"
              (car x)(cadr x)
              (list (cons 0 "INSERT")
                (cons 2 *jk-TableBName*)))
            )
            (setq a (cd:BLK_GetAtts (ssname u 0)))
          )
          (setq n
            (if a
              (cdr (assoc *jk-TableAtt* a))
              (cdr (assoc 5 (entget %)))
            )
          )
          (ssget "_W" (car x)(cadr x))
          (vla-WBlock (cd:ACX_ADoc)
            (strcat p n ".dwg")
            (vla-get-ActiveSelectionSet (cd:ACX_ADoc))
          )
        )
        (jk:TMP_ZoomSave T)
      )
    )
  )
  (princ)
)

; ----------------------------------------------------------------- ;
(defun jk:TMP_ZoomSave (m)
  (if
    (not *jk-ZoomSave)
    (setq *jk-ZoomSave
      (list (getvar "VIEWCTR")(getvar "VIEWSIZE"))
    )
    (vla-ZoomCenter
      (vlax-get-acad-object)
      (vlax-3d-point (car *jk-ZoomSave))
      (cadr *jk-ZoomSave)
    )
  )
  (if m (setq *jk-ZoomSave nil))
)
; ----------------------------------------------------------------- ;
(defun jk:ENT_ZoomEnt (o p / ss r f s a d)
  (cond
    ( (= (type o) 'ENAME)(setq ss (ssadd))(ssadd o ss))
    ( (= (type o) 'PICKSET)(setq ss o))
    (t nil)
  )
  (if ss
    (progn
      (setq r (LM:ssboundingbox ss)
            a (angle (car r)(cadr r))
            d (if p (* p (distance (car r)(cadr r))))
            f (if p (polar (car r)(+ pi a) d)(car r))
            s (if p (polar (cadr r) a d)(cadr r))
      )
      (vla-ZoomWindow
        (vlax-get-acad-object)
        (vlax-3d-point f)
        (vlax-3d-point s)
      )
    )
  )
)
; ----------------------------------------------------------------- ;
;; Selection Set Bounding Box  -  Lee Mac
;; Returns a list of the lower-left and upper-right WCS coordinates of a
;; rectangular frame bounding all objects in a supplied selection set.
;; sel - [sel] Selection set for which to return bounding box
(defun LM:ssboundingbox ( sel / idx llp ls1 ls2 obj urp )
  (repeat
    (setq idx (sslength sel))
    (setq obj (vlax-ename->vla-object
                (ssname sel (setq idx (1- idx)))))
    (if
      (and
        (vlax-method-applicable-p obj 'getboundingbox)
        (not
          (vl-catch-all-error-p
            (vl-catch-all-apply
              'vla-getboundingbox (list obj 'llp 'urp))
          )
        )
      )
      (setq ls1 (cons (vlax-safearray->list llp) ls1)
            ls2 (cons (vlax-safearray->list urp) ls2)
      )
    )
  )
  (if
    (and ls1 ls2)
    (mapcar
      '(lambda (a b)
         (apply 'mapcar (cons a b))
      ) '(min max)(list ls1 ls2)
    )
  )
)
; --------------------------------------------------------------- ;
(princ)


Mów jak poszło.
Avatar użytkownika
kojacek
 
Posty: 5455
Dołączył(a): paź 03, 2005 20:17

Re: Zautomatyzowany PISZBLOK wielu rysunków

Postprzez loskamilos » lut 21, 2018 15:44

Załadowałem CADPack-PL (za pomocą polecenia _appload) i nie jestem pewien co dalej.
Zapisałem kod programu w notatniku z rozszerzeniem .lsp i próbowałem załadować go również poleceniem _appload.
Następnie uruchamiałem polecenie WBL i... nic się nie działo. Podobnie w momencie jak miałem zaznaczone wszystkie rysunki. Cisza. Co robię źle?
loskamilos
 
Posty: 23
Dołączył(a): sty 24, 2009 19:32
Lokalizacja: K-lin/Gdańsk

Re: Zautomatyzowany PISZBLOK wielu rysunków

Postprzez kojacek » lut 21, 2018 15:47

loskamilos napisał(a):Załadowałem CADPack-PL (za pomocą polecenia _appload) i nie jestem pewien co dalej.
Zapisałem kod programu w notatniku z rozszerzeniem .lsp i próbowałem załadować go również poleceniem _appload.
Następnie uruchamiałem polecenie WBL i... nic się nie działo. Podobnie w momencie jak miałem zaznaczone wszystkie rysunki. Cisza. Co robię źle?


To jest taki sam malunek jak podałeś w przykładzie?
Avatar użytkownika
kojacek
 
Posty: 5455
Dołączył(a): paź 03, 2005 20:17

Re: Zautomatyzowany PISZBLOK wielu rysunków

Postprzez loskamilos » lut 21, 2018 15:54

Już wiem, w swoim nie mam ramek z bloku.
Zaraz podmienię i polilinie na bloki. Wtedy na pewno pójdzie.
A dodatkowe pytanie: co dopisać do lispa, żeby brał pod uwagę również bloki "ramka_2", "ramka_3"?
loskamilos
 
Posty: 23
Dołączył(a): sty 24, 2009 19:32
Lokalizacja: K-lin/Gdańsk

Re: Zautomatyzowany PISZBLOK wielu rysunków

Postprzez kojacek » lut 21, 2018 15:58

loskamilos napisał(a):Już wiem, w swoim nie mam ramek z bloku.
Zaraz podmienię i polilinie na bloki. Wtedy na pewno pójdzie.
A dodatkowe pytanie: co dopisać do lispa, żeby brał pod uwagę również bloki "ramka_2", "ramka_3"?


Po wywołaniu "ramka_1" i wyeksportowaniu części rysunków, zmienić zmienną globalną:
Kod: Zaznacz cały
(setq *jk-SheetBName* "ramka_2")

Potem znów wywołać polecenie. Tak samo dla innych ramek.
Avatar użytkownika
kojacek
 
Posty: 5455
Dołączył(a): paź 03, 2005 20:17

Re: Zautomatyzowany PISZBLOK wielu rysunków

Postprzez loskamilos » lut 21, 2018 16:06

Ok działa!
Po stokroć dzięki!

PS Miałem nadzieję, że będzie sobie radził równolegle z blokami o kolejnych nazwach, ale nie jest oczywiście problemem kolejne wywoływanie polecenia po zmianie zm. globalnej, broń boże nie narzekam ;)
A jak już sam ogarnę lispy to spróbuję zmienić ramkę z bloku na polilinię na konkretnej warstwie. Może się uda. Niemniej, jeszcze raz dziękuję!
loskamilos
 
Posty: 23
Dołączył(a): sty 24, 2009 19:32
Lokalizacja: K-lin/Gdańsk

Re: Zautomatyzowany PISZBLOK wielu rysunków

Postprzez kojacek » lut 21, 2018 16:08

loskamilos napisał(a):Ok działa!
Po stokroć dzięki!

PS Miałem nadzieję, że będzie sobie radził równolegle z blokami o kolejnych nazwach, ale nie jest oczywiście problemem kolejne wywoływanie polecenia po zmianie zm. globalnej, broń boże nie narzekam ;)
A jak już sam ogarnę lispy to spróbuję zmienić ramkę z bloku na polilinię na konkretnej warstwie. Może się uda. Niemniej, jeszcze raz dziękuję!


No to jeszcze sztuczka taka. Zamień tak:
Kod: Zaznacz cały
(setq *jk-SheetBName* "ramka_1,ramka_2,ramka_3")
Avatar użytkownika
kojacek
 
Posty: 5455
Dołączył(a): paź 03, 2005 20:17

Re: Zautomatyzowany PISZBLOK wielu rysunków

Postprzez loskamilos » lut 21, 2018 16:23

Ostatnie pytanie:
a może da się zrobić tak, że wyeksportowany rysunek zostaje nazwany jako złączenie 2 atrybutów z tabelki: "NUMER" + "NAZWA_RYSUNKU" ?
Może:
Kod: Zaznacz cały
(setq *jk-TableAtt* "NUMER"+"NAZWA_RYSUNKU")

? :P
loskamilos
 
Posty: 23
Dołączył(a): sty 24, 2009 19:32
Lokalizacja: K-lin/Gdańsk

Re: Zautomatyzowany PISZBLOK wielu rysunków

Postprzez kojacek » lut 21, 2018 16:26

loskamilos napisał(a):Ostatnie pytanie:
a może da się zrobić tak, że wyeksportowany rysunek zostaje nazwany jako złączenie 2 atrybutów z tabelki: "NUMER" + "NAZWA_RYSUNKU" ?
Może:
Kod: Zaznacz cały
(setq *jk-TableAtt* "NUMER"+"NAZWA_RYSUNKU")

? :P

Tak to nie. Trzeba by w kodzie zmieniać. Dać dwie zmienne.
Avatar użytkownika
kojacek
 
Posty: 5455
Dołączył(a): paź 03, 2005 20:17

Re: Zautomatyzowany PISZBLOK wielu rysunków

Postprzez ziele_o2k » lut 21, 2018 17:39

Podepnę się pod temat.
Jakieś pomysły, żeby wywalał każdy arkusz do oddzielnego pliku?
Ziele
Avatar użytkownika
ziele_o2k
 
Posty: 736
Dołączył(a): mar 18, 2014 11:33
Lokalizacja: Poznań

Poprzednia stronaNastępna strona

Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Bing [Bot]