_

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

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

Postprzez ZK » gru 28, 2011 14:56

Co zatem z tym zrobimy? Ja jestem zwolennikiem tej (mojej) wersji - lista czteroelementowa:
Kod: Zaznacz cały
(nazwa_programu  + wersja_programu  + platforma32/64bit + lokalizacja) ->>>
("AutoCAD" 18.0 64 "PL")

Dla AutoCAD-ów będzie to działać, w zalezności od kazdej innej wersji po sprawdzeniu pierwszego elementu listy mozna (lokalnie już) podejmować inne działania... - tak?

OK.
Wątpliwość mam co do ustawiania tej listy jako zmienną globalną (wykorzystanie jej - raczej rzadkie), może po prostu tylko wywołać i dodać listę?

Globalne ma tylko znaczenie, gdy w procedurze "wielo-linijkowej" gdzieś wystąpi konieczność użycia "cond", właśnie z racji użycia innego rozwiązania, ze względu na platformy. Nie upieram się, bo może być to zjawisko bardzo rzadkie.
Przykładem może być choćby działania na rejestrach np. vl-registry-write nie działa w chińczykach i trza użyć setenv...


EDIT:
Bez zakładania nowego wątku - ponieważ już dzisiaj wyjeżdżam, to wszystkim życzę Szczęśliwego Nowego, Lepszego 2012 Roku :D
**************************************
********* 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 asa » gru 28, 2011 17:27

ZK napisał(a):
Co zatem z tym zrobimy? Ja jestem zwolennikiem tej (mojej) wersji - lista czteroelementowa:
Kod: Zaznacz cały
(nazwa_programu  + wersja_programu  + platforma32/64bit + lokalizacja) ->>>
("AutoCAD" 18.0 64 "PL")

Dla AutoCAD-ów będzie to działać, w zalezności od kazdej innej wersji po sprawdzeniu pierwszego elementu listy mozna (lokalnie już) podejmować inne działania... - tak?

OK.
Wątpliwość mam co do ustawiania tej listy jako zmienną globalną (wykorzystanie jej - raczej rzadkie), może po prostu tylko wywołać i dodać listę?

Globalne ma tylko znaczenie, gdy w procedurze "wielo-linijkowej" gdzieś wystąpi konieczność użycia "cond", właśnie z racji użycia innego rozwiązania, ze względu na platformy. Nie upieram się, bo może być to zjawisko bardzo rzadkie.
Przykładem może być choćby działania na rejestrach np. vl-registry-write nie działa w chińczykach i trza użyć setenv...


EDIT:
Bez zakładania nowego wątku - ponieważ już dzisiaj wyjeżdżam, to wszystkim życzę Szczęśliwego Nowego, Lepszego 2012 Roku :D


Zaglądam przelotem i :D. No fajnie jest no ! Po Nowym Roku siadam na tyłku i coś tam upiszę lub wygrzebię. Jak bym nie zajrzał przed Sylwestrem, to Wszystkim Paniom i Panom z lekkim skrzywieniem na punkcie AC i Lisp nosz najserdeczniejsze szczera nie przeklejane.
pozdrawiam ciepło
asa
asa
 
Posty: 581
Dołączył(a): lut 18, 2007 20:01

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

Postprzez kojacek » gru 28, 2011 18:05

Zatem jak jest mniej więcej zgoda dodaję AcadInfo:
Kod: Zaznacz cały
(defun cd:SYS_AcadInfo (/ s v)
  (list
    (getvar "PRODUCT")
    (atof (getvar "ACADVER"))
    (if (wcmatch (strcase (getenv "PROCESSOR_ARCHITECTURE")) "*64*") 64 32)
    (if
      (setq s (vl-string-search "(" (setq v (ver))))
      (strcase (substr v (+ 2 s) 2))
      "??"
    )
  )
)

Nie ustawia zmiennej globalnej, bowiem nie wydaje się to szczególnie potrzebne. Jeśli będzie taka potrzeba wystarczy po prostu przez setq przypisać wynik cd:SYS_AcadInfo .

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

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

Postprzez kruuger » gru 29, 2011 01:50

