_

Lisp - tworzenie warstw dla obrazó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".

Lisp - tworzenie warstw dla obrazów

Postprzez Jaumen » sie 25, 2015 15:06

Witam wszystkich forumowiczów,

Mam taki problem. Potrzebuje napisać wtyczkę LISP do AutoCAD, która tworzy automatycznie nowe warstwy o takiej samej nazwie jak dany plik graficzny oraz jednocześnie przenosi ten obraz na tą nowo utworzoną warstwę.

Powiedzmy, że wstawiłem 3 obrazy (*.jpg) do AutoCad'a losowo (jeden obok drugiego). Uruchamiając wtyczkę chciałbym zaznaczyć te 3 obrazy i po wciśnięciu klawicza 'enter' uzyskać trzy warstwy o nazwach odpowiadających nazwom tych obrazów oraz te obrazy znajdowałyby się na każdej z tych warstw.

Czy taki proces jest w ogóle możliwy?

Pozdrawiam,
Jakub
Jaumen
 
Posty: 2
Dołączył(a): sie 25, 2015 15:01

Re: Lisp - tworzenie warstw dla obrazów

Postprzez kojacek » sie 25, 2015 15:18

Jaumen napisał(a): Uruchamiając wtyczkę chciałbym zaznaczyć te 3 obrazy i po wciśnięciu klawicza 'enter' uzyskać trzy warstwy o nazwach odpowiadających nazwom tych obrazów oraz te obrazy znajdowałyby się na każdej z tych warstw.

Czy taki proces jest w ogóle możliwy?


Oczywiście, jak najbardziej.
Avatar użytkownika
kojacek
 
Posty: 5234
Dołączył(a): paź 03, 2005 20:17

Re: Lisp - tworzenie warstw dla obrazów

Postprzez Jaumen » sie 25, 2015 15:48

W internecie znalazłem kilka porad jak napisać LISP do tworzenia warstw.

Czy ktoś mógłby mi zasugerować, w jaki sposób nadać warstwie tę samą nazwę jak nazwa obrazu? Co to jest za funkcja?
Jaumen
 
Posty: 2
Dołączył(a): sie 25, 2015 15:01

Re: Lisp - tworzenie warstw dla obrazów

Postprzez kojacek » sie 25, 2015 19:09

Jaumen napisał(a):W internecie znalazłem kilka porad jak napisać LISP do tworzenia warstw.

Czy ktoś mógłby mi zasugerować, w jaki sposób nadać warstwie tę samą nazwę jak nazwa obrazu? Co to jest za funkcja?


