_

[LISP] CADPL-Pack-v1.lsp [Dyskusja]

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] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez kojacek » gru 27, 2011 18:08

Zaczynam dyskusję. kruuger rozpoczął funkcją:
Kod: Zaznacz cały
(defun CD:ACX_ADoc ()
  (or
    *cd-ADoc*
    (setq *cd-ADoc* (vla-Get-ActiveDocument (vlax-Get-Acad-Object)))
  )
  *cd-ADoc*
)

Odemnie uwagi takie:
Globalne zmienne (dla ActiveX) nazywałby w całości (nie bacząc na ilośc znaków). Zatem zamieniłbym *cd-ADoc* na
*cd-ActiveDocument*, zatem schemat:
gwiazdka + cd- + nazwa + gwiazdka. Funkcja wygladałaby tak:
Kod: Zaznacz cały
(defun CD:ACX_ADoc ()
  (or
    *cd-ActiveDocument*
    (setq *cd-ActiveDocument* (vla-Get-ActiveDocument (vlax-Get-Acad-Object)))
  )
  *cd-ActiveDocument*
)
Avatar użytkownika
kojacek
 
Posty: 5293
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez kruuger » gru 27, 2011 22:18

dorzucmy jakis naglowek i moze bedzie ?
Kod: Zaznacz cały
; ============================================================ ;
; Aktywny dokument (zmienna globalna: *cd-ActiveDocument*)     ;
; ============================================================ ;
(defun CD:ACX_ADoc ()
  (or
    *cd-ActiveDocument*
    (setq *cd-ActiveDocument* (vla-Get-ActiveDocument (vlax-Get-Acad-Object)))
  )
  *cd-ActiveDocument*
)


osobno moze bede prowadzil wersje EN.
Kod: Zaznacz cały
; ============================================================ ;
; Active document (global variable: *cd-ActiveDocument*)       ;
; ============================================================ ;
(defun CD:ACX_ADoc ()
  (or
    *cd-ActiveDocument*
    (setq *cd-ActiveDocument* (vla-Get-ActiveDocument (vlax-Get-Acad-Object)))
  )
  *cd-ActiveDocument*
)


albo tak jak wam nie przeszkadza:
Kod: Zaznacz cały
; ============================================================ ;
; Aktywny dokument (zmienna globalna: *cd-ActiveDocument*)     ;
; ------------------------------------------------------------ ;
; Active document (global variable: *cd-ActiveDocument*)       ;
; ============================================================ ;

k.
Avatar użytkownika
kruuger
 
Posty: 4783
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez kojacek » gru 27, 2011 22:33

:)
Dodam (poprzez analogię) teraz jeszcze:
model / papier / kolekcję bloków / aktywny obszar
Kod: Zaznacz cały
;;; ==================================================================== ;;;
(defun cd:ACX_Model ()
  (or
    *cd-ModelSpace*
    (setq *cd-ModelSpace* (vla-get-modelspace (cd:ACX_ADoc)))
  )
  *cd-ModelSpace*
)
;;; ==================================================================== ;;;
(defun cd:ACX_Paper ()
  (or
    *cd-PaperSpace*
    (setq *cd-PaperSpace* (vla-get-PaperSpace (cd:ACX_ADoc)))
  )
  *cd-PaperSpace*
)
;;; ==================================================================== ;;;
(defun cd:ACX_Blocks ()
  (or
    *cd-Blocks*
    (setq *cd-Blocks* (vla-get-Blocks (cd:ACX_ADoc)))
  )
  *cd-Blocks*
)
;;; ==================================================================== ;;;
(defun cd:ACX_ASpace ()
  (if
    (= (getvar "TILEMODE") 1)
    (cd:ACX_Model)
    (if
      (/= (getvar "CVPORT") 1)
      (cd:ACX_Model)
      (vla-item (cd:ACX_Blocks) "*Paper_Space")
    )
  )
)
;;; ==================================================================== ;;;


Czas zacząć chyba juz to zapisać w pliku i posadzić w osobnym watku?
kojacek
Avatar użytkownika
kojacek
 
Posty: 5293
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez kruuger » gru 27, 2011 22:54