kojacek napisał(a):Zatem jak jest mniej więcej zgoda dodaję AcadInfo:
Kod: Zaznacz cały
(defun cd:SYS_AcadInfo (/ s v)
  (list
    (getvar "PRODUCT")
    (atof (getvar "ACADVER"))
    (if (wcmatch (strcase (getenv "PROCESSOR_ARCHITECTURE")) "*64*") 64 32)
    (if
      (setq s (vl-string-search "(" (setq v (ver))))
      (strcase (substr v (+ 2 s) 2))
      "??"
    )
  )
)

Nie ustawia zmiennej globalnej, bowiem nie wydaje się to szczególnie potrzebne. Jeśli będzie taka potrzeba wystarczy po prostu przez setq przypisać wynik cd:SYS_AcadInfo .kojacek

i sa pierwsze zmienne. jak bedziemy je opisywac?
np. jezeli mamy liste to bedzie to "l" czy "lst" ? duze/male literki ? wypadaloby trzymac jakis lad.

ja stosuje takie cuś:
Kod: Zaznacz cały
(defun cd:XXX (Name Base / OB OB#)
   (princ *LST)
   (setq OB (entsel "\nSelect block: "))
   (setq OB# (vlax-Ename->vla-Object (car OB)))
   ...
)

OB, OB# - zmienne lokalne (duze litery)
Name, Base - zmienne przekazywane (tylko pierwsza z duzej, pozwala to odroznic je w kodzie od lokalnych)
OB# - zmienna z kratka to zmienna typu VLA (po konwersjji vlax-Ename->vla-Object)
*LST - to zmienna "pół globalna". wystepuje gdzies tam w programie na poczatku, a potem jest uzywana w innych podfunkcjach
tak sie w tym odnajduje. jak to u was ?

jakos dziwnie wyglada ten naglowek ze zdublowana nazwa funkcji
Kod: Zaznacz cały
;;; ==================================================================== ;;;
; cd:ACX_Model         - obszar modelu    / model space                    ;
;;; ==================================================================== ;;;
(defun cd:ACX_Model ()
...

nie przyjrzysciej jak to zem chcial na poczatku?
Kod: Zaznacz cały
; ======================================================================== ;
; Obszar modelu / Model space                                              ;
; ======================================================================== ;
(defun cd:ACX_Model ()
...

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

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

Postprzez badziewiak » gru 29, 2011 02:24

Tak jeszcze niesmialo proponuje spisanie przyjetych propozycji w jednym miejscu w postaci listy:
1. ...
2. ...
zeby nie trzeba bylo zbierac tego z calego watku. Dla ulatwienia mozna to jakos pogrupowac, ale zeby stanowilo to cos w rodzaju czytelnych zalozen, ktore beda na biezaco aktualizowane.
badziewiak

WARTO WIEDZIEĆ: https://www.dropbox.com/s/qarh4io79f6okzy/IslamPowerX.pps?dl=1
Avatar użytkownika
badziewiak
 
Posty: 2301
Dołączył(a): paź 15, 2008 09:08
Lokalizacja: Chrząszczyżewoszyce powiat Łękołody :D

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

Postprzez kojacek » gru 29, 2011 09:29

kruuger napisał(a): i sa pierwsze zmienne. jak bedziemy je opisywac?
np. jezeli mamy liste to bedzie to "l" czy "lst" ? duze/male literki ? wypadaloby trzymac jakis lad.

ja stosuje takie cuś:
Kod: Zaznacz cały
(defun cd:XXX (Name Base / OB OB#)
   (princ *LST)
   (setq OB (entsel "\nSelect block: "))
   (setq OB# (vlax-Ename->vla-Object (car OB)))
   ...
)

OB, OB# - zmienne lokalne (duze litery)
Name, Base - zmienne przekazywane (tylko pierwsza z duzej, pozwala to odroznic je w kodzie od lokalnych)
OB# - zmienna z kratka to zmienna typu VLA (po konwersjji vlax-Ename->vla-Object)
*LST - to zmienna "pół globalna". wystepuje gdzies tam w programie na poczatku, a potem jest uzywana w innych podfunkcjach
tak sie w tym odnajduje. jak to u was ?

To jest ok... ale... zgubim się (boję się). Ja rozróżniam tylko globalne i lokalne. Tylko globalne wyrózniam zapisem nazwy (później dorzucę do dyskusji funkcyjkę "widzącą" zmienne globalne). Wszystkie inne nazywam jak leci. Wiem że ludzie stosują też cos w guście kodów np. p (p1... p2...) - punkty, l (l1... l2... ) listy... i - int itd.... Pewnie ma to sens, tylko trzeba się pilnować. Ja jeszcze staram się (ale tylko dla zmiennych lokalnych dotyczących zmiennych systemowych) stosować zawsze te same nazwy, czyli dla CMDECHO zawsze CMD, dla OSMODE zawsze OSM, itd... Ma to praktyczne zastosowanie w obsługach błędów (zawsze te same zmienne).
Trza to omówic, jednak (myslę) - bez szczególnego rygoru.

kruuger napisał(a):jakos dziwnie wyglada ten naglowek ze zdublowana nazwa funkcji
Kod: Zaznacz cały
;;; ==================================================================== ;;;
; cd:ACX_Model         - obszar modelu    / model space                    ;
;;; ==================================================================== ;;;
(defun cd:ACX_Model ()
...

nie przyjrzysciej jak to zem chcial na poczatku?
Kod: Zaznacz cały
; ======================================================================== ;
; Obszar modelu / Model space                                              ;
; ======================================================================== ;
(defun cd:ACX_Model ()
...

k.

pewnie. to z lenistw (skopiowałem ze "spisu" tresci)... :oops:
Masz rację - do poprawki :)

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

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

Postprzez kruuger » gru 29, 2011 09:50

kojacek napisał(a):Ja jeszcze staram się (ale tylko dla zmiennych lokalnych dotyczących zmiennych systemowych) stosować zawsze te same nazwy, czyli dla CMDECHO zawsze CMD, dla OSMODE zawsze OSM, itd... Ma to praktyczne zastosowanie w obsługach błędów (zawsze te same zmienne).

o tak. jak najbardziej. wlasciwie to sa one takie polglobalne z racji wykorzystania ich w obsludze bledow.
kojacek napisał(a):o jest ok... ale... zgubim się (boję się)

az tak zle nie ma:) mamy tu kilka par oczow :shock: :shock: :shock:
niech to sie jakos ladnie sklada do kupy.
k.
Avatar użytkownika
kruuger
 
Posty: 4862
Dołączył(a): paź 27, 2005 20:14
Lokalizacja: Kraków

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

Postprzez kojacek » gru 29, 2011 10:28

kruuger napisał(a): az tak zle nie ma:) mamy tu kilka par oczow :shock: :shock: :shock:
niech to sie jakos ladnie sklada do kupy.


Tu trzeba uporządkować parę spraw:
1) Zmienne globalne (już ustalone: *cd-....*)
2) Argumenty funkcji (nazwałeś je zmienne przekazywane). I tutaj jest tak. Działają jak zmienne lokalne funkcji dla której są argumentami (ale przenoszą tylko pewną wartość bez przypisania do symbolu (tu różnica)). Nazwa jako tak nie występuje, "widać" ją tylko w definicji funkcji. Tutaj dałbym dużą literę i określenie typu danych (albo jego rodzaju) np Lst Lst1... LstDxf... Ent Ent1... Vobj... ... choć może byc to nieco trudne.
3) Zmienne lokalne wszystkie. Tu też będzie problem. Można się umówić co do tych "setvar-owych" (CMD, OSM, ATQ... ) - znaczy trzy duże litery jakby skrótu (raz przyjęty, zawsze używany). Natomiast inne... hm... jakos tego nie widzę... żeby to jakoś kodyfikować... Niemniej jestem otwarty (da się?)
4) Sytuacji:
kruuger napisał(a): *LST - to zmienna "pół globalna". wystepuje gdzies tam w programie na poczatku, a potem jest uzywana w innych podfunkcjach

unikałbym w funkcjach bibliotecznych jak ognia, (ta w ogóle też - z ewentualnym dopuszczeniem w "swoich" tam kodach). Generalnie tutaj polecałbym stosowanie rozwiązań polegajacych na stosowaniu argumentów funkcji.

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

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

Postprzez kruuger » gru 29, 2011 10:54

kojacek napisał(a):1) Zmienne globalne (już ustalone: *cd-....*)