Wykorzystując CADPack-a, najprościej może być tak:
Kod: Zaznacz cały
(defun C:IMGLAY (/ ss l)
  (if
    (setq ss (ssget "_:L" '((0 . "IMAGE"))))
    (foreach % (cd:SSX_Convert ss 0)
      (if
        (and
          (setq l
            (cadr
              (fnsplitl
                (cdr (assoc 1 (entget (cdr (assoc 340 (entget %))))))
              )
            )
          )
          (snvalid l)
        )
        (cd:ENT_SetDXF % 8 l)
      )
    )
  )
  (princ)
)
Avatar użytkownika
kojacek
 
Posty: 5234
Dołączył(a): paź 03, 2005 20:17

Re: Lisp - tworzenie warstw dla obrazów

Postprzez wilda » sie 25, 2015 23:33

Akurat dzisiaj tak sobie myślałem, że dobrze by było gdyby wstawiając odnośnik był on wstawiany na warstwie takiej jak jego nazwa (+zdefiniowany prefix). Podobnie z obrazami.
Czy wykorzystując CADPack-a dałoby się w prosty sposób to zrobić. Jak nie to trudno. Zawsze można wstawić odnośnik/obraz i potem go przenieść na "jego" warstwę za pomocą poniższego lispa.
wilda
 
Posty: 163
Dołączył(a): gru 18, 2007 21:41

Re: Lisp - tworzenie warstw dla obrazów

Postprzez kojacek » sie 26, 2015 06:57

wilda napisał(a):Akurat dzisiaj tak sobie myślałem, że dobrze by było gdyby wstawiając odnośnik był on wstawiany na warstwie takiej jak jego nazwa (+zdefiniowany prefix). Podobnie z obrazami.
Czy wykorzystując CADPack-a dałoby się w prosty sposób to zrobić. Jak nie to trudno. Zawsze można wstawić odnośnik/obraz i potem go przenieść na "jego" warstwę za pomocą poniższego lispa.


Oczywiście, w podobny sposób:
Kod: Zaznacz cały
(defun C:XREFLAY (/ pref x ss)
  (setq pref "--00--")
  (if
    (setq x (cd:SYS_CollList "BLOCK" 32))
    (if
      (setq ss
        (ssget "_:L"
          (list
            (cons 0 "INSERT")
            (cons 2 (cd:STR_ReParse x ","))
          )
        )
      )
      (foreach % (cd:SSX_Convert ss 0)
        (cd:ENT_SetDXF % 8 (strcat pref (cdr (assoc 2 (entget %)))))
      )
    )
  )
  (princ)
)
Avatar użytkownika
kojacek
 
Posty: 5234
Dołączył(a): paź 03, 2005 20:17

Re: Lisp - tworzenie warstw dla obrazów

Postprzez wilda » sie 26, 2015 08:48

Chodziło mi bardziej czy w taki sam prosty sposób można napisać lispa który od razu w momencie wstawiania obrazu/odnośnika wstawiałby na warstwę o jego nazwie?
A może można w prosty sposób ulepszyć lispa LeeMac'a LayerDirector?, zmieniając opcję tak by nazwa warstwy była pobierana z nazwy pliku a nie tak jak jest w oryginale ustawiona na "sztywno"?

http://www.lee-mac.com/layerdirector.html
Załączniki
def warstw.jpg
wilda
 
Posty: 163
Dołączył(a): gru 18, 2007 21:41

Re: Lisp - tworzenie warstw dla obrazów

Postprzez asa » sie 26, 2015 14:18

wilda napisał(a):Chodziło mi bardziej czy w taki sam prosty sposób można napisać lispa który od razu w momencie wstawiania obrazu/odnośnika wstawiałby na warstwę o jego nazwie?
A może można w prosty sposób ulepszyć lispa LeeMac'a LayerDirector?, zmieniając opcję tak by nazwa warstwy była pobierana z nazwy pliku a nie tak jak jest w oryginale ustawiona na "sztywno"?

http://www.lee-mac.com/layerdirector.html


Osobiście proponuję taką drogę na przykładzie wstawiania obrazku
1. założyć reaktory na polecenie
2. napisać procedurkę, na reaktorze :vlr-commandended, co sprawdza czy ostatnie wydane polecenie to _imageattach
3. jeżeli tak, to zgrzebać ostatni obiekt dodany do bazy rysunkowej, pobrać jego name, dodać nową warstwę o nazwie name, przenieść rastra na warstwę

Coś tam kiedyś było na forum o reaktorach na poleceniach powiedzmy tu pogaduchy-lispowe-reaktorki-t80313.html, więc przeróbka nie jest skomplikowana
pozdrawiam ciepło
asa
P.S.
Jakoś tak smutno na tym forum się robi ;) może jakieś fajne lispy coś ożywią pogrzebową atmosferę ? :)
asa
 
Posty: 519
Dołączył(a): lut 18, 2007 20:01

Re: Lisp - tworzenie warstw dla obrazów

Postprzez wilda » sie 29, 2015 19:27

Łatwo powiedzieć nieskomplikowana jak się ma niemałe pojecie o lispach.

Jak zmienić lispa XREFLAY i IMGLAY
żeby nie trzeba było wybierać obiektu tylko zmiana dokonywana była dla ostatnio wstawionego obiektu?
wilda
 
Posty: 163
Dołączył(a): gru 18, 2007 21:41

Re: Lisp - tworzenie warstw dla obrazów

Postprzez wilda » sie 31, 2015 00:36

jakoś udało się coś "napisać"
Kod: Zaznacz cały
(defun C:XREFtoLAY ( / ent entdata plikname)
   (setq ent (entlast))
   (setq entdata (entget ent))
   (setq plikname (cdr (assoc 2 entdata)))
   (cd:ENT_SetDXF ent 8 plikname)
)

ale reaktory to już ponad moje możliwości.
Na razie dopisałem polecenie do menu wstaw odnośnik, wiec działa automatycznie (zmienia nazwę warstwy wstawionego odnośnika) po wstawieniu odnośnika.
wilda
 
Posty: 163
Dołączył(a): gru 18, 2007 21:41

Następna strona

Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zidentyfikowanych użytkowników