kojacek napisał(a)::)
Dodam (poprzez analogię) teraz jeszcze:
model / papier / kolekcję bloków / aktywny obszar
Kod: Zaznacz cały
;;; ==================================================================== ;;;
(defun cd:ACX_Model ()
  (or
    *cd-ModelSpace*
    (setq *cd-ModelSpace* (vla-get-modelspace (cd:ACX_ADoc)))
  )
  *cd-ModelSpace*
)
;;; ==================================================================== ;;;
(defun cd:ACX_Paper ()
  (or
    *cd-PaperSpace*
    (setq *cd-PaperSpace* (vla-get-PaperSpace (cd:ACX_ADoc)))
  )
  *cd-PaperSpace*
)
;;; ==================================================================== ;;;
(defun cd:ACX_Blocks ()
  (or
    *cd-Blocks*
    (setq *cd-Blocks* (vla-get-Blocks (cd:ACX_ADoc)))
  )
  *cd-Blocks*
)
;;; ==================================================================== ;;;
(defun cd:ACX_ASpace ()
  (if
    (= (getvar "TILEMODE") 1)
    (cd:ACX_Model)
    (if
      (/= (getvar "CVPORT") 1)
      (cd:ACX_Model)
      (vla-item (cd:ACX_Blocks) "*Paper_Space")
    )
  )
)
;;; ==================================================================== ;;;


Czas zacząć chyba juz to zapisać w pliku i posadzić w osobnym watku?
kojacek


jakies?
[LISP] Funkcje biblioteczne / Narzędzie / Użytki
k.
Avatar użytkownika
kruuger
 
Posty: 4783
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez kojacek » gru 27, 2011 23:09

kruuger napisał(a):jakies?
[LISP] Funkcje biblioteczne / Narzędzie / Użytki
k.

Myślę o np. CADPL-Pack-v1.lsp [Plik] w którym aktualizowany jest tylko opis dodawanych funkcji i sam plik. Reszta wek...
kojacek
Avatar użytkownika
kojacek
 
Posty: 5293
Dołączył(a): paź 03, 2005 20:17

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez kruuger » gru 28, 2011 00:20

kojacek napisał(a):
kruuger napisał(a):jakies?
[LISP] Funkcje biblioteczne / Narzędzie / Użytki
k.

Myślę o np. CADPL-Pack-v1.lsp [Plik] w którym aktualizowany jest tylko opis dodawanych funkcji i sam plik. Reszta wek...
kojacek

a gdy powstanie jakis Pack2? nie bedziemy chyba przyklejac watku dla kazdej paczki ?

aktywnego obszaru mozna chyba nieco krocej: ?
Kod: Zaznacz cały
(defun cd:ACX_ASpace ()
  (vlax-Get-Property
    (cd:ACX_ADoc)
    (if (= (getvar "CVPORT") 1)
      'PaperSpace
      'ModelSpace
    )
  )
)

lub
Kod: Zaznacz cały
(defun cd:ACX_ASpace ()
  (if (= (getvar "CVPORT") 1)
    (vla-item (cd:ACX_Blocks) "*Paper_Space")
    (cd:ACX_Model)
  )
)


co nieco do wgladu:
http://db.tt/Ti9WYCCG
k.
Avatar użytkownika
kruuger
 
Posty: 4783
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez ZK » gru 28, 2011 09:45

Ślicznie :)
to jeszcze takie uwagi porządkowe dla wszystkich:

  • jeśli zmienna będzie zmienną GLOBALNĄ, to będzie poprzedzona i zamknięta znakiem gwiazdki "*",
    np. *cd-ModelSpace*
  • zmienne systemowe jak "TILEMODE", "CVPORT", "OSMODE" etc. będą pisane dużymi literami.
  • opis funkcji/procedury będzie miał postać dwujęzyczną, na wzór:
    Kod: Zaznacz cały
    ; ============================================================ ;
    ; Aktywny dokument (zmienna globalna: *cd-ActiveDocument*)     ;
    ; ------------------------------------------------------------ ;
    ; Active document (global variable: *cd-ActiveDocument*)       ;
    ; ============================================================ ;

pozdrawiam,
ZK
**************************************
********* http://madebynati.com *********
**************************************
Avatar użytkownika
ZK
 
Posty: 1082
Dołączył(a): mar 11, 2009 12:08
Lokalizacja: Poznań

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez ZK » gru 28, 2011 10:05

Chciałbym poddać pod rozważenie taką funkcję, która uwzględnia platformę CAD (AutoCAD, ZwCAD, GstarCAD ...) i przechowa tą informację w zmiennej globalnej *pCAD*.
Może się to przydać (a nawet na pewno się przyda) w wielu funkcjach, zwłaszcza takich, które będą opierały się o ActiveX.
W przypadku AutoCAD, zapewne wersja nie będzie miała znaczenia, ale iCAD jest zmienny jak wiaterek jesienny i każda wersja niesie ze sobą chmurę niespodzianek :)