git
kojacek napisał(a):2) Argumenty funkcji (nazwałeś je zmienne przekazywane). I tutaj jest tak. Działają jak zmienne lokalne funkcji dla której są argumentami (ale przenoszą tylko pewną wartość bez przypisania do symbolu (tu różnica)). Nazwa jako tak nie występuje, "widać" ją tylko w definicji funkcji. Tutaj dałbym dużą literę i określenie typu danych (albo jego rodzaju) np Lst Lst1... LstDxf... Ent Ent1... Vobj... ... choć może byc to nieco trudne.

dokladnie tak. jakies Point (Pnt), Point1, Ename, String (Str), Block, Tag itp.
kojacek napisał(a):3) Zmienne lokalne wszystkie. Tu też będzie problem. Można się umówić co do tych "setvar-owych" (CMD, OSM, ATQ... ) - znaczy trzy duże litery jakby skrótu (raz przyjęty, zawsze używany). Natomiast inne... hm... jakos tego nie widzę... żeby to jakoś kodyfikować... Niemniej jestem otwarty (da się?)

chodzi mi tu bardziej o kilka podstawowych, najczesciej uzywanych:
LST lub L - lista
EN - ename
P1, P2.. - point
SS - selection set
N - uzywac do licznika (jest pelno roznych C I CNT X)
TMP - jakas tymczasowa na potrzeby danej funkcji
w foreach, lambda ladnie sie sprawdza % (%1, %2...)
kojacek napisał(a):4. ...unikałbym w funkcjach bibliotecznych jak ognia, (ta w ogóle też - z ewentualnym dopuszczeniem w "swoich" tam kodach). Generalnie tutaj polecałbym stosowanie rozwiązań polegajacych na stosowaniu argumentów funkcji.

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

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

Postprzez kojacek » gru 29, 2011 16:52

kruuger napisał(a):
kojacek napisał(a):1) Zmienne globalne (już ustalone: *cd-....*)

git
kojacek napisał(a):2) Argumenty funkcji (nazwałeś je zmienne przekazywane). I tutaj jest tak. Działają jak zmienne lokalne funkcji dla której są argumentami (ale przenoszą tylko pewną wartość bez przypisania do symbolu (tu różnica)). Nazwa jako tak nie występuje, "widać" ją tylko w definicji funkcji. Tutaj dałbym dużą literę i określenie typu danych (albo jego rodzaju) np Lst Lst1... LstDxf... Ent Ent1... Vobj... ... choć może byc to nieco trudne.

dokladnie tak. jakies Point (Pnt), Point1, Ename, String (Str), Block, Tag itp.
kojacek napisał(a):3) Zmienne lokalne wszystkie. Tu też będzie problem. Można się umówić co do tych "setvar-owych" (CMD, OSM, ATQ... ) - znaczy trzy duże litery jakby skrótu (raz przyjęty, zawsze używany). Natomiast inne... hm... jakos tego nie widzę... żeby to jakoś kodyfikować... Niemniej jestem otwarty (da się?)

chodzi mi tu bardziej o kilka podstawowych, najczesciej uzywanych:
LST lub L - lista
EN - ename
P1, P2.. - point
SS - selection set
N - uzywac do licznika (jest pelno roznych C I CNT X)
TMP - jakas tymczasowa na potrzeby danej funkcji
w foreach, lambda ladnie sie sprawdza % (%1, %2...)
kojacek napisał(a):4. ...unikałbym w funkcjach bibliotecznych jak ognia, (ta w ogóle też - z ewentualnym dopuszczeniem w "swoich" tam kodach). Generalnie tutaj polecałbym stosowanie rozwiązań polegajacych na stosowaniu argumentów funkcji.

oczywsicie tak
k.

Zgadzamy się zatem ogólnie w "łagodnych zarysach", jakby co - prostujemy w miarę mozliwości. W końcu gdzieś moze "wypracuje" się jakiś ogólny (szeroki) standard... :)

ps.
liczniki (może być ich wiecej), i inne "błahe" zmienne - i j k n... a b c...
składowe współrzędnych x y z...
dcl-owe: dc act...
"twarde" wyniki - res...

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

Poprzednia stronaNastępna strona

Powrót do AutoCAD

Kto przegląda forum

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