Kod: Zaznacz cały
; ============================================================ ;
; Wykrycie platformy CAD  (zmienna globalna: *pCAD*)           ;
; ------------------------------------------------------------ ;
; Detection of CAD platforms  (zmienna globalna: *pCAD*)       ;
; ============================================================ ;
(defun CAD:SYS_PlatformCAD (/ pCAD)
   (cond
      (
         (equal (getvar "PRODUCT") "AutoCAD")
         ; info:
         ; (getvar "ACADVER") --> "17.2s (LMS Tech)" lub "18.2s (LMS Tech)"
         (setq *pCAD* (strcat "autocad_" (vl-string-trim " (LMS Tech)" (getvar "ACADVER"))))
         ; wynik:
         ; *pCAD* --> "autocad_18.2s"
      )
      (
         (equal (getvar "PRODUCT") "ZWCAD")
         ; info:
         ; (substr (getvar "VERNUM") 1 10) --> "2011.10.30" lub "2011.06.30"
         (setq *pCAD* (strcat "zwcad_" (substr (getvar "VERNUM") 1 10)))
         ; wynik:
         ; *pCAD* --> "zwcad_2011.10.30"
      )
      (
         (equal (getvar "PRODUCT") "ICAD")
         ; info:
         ; (nth 11 (vl-productinfo)) --> "GstarCAD 2011"
         ; (nth 15 (vl-productinfo)) --> " 110818"
         (setq *pCAD* (strcat "gstarcad_" (vl-string-trim " " (nth 15 (vl-productinfo)))))
         ; wynik:
         ; *pCAD* --> "gstarcad_110818"
      )
   )
)

Tylko proszę nie buczeć - to tylko propozycja 8)

pozdrawiam,
ZK
**************************************
********* http://madebynati.com *********
**************************************
Avatar użytkownika
ZK
 
Posty: 1082
Dołączył(a): mar 11, 2009 12:08
Lokalizacja: Poznań

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez kruuger » gru 28, 2011 10:15

Kod: Zaznacz cały
; [ACX] ================================================================== ;
; cd:ACX_ADoc          - aktywny dokument                                  ;
; cd:ACX_Model         - obszar modelu                                     ;
; cd:ACX_Paper         - obszar papieru                                    ;
; cd:ACX_Blocks        - kolekcja Blocks                                   ;
; cd:ACX_ASpace        - aktywny obszar                                    ;
; ======================================================================== ;

zastanawiam sie czy to dobrze ze opis mamy oddzielnie. powstana przeciez kolejne funkcje do ktorych trzeba bedzie cos przekazywac. majac naglowek nad funcja od razu widac co nalezy "zapodac":

Kod: Zaznacz cały
; ============================================================ ;
; Add a paper space viewport                                   ;
;   Center  [LST] - the center coordinates of the viewport     ;
;   Width  [REAL] - the width of the viewport                  ;
;   Height [REAL] - the height of the viewport                 ;
; ============================================================ ;
(defun kr:ACX_AddPViewport (Center Width Height)

??
k.
Avatar użytkownika
kruuger
 
Posty: 4783
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

Re: [LISP] CADPL-Pack-v1.lsp [Dyskusja]

Postprzez kojacek » gru 28, 2011 12:29

kruuger napisał(a):a gdy powstanie jakis Pack2? nie bedziemy chyba przyklejac watku dla kazdej paczki ?

W tej chwili uzupełniamy (rozbudowujemy) vol1. Na vol2 przyjdzie jeszcze czas...


kruuger napisał(a):aktywnego obszaru mozna chyba nieco krocej: ?
Kod: Zaznacz cały
(defun cd:ACX_ASpace ()
  (vlax-Get-Property
    (cd:ACX_ADoc)
    (if (= (getvar "CVPORT") 1)
      'PaperSpace
      'ModelSpace
    )
  )
)

lub
Kod: Zaznacz cały
(defun cd:ACX_ASpace ()
  (if (= (getvar "CVPORT") 1)
    (vla-item (cd:ACX_Blocks) "*Paper_Space")
    (cd:ACX_Model)
  )
)


Masz. Jestem za ostatnią wersją :)
kruuger napisał(a):zastanawiam sie czy to dobrze ze opis mamy oddzielnie. powstana przeciez kolejne funkcje do ktorych trzeba bedzie cos przekazywac. majac naglowek nad funcja od razu widac co nalezy "zapodac": (...)

Myślę że (co do komentarzy) - Dawać komentarze PL i EN w jednym pliku - nie ma chyba sensu robić dwóch oddzielnych plików (trza by 2 pilnować). Oczywiście stosunkowo krótkie.

kojacek
Avatar użytkownika
kojacek
 
Posty: 5293
Dołączył(a): paź 03, 2005 20:17

Następna strona

Powrót do AutoCAD

Kto przegląda forum

Użytkownicy przeglądający ten dział: Majestic-12 [Bot]