perlon

Użytkownik forum
  • Postów

    425
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    33

Aktywność reputacji

  1. Upvote
    perlon otrzymał(a) reputację od Parikon w Przybornik PARIKON   
    Warunek if(wierszy > 0) i for(int = 0; i < wiersz; i++ ) są tożsame. if jest niepotrzebny, bo jeżeli wierszy == 0 to 0 < 0 = false i pętla for się nie wykona ani razu.
    Na razie baza jest mikro i czas wykonania będzie nie mierzalny, ale co do zasady tego tak nie wolno robić !!! Co się stanie jak rekordów będzie 1000 000?
    To powinno się załatwić :
    SELECT COUNT() FROM ramki_dane WHERE format='jakis_format_z_pola_tekstowego' Jeżeli zwróci 0 to nie ma rekordu w przeciwnym razie wiadomo. Niech się baza męczy a nie twoja aplikacja. Generalnie SELECT * FROM ... bez WHERE to bardzo zła metoda. 
    Zgadza się, ale lepiej żeby baza broniła się sama niż ma ją bronić zewnętrzna aplikacja. Wewnętrzne mechanizmy i algorytmy bazy będą zawsze lepsze niż iterowanie rekordów w aplikacji. Polecam indeks UNIQUE albo PRIMARY KEY
  2. Upvote
    perlon otrzymał(a) reputację od kruszynski w Przybornik PARIKON   
    Jakiś czas temu wpadła mi w ręce taka pozycja:
    https://helion.pl/ksiazki/refaktoryzacja-ulepszanie-struktury-istniejacego-kodu-martin-fowler-kent-beck-john-brant-william-opdy,refukv.htm#format/d
    Trochę już lat od wydania ale mi osobiście zmieniła spojrzenie na sporo rzeczy jeżeli chodzi o optymalizacje kodu.
    W przypadku kot wysokościowych są duże fragmenty powtórzonego kodu np. tego związanego z pobieraniem od użytkownika  punktów, obsługą warstw czy rysowaniem tekstu. Dla każdej z kot jest on identyczny. Może warto wydzielić go do osobnej metody tym bardziej, że jak przyjdzie pomysł na inne koty to ten kod będzie potrzebny po raz kolejny. Krótszy kod łatwiej się zarządza i ewentualne poprawki robi się w jednym miejscu a nie w wielu powtórzeniach.
     
  3. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w projekt_forum.dll   
    Można nieco przyspieszyć pracę z kodem i umożliwić debugowanie kodu. Szczegóły na filmiku. Z góry przepraszam za słaby warsztat w nagrywaniu bo to mój pierwszy raz 😉
     
  4. Upvote
    perlon otrzymał(a) reputację od Parikon w projekt_forum.dll   
    Można nieco przyspieszyć pracę z kodem i umożliwić debugowanie kodu. Szczegóły na filmiku. Z góry przepraszam za słaby warsztat w nagrywaniu bo to mój pierwszy raz 😉
     
  5. Upvote
    perlon przyznał(a) reputację dla Adam Klaczek w Arkusz a skala opisowa   
    Dzień dobry,
    Czy skale opisowe (skale rzutni) ma Pan dodane do listy skal obiektów opisowych?
    Może ten krótki filmik będzie przydatny:
    Skale_opisowe.mp4
  6. Like
    perlon otrzymał(a) reputację od kruszynski w projekt_forum.dll   
    Można nieco przyspieszyć pracę z kodem i umożliwić debugowanie kodu. Szczegóły na filmiku. Z góry przepraszam za słaby warsztat w nagrywaniu bo to mój pierwszy raz 😉
     
  7. Upvote
    perlon otrzymał(a) reputację od s1016 w projekt_forum.dll   
    Można nieco przyspieszyć pracę z kodem i umożliwić debugowanie kodu. Szczegóły na filmiku. Z góry przepraszam za słaby warsztat w nagrywaniu bo to mój pierwszy raz 😉
     
  8. Upvote
    perlon przyznał(a) reputację dla kruszynski w [DCL] Walidacja wartości edit-box'a   
    NIezupełnie wyszło tak jak chciałem, ale może wystarczy.
    Blokuje inny element okna. ale nie przy każdej zmianie, ale przy zatwierdzaniu wartości, np przechodząc do innej komórki,albo [enter] na koniec.
    plik DCL wygląda tak:
    EditCheck : dialog { label = ""; :edit_box{ key="path"; label="Ścieżka"; edit_width=6; fixed_width=true; action = "(DCL:Edit:IsValid)"; } : button { action = "(done_dialog 0)"; key = "accept"; label = "Zapisz"; } : button { action = "(done_dialog 0)"; key = "cancel"; label = "Anuluj"; is_cancel = true; } } plik LSP tak:
    (defun DCL:Edit:IsValid ( / *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nDCL:Edit:IsValid :*error*: " ) (princ msg ) (princ "\n") ) ) ) (print (strcat "wartość wpisana do okna: " $key " to: " $value ) ) (if (= "" $value) (mode_tile "accept" 1) (mode_tile "accept" 0) ) ) (defun c:testEdit ( / dcl_id RunDialogResult coords LastPath *error* ) (defun *error* ( msg / ) (if (not (null msg ) ) (progn (princ "\nc:testEdit:*error*: " ) (princ msg ) (princ "\n") ) ) ) (setq DCL_Path "C:\\<< TWOJA ŚCIEŻKA >>\\edit_check.DCL") (setq dcl_id (load_dialog DCL_Path)) (setq RunDialogResult t ) (setq LastPath "" ) (while RunDialogResult (if(not(new_dialog "EditCheck" dcl_id))(exit)) (action_tile "cancel" "(done_dialog -1)") (setq RunDialogResult(start_dialog)) (cond ((= RunDialogResult 0) (progn (setq RunDialogResult nil ))) ; ESC pressed (t (print RunDialogResult)) ) ) (unload_dialog dcl_id) (princ) )  
  9. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w EncryptLISP   
    Naskrobałem dcl'a dla ułatwienia wyboru plików do szyfrowania. Może komuś się przyda.
     
    Lsp2Zel.lsp
     
  10. Upvote
    perlon przyznał(a) reputację dla Adam Klaczek w UCS (LUW) obrót układu   
    Dzień dobry,
    Obejściem może być wybranie, zamiast opcji Z - opcji 3 (3punkty).
    Pozdrawiam
  11. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w statystyka odchylenia   
    Winna jest domyślna projekcja typów. Zamień   (setq stap1 (/ (* 100 stat1) n)) na (setq stap1 (/ (* 100.0 stat1) n)) i w następnych wierszach  a zobaczysz różnicę
     
  12. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w Szablony i skrypty startowe ZWPack   
    Moje rozwiązanie jest zbudowane na potrzeby innych lispów, tak aby mogły się odwoływać do warstw poprzez zmienne. Konkretne nazwy są zapisane w zewnętrznym pliku *.ini. Zaznaczam że kody pochodzą sprzed kilku(nastu) lat i dzisiaj pewnie napisałbym to trochę inaczej, ale lepsze jest wrogiem dobrego ;-).
    (defun SetLayers (/ temp systemEnv oHandle xName eObject IniList IniFile) (setq systemEnv (cd:ENV_SaveEnvVariable)) (setvar "cmdecho" 0) (setvar "regenmode" 0) (setq *layerKontur* "kontur" *layerOsie* "osie" *layerUkryte* "ukryte" *layerOpisy* "opisy" *layerWymiary* "wymiary" *layerStolarka* "stolarka" *layerCienkie* "cienkie" *layerHatche* "hatche" *layerPrety* "prety" *layerObok* "obok" *layerRzutnie* "rzutnie" *layer3DModel* "3D_model" IniFile (findfile "dodatki.ini") ) (setq IniList (if (not IniFile) (list) (cd:INI_Read IniFile))) (or IniFile (setq IniFile (strcat *cd-ApplicationPath* "dodatki.ini"))) (setq IniList (add_gr_ini IniList "[Layers]")) (if (setq temp (get_ini IniList "[Layers]" "kontur")) (setq *layerKontur* temp) (setq IniList (set_ini IniList "[Layers]" "kontur" *layerKontur*)) ) (if (setq temp (get_ini IniList "[Layers]" "osie")) (setq *layerOsie* temp) (setq IniList (set_ini IniList "[Layers]" "osie" *layerOsie*)) ) (if (setq temp (get_ini IniList "[Layers]" "ukryte")) (setq *layerUkryte* temp) (setq IniList (set_ini IniList "[Layers]" "ukryte" *layerUkryte*)) ) (if (setq temp (get_ini IniList "[Layers]" "opisy")) (setq *layerOpisy* temp) (setq IniList (set_ini IniList "[Layers]" "opisy" *layerOpisy*)) ) (if (setq temp (get_ini IniList "[Layers]" "wymiary")) (setq *layerWymiary* temp) (setq IniList (set_ini IniList "[Layers]" "wymiary" *layerWymiary*)) ) (if (setq temp (get_ini IniList "[Layers]" "stolarka")) (setq *layerStolarka* temp) (setq IniList (set_ini IniList "[Layers]" "stolarka" *layerStolarka*)) ) (if (setq temp (get_ini IniList "[Layers]" "cienkie")) (setq *layerCienkie* temp) (setq IniList (set_ini IniList "[Layers]" "cienkie" *layerCienkie*)) ) (if (setq temp (get_ini IniList "[Layers]" "hatche")) (setq *layerHatche* temp) (setq IniList (set_ini IniList "[Layers]" "hatche" *layerHatche*)) ) (if (setq temp (get_ini IniList "[Layers]" "prety")) (setq *layerPrety* temp) (setq IniList (set_ini IniList "[Layers]" "prety" *layerPrety*)) ) (if (setq temp (get_ini IniList "[Layers]" "obok")) (setq *layerObok* temp) (setq IniList (set_ini IniList "[Layers]" "obok" *layerObok*)) ) (if (setq temp (get_ini IniList "[Layers]" "rzutnie")) (setq *layerRzutnie* temp) (setq IniList (set_ini IniList "[Layers]" "rzutnie" *layerRzutnie*)) ) (if (setq temp (get_ini IniList "[Layers]" "3D_model")) (setq *layer3DModel* temp) (setq IniList (set_ini IniList "[Layers]" "3D_model" *layer3DModel*)) ) (cd:INI_Write IniList IniFile) (setq xName (cond ((= *cd-AppType* "ZWCAD") "zwcad.lin") (t "acad.lin") ) ) (cd:ACX_LoadLineType "dashed" xName) (cd:ACX_LoadLineType "dashdot" xName) (cd:ACX_LoadLineType "hidden2" xName) (cd:ACX_LoadLineType "center2" xName) (foreach xName (list (list *layerKontur* "continuous" 2 T) (list *layerOsie* "center2" 1 T) (list *layerUkryte* "hidden2" 1 T) (list *layerOpisy* "continuous" 7 T) (list *layerWymiary* "continuous" 1 T) (list *layerStolarka* "continuous" 3 T) (list *layerCienkie* "continuous" 1 T) (list *layerHatche* "continuous" 254 T) (list *layerPrety* "continuous" 5 T) (list *layerObok* "continuous" 9 T) (list *layerRzutnie* "continuous" 60 T) (list *layer3DModel* "continuous" 94 T) ) (setq eObject (cd:ACX_AddLayer (nth 0 xName))) (vla-put-linetype eObject (nth 1 xName)) (vla-put-color eObject (nth 2 xName)) (vla-put-plottable eObject (nth 3 xName)) ) (cd:ENV_RestEnvVariable systemEnv) ) Jak widać ja wczytuję linie z zwcad.lin ale jest to identyczny plik jak zwcadiso.lin. Nie wiem po co są dublowane. Sam plik ini jest banalny ale wydaje się, że użycie takiego sposobu jest łatwiejsze do użycia dla koleżanek i kolegów w biurze, którzy do LISPA trochę z pazurami podchodzą.
    [Layers] kontur=kontur osie=osie ukryte=ukryte opisy=opisy wymiary=wymiary stolarka=stolarka cienkie=cienkie hatche=hatche prety=prety obok=obok rzutnie=rzutnie 3D_model=3D_model Dzięki dmatusz3 za swoje rozwiązanie, bo chyba tym wzorem dorzucę sobie do ini również ustawienie linetype, color etc. Przy okazji, jak widać używam  CADPL-Pack-v1, którego gorąco polecam.
    Na koniec jeszcze pokażę reaktora na komendy co zwalnia mnie z pamiętania o zmianach warstw w trakcie rysowania. Jest to z małymi poprawkami do ZwCAD'a kod Andrzeja Gumuły na co jest odpowiedni (c) w kodzie. Zdaje się, że na forum było pokazywane inne rozwiązanie chyba nieco mniej rozwlekłe, ale to mi działa i na razie tego nie zmieniam.
    ;;;* Funkcje ustanawia reaktor do zmiany warstwy dla wyszczególnionych komend (defun SetLayInCom (layer commandslist) (if (= (getvar "PRODUCT") "ZWCAD") (progn (vlr-remove-all :VLR-Command-Reactor) (vlr-command-reactor nil '((:vlr-commandwillstart . bylayer) (:vlr-commandended . previous) (:vlr-commandcancelled . previous) (:vlr-commandfailed . previous) ) ) ) (progn (if (not globalcommandslist) ; zabezpiecza przed ponowną deklaracją reaktora (vlr-command-reactor ; przy ponownym wczytaniu lisp'a nil '((:vlr-commandwillstart . bylayer) (:vlr-commandended . previous) (:vlr-commandcancelled . previous) (:vlr-commandfailed . previous) ) ) ) ) ) (mapcar '(lambda (x) (set x nil)) '(reactorlayer reactorcolor reactorltype reactorlweight) ) (mapcar '(lambda (x y) (set x y)) '(globalcommandslist globallayer) (list commandslist layer) ) (foreach x layer (if (not (tblsearch "LAYER" x)) (entmake (list '(0 . "LAYER") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLayerTableRecord") (cons 2 x) '(70 . 0) '(62 . 7) '(6 . "Continuous") '(370 . -3) ) ) ) ;end if ) ;end foreach (defun bylayer (idreactor namecommand / komendy licznik) (setq licznik 0) (foreach komendy globalcommandslist (if (member (strcase (car namecommand)) (mapcar 'strcase komendy) ) (progn (if (not (and reactorlayer reactorcolor reactorltype reactorlweight ) ) (mapcar '(lambda (x y) (set x (getvar y))) '(reactorlayer reactorcolor reactorltype reactorlweight) '("clayer" "cecolor" "celtype" "celweight") ) ) ; end if (mapcar '(lambda (x y) (setvar x y)) '("clayer" "cecolor" "celtype" "celweight") (list (nth licznik globallayer) "256" "Bylayer" -1) ) ) ) ;end If (setq licznik (1+ licznik)) ) ;end foreach ) ;end ByLayer (defun previous (idreactor namecommand / komendy licznik) (setq licznik 0) (foreach komendy globalcommandslist (if (member (strcase (car namecommand)) (mapcar 'strcase komendy ) ) (progn (if (and reactorlayer reactorcolor reactorltype reactorlweight) (mapcar '(lambda (x y) (setvar x y)) (list "clayer" "cecolor" "celtype" "celweight") (list reactorlayer reactorcolor reactorltype reactorlweight ) ) ) (mapcar '(lambda (x) (set x nil)) '(reactorlayer reactorcolor reactorltype reactorlweight) ) ) ) (setq licznik (1+ licznik)) ) ;end cond ) ;end Previous t (prompt "SetLayInCom (C)2003 Andrzej Gumuła.") (princ) ) ;end file Na koniec wywołanie w kodzie startowym i mamy piękny reaktor na dowolne komendy jakie sobie dopiszemy.
    (setlayincom (list *layerWymiary* *layerHatche* *layerOsie* *layerCienkie* *layerOpisy*) '( ("DIMLINEAR" "DIMALIGNED" "DIMRADIUS" "DIMDIAMETER" "DIMANGULAR" "DIMORDINATE" "DIMCONTINUE" "DIMBASELINE" "QDIM" "DIMJOGGED" "DIMARC") ("BHATCH") ("DIMCENTER") ("QLEADER") ("DTEXT" "TEXT") ) )  
     
  13. Upvote
    perlon otrzymał(a) reputację od kruszynski w Szablony i skrypty startowe ZWPack   
    Moje rozwiązanie jest zbudowane na potrzeby innych lispów, tak aby mogły się odwoływać do warstw poprzez zmienne. Konkretne nazwy są zapisane w zewnętrznym pliku *.ini. Zaznaczam że kody pochodzą sprzed kilku(nastu) lat i dzisiaj pewnie napisałbym to trochę inaczej, ale lepsze jest wrogiem dobrego ;-).
    (defun SetLayers (/ temp systemEnv oHandle xName eObject IniList IniFile) (setq systemEnv (cd:ENV_SaveEnvVariable)) (setvar "cmdecho" 0) (setvar "regenmode" 0) (setq *layerKontur* "kontur" *layerOsie* "osie" *layerUkryte* "ukryte" *layerOpisy* "opisy" *layerWymiary* "wymiary" *layerStolarka* "stolarka" *layerCienkie* "cienkie" *layerHatche* "hatche" *layerPrety* "prety" *layerObok* "obok" *layerRzutnie* "rzutnie" *layer3DModel* "3D_model" IniFile (findfile "dodatki.ini") ) (setq IniList (if (not IniFile) (list) (cd:INI_Read IniFile))) (or IniFile (setq IniFile (strcat *cd-ApplicationPath* "dodatki.ini"))) (setq IniList (add_gr_ini IniList "[Layers]")) (if (setq temp (get_ini IniList "[Layers]" "kontur")) (setq *layerKontur* temp) (setq IniList (set_ini IniList "[Layers]" "kontur" *layerKontur*)) ) (if (setq temp (get_ini IniList "[Layers]" "osie")) (setq *layerOsie* temp) (setq IniList (set_ini IniList "[Layers]" "osie" *layerOsie*)) ) (if (setq temp (get_ini IniList "[Layers]" "ukryte")) (setq *layerUkryte* temp) (setq IniList (set_ini IniList "[Layers]" "ukryte" *layerUkryte*)) ) (if (setq temp (get_ini IniList "[Layers]" "opisy")) (setq *layerOpisy* temp) (setq IniList (set_ini IniList "[Layers]" "opisy" *layerOpisy*)) ) (if (setq temp (get_ini IniList "[Layers]" "wymiary")) (setq *layerWymiary* temp) (setq IniList (set_ini IniList "[Layers]" "wymiary" *layerWymiary*)) ) (if (setq temp (get_ini IniList "[Layers]" "stolarka")) (setq *layerStolarka* temp) (setq IniList (set_ini IniList "[Layers]" "stolarka" *layerStolarka*)) ) (if (setq temp (get_ini IniList "[Layers]" "cienkie")) (setq *layerCienkie* temp) (setq IniList (set_ini IniList "[Layers]" "cienkie" *layerCienkie*)) ) (if (setq temp (get_ini IniList "[Layers]" "hatche")) (setq *layerHatche* temp) (setq IniList (set_ini IniList "[Layers]" "hatche" *layerHatche*)) ) (if (setq temp (get_ini IniList "[Layers]" "prety")) (setq *layerPrety* temp) (setq IniList (set_ini IniList "[Layers]" "prety" *layerPrety*)) ) (if (setq temp (get_ini IniList "[Layers]" "obok")) (setq *layerObok* temp) (setq IniList (set_ini IniList "[Layers]" "obok" *layerObok*)) ) (if (setq temp (get_ini IniList "[Layers]" "rzutnie")) (setq *layerRzutnie* temp) (setq IniList (set_ini IniList "[Layers]" "rzutnie" *layerRzutnie*)) ) (if (setq temp (get_ini IniList "[Layers]" "3D_model")) (setq *layer3DModel* temp) (setq IniList (set_ini IniList "[Layers]" "3D_model" *layer3DModel*)) ) (cd:INI_Write IniList IniFile) (setq xName (cond ((= *cd-AppType* "ZWCAD") "zwcad.lin") (t "acad.lin") ) ) (cd:ACX_LoadLineType "dashed" xName) (cd:ACX_LoadLineType "dashdot" xName) (cd:ACX_LoadLineType "hidden2" xName) (cd:ACX_LoadLineType "center2" xName) (foreach xName (list (list *layerKontur* "continuous" 2 T) (list *layerOsie* "center2" 1 T) (list *layerUkryte* "hidden2" 1 T) (list *layerOpisy* "continuous" 7 T) (list *layerWymiary* "continuous" 1 T) (list *layerStolarka* "continuous" 3 T) (list *layerCienkie* "continuous" 1 T) (list *layerHatche* "continuous" 254 T) (list *layerPrety* "continuous" 5 T) (list *layerObok* "continuous" 9 T) (list *layerRzutnie* "continuous" 60 T) (list *layer3DModel* "continuous" 94 T) ) (setq eObject (cd:ACX_AddLayer (nth 0 xName))) (vla-put-linetype eObject (nth 1 xName)) (vla-put-color eObject (nth 2 xName)) (vla-put-plottable eObject (nth 3 xName)) ) (cd:ENV_RestEnvVariable systemEnv) ) Jak widać ja wczytuję linie z zwcad.lin ale jest to identyczny plik jak zwcadiso.lin. Nie wiem po co są dublowane. Sam plik ini jest banalny ale wydaje się, że użycie takiego sposobu jest łatwiejsze do użycia dla koleżanek i kolegów w biurze, którzy do LISPA trochę z pazurami podchodzą.
    [Layers] kontur=kontur osie=osie ukryte=ukryte opisy=opisy wymiary=wymiary stolarka=stolarka cienkie=cienkie hatche=hatche prety=prety obok=obok rzutnie=rzutnie 3D_model=3D_model Dzięki dmatusz3 za swoje rozwiązanie, bo chyba tym wzorem dorzucę sobie do ini również ustawienie linetype, color etc. Przy okazji, jak widać używam  CADPL-Pack-v1, którego gorąco polecam.
    Na koniec jeszcze pokażę reaktora na komendy co zwalnia mnie z pamiętania o zmianach warstw w trakcie rysowania. Jest to z małymi poprawkami do ZwCAD'a kod Andrzeja Gumuły na co jest odpowiedni (c) w kodzie. Zdaje się, że na forum było pokazywane inne rozwiązanie chyba nieco mniej rozwlekłe, ale to mi działa i na razie tego nie zmieniam.
    ;;;* Funkcje ustanawia reaktor do zmiany warstwy dla wyszczególnionych komend (defun SetLayInCom (layer commandslist) (if (= (getvar "PRODUCT") "ZWCAD") (progn (vlr-remove-all :VLR-Command-Reactor) (vlr-command-reactor nil '((:vlr-commandwillstart . bylayer) (:vlr-commandended . previous) (:vlr-commandcancelled . previous) (:vlr-commandfailed . previous) ) ) ) (progn (if (not globalcommandslist) ; zabezpiecza przed ponowną deklaracją reaktora (vlr-command-reactor ; przy ponownym wczytaniu lisp'a nil '((:vlr-commandwillstart . bylayer) (:vlr-commandended . previous) (:vlr-commandcancelled . previous) (:vlr-commandfailed . previous) ) ) ) ) ) (mapcar '(lambda (x) (set x nil)) '(reactorlayer reactorcolor reactorltype reactorlweight) ) (mapcar '(lambda (x y) (set x y)) '(globalcommandslist globallayer) (list commandslist layer) ) (foreach x layer (if (not (tblsearch "LAYER" x)) (entmake (list '(0 . "LAYER") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLayerTableRecord") (cons 2 x) '(70 . 0) '(62 . 7) '(6 . "Continuous") '(370 . -3) ) ) ) ;end if ) ;end foreach (defun bylayer (idreactor namecommand / komendy licznik) (setq licznik 0) (foreach komendy globalcommandslist (if (member (strcase (car namecommand)) (mapcar 'strcase komendy) ) (progn (if (not (and reactorlayer reactorcolor reactorltype reactorlweight ) ) (mapcar '(lambda (x y) (set x (getvar y))) '(reactorlayer reactorcolor reactorltype reactorlweight) '("clayer" "cecolor" "celtype" "celweight") ) ) ; end if (mapcar '(lambda (x y) (setvar x y)) '("clayer" "cecolor" "celtype" "celweight") (list (nth licznik globallayer) "256" "Bylayer" -1) ) ) ) ;end If (setq licznik (1+ licznik)) ) ;end foreach ) ;end ByLayer (defun previous (idreactor namecommand / komendy licznik) (setq licznik 0) (foreach komendy globalcommandslist (if (member (strcase (car namecommand)) (mapcar 'strcase komendy ) ) (progn (if (and reactorlayer reactorcolor reactorltype reactorlweight) (mapcar '(lambda (x y) (setvar x y)) (list "clayer" "cecolor" "celtype" "celweight") (list reactorlayer reactorcolor reactorltype reactorlweight ) ) ) (mapcar '(lambda (x) (set x nil)) '(reactorlayer reactorcolor reactorltype reactorlweight) ) ) ) (setq licznik (1+ licznik)) ) ;end cond ) ;end Previous t (prompt "SetLayInCom (C)2003 Andrzej Gumuła.") (princ) ) ;end file Na koniec wywołanie w kodzie startowym i mamy piękny reaktor na dowolne komendy jakie sobie dopiszemy.
    (setlayincom (list *layerWymiary* *layerHatche* *layerOsie* *layerCienkie* *layerOpisy*) '( ("DIMLINEAR" "DIMALIGNED" "DIMRADIUS" "DIMDIAMETER" "DIMANGULAR" "DIMORDINATE" "DIMCONTINUE" "DIMBASELINE" "QDIM" "DIMJOGGED" "DIMARC") ("BHATCH") ("DIMCENTER") ("QLEADER") ("DTEXT" "TEXT") ) )  
     
  14. Upvote
    perlon otrzymał(a) reputację od Adam Klaczek w Szablony i skrypty startowe ZWPack   
    Moje rozwiązanie jest zbudowane na potrzeby innych lispów, tak aby mogły się odwoływać do warstw poprzez zmienne. Konkretne nazwy są zapisane w zewnętrznym pliku *.ini. Zaznaczam że kody pochodzą sprzed kilku(nastu) lat i dzisiaj pewnie napisałbym to trochę inaczej, ale lepsze jest wrogiem dobrego ;-).
    (defun SetLayers (/ temp systemEnv oHandle xName eObject IniList IniFile) (setq systemEnv (cd:ENV_SaveEnvVariable)) (setvar "cmdecho" 0) (setvar "regenmode" 0) (setq *layerKontur* "kontur" *layerOsie* "osie" *layerUkryte* "ukryte" *layerOpisy* "opisy" *layerWymiary* "wymiary" *layerStolarka* "stolarka" *layerCienkie* "cienkie" *layerHatche* "hatche" *layerPrety* "prety" *layerObok* "obok" *layerRzutnie* "rzutnie" *layer3DModel* "3D_model" IniFile (findfile "dodatki.ini") ) (setq IniList (if (not IniFile) (list) (cd:INI_Read IniFile))) (or IniFile (setq IniFile (strcat *cd-ApplicationPath* "dodatki.ini"))) (setq IniList (add_gr_ini IniList "[Layers]")) (if (setq temp (get_ini IniList "[Layers]" "kontur")) (setq *layerKontur* temp) (setq IniList (set_ini IniList "[Layers]" "kontur" *layerKontur*)) ) (if (setq temp (get_ini IniList "[Layers]" "osie")) (setq *layerOsie* temp) (setq IniList (set_ini IniList "[Layers]" "osie" *layerOsie*)) ) (if (setq temp (get_ini IniList "[Layers]" "ukryte")) (setq *layerUkryte* temp) (setq IniList (set_ini IniList "[Layers]" "ukryte" *layerUkryte*)) ) (if (setq temp (get_ini IniList "[Layers]" "opisy")) (setq *layerOpisy* temp) (setq IniList (set_ini IniList "[Layers]" "opisy" *layerOpisy*)) ) (if (setq temp (get_ini IniList "[Layers]" "wymiary")) (setq *layerWymiary* temp) (setq IniList (set_ini IniList "[Layers]" "wymiary" *layerWymiary*)) ) (if (setq temp (get_ini IniList "[Layers]" "stolarka")) (setq *layerStolarka* temp) (setq IniList (set_ini IniList "[Layers]" "stolarka" *layerStolarka*)) ) (if (setq temp (get_ini IniList "[Layers]" "cienkie")) (setq *layerCienkie* temp) (setq IniList (set_ini IniList "[Layers]" "cienkie" *layerCienkie*)) ) (if (setq temp (get_ini IniList "[Layers]" "hatche")) (setq *layerHatche* temp) (setq IniList (set_ini IniList "[Layers]" "hatche" *layerHatche*)) ) (if (setq temp (get_ini IniList "[Layers]" "prety")) (setq *layerPrety* temp) (setq IniList (set_ini IniList "[Layers]" "prety" *layerPrety*)) ) (if (setq temp (get_ini IniList "[Layers]" "obok")) (setq *layerObok* temp) (setq IniList (set_ini IniList "[Layers]" "obok" *layerObok*)) ) (if (setq temp (get_ini IniList "[Layers]" "rzutnie")) (setq *layerRzutnie* temp) (setq IniList (set_ini IniList "[Layers]" "rzutnie" *layerRzutnie*)) ) (if (setq temp (get_ini IniList "[Layers]" "3D_model")) (setq *layer3DModel* temp) (setq IniList (set_ini IniList "[Layers]" "3D_model" *layer3DModel*)) ) (cd:INI_Write IniList IniFile) (setq xName (cond ((= *cd-AppType* "ZWCAD") "zwcad.lin") (t "acad.lin") ) ) (cd:ACX_LoadLineType "dashed" xName) (cd:ACX_LoadLineType "dashdot" xName) (cd:ACX_LoadLineType "hidden2" xName) (cd:ACX_LoadLineType "center2" xName) (foreach xName (list (list *layerKontur* "continuous" 2 T) (list *layerOsie* "center2" 1 T) (list *layerUkryte* "hidden2" 1 T) (list *layerOpisy* "continuous" 7 T) (list *layerWymiary* "continuous" 1 T) (list *layerStolarka* "continuous" 3 T) (list *layerCienkie* "continuous" 1 T) (list *layerHatche* "continuous" 254 T) (list *layerPrety* "continuous" 5 T) (list *layerObok* "continuous" 9 T) (list *layerRzutnie* "continuous" 60 T) (list *layer3DModel* "continuous" 94 T) ) (setq eObject (cd:ACX_AddLayer (nth 0 xName))) (vla-put-linetype eObject (nth 1 xName)) (vla-put-color eObject (nth 2 xName)) (vla-put-plottable eObject (nth 3 xName)) ) (cd:ENV_RestEnvVariable systemEnv) ) Jak widać ja wczytuję linie z zwcad.lin ale jest to identyczny plik jak zwcadiso.lin. Nie wiem po co są dublowane. Sam plik ini jest banalny ale wydaje się, że użycie takiego sposobu jest łatwiejsze do użycia dla koleżanek i kolegów w biurze, którzy do LISPA trochę z pazurami podchodzą.
    [Layers] kontur=kontur osie=osie ukryte=ukryte opisy=opisy wymiary=wymiary stolarka=stolarka cienkie=cienkie hatche=hatche prety=prety obok=obok rzutnie=rzutnie 3D_model=3D_model Dzięki dmatusz3 za swoje rozwiązanie, bo chyba tym wzorem dorzucę sobie do ini również ustawienie linetype, color etc. Przy okazji, jak widać używam  CADPL-Pack-v1, którego gorąco polecam.
    Na koniec jeszcze pokażę reaktora na komendy co zwalnia mnie z pamiętania o zmianach warstw w trakcie rysowania. Jest to z małymi poprawkami do ZwCAD'a kod Andrzeja Gumuły na co jest odpowiedni (c) w kodzie. Zdaje się, że na forum było pokazywane inne rozwiązanie chyba nieco mniej rozwlekłe, ale to mi działa i na razie tego nie zmieniam.
    ;;;* Funkcje ustanawia reaktor do zmiany warstwy dla wyszczególnionych komend (defun SetLayInCom (layer commandslist) (if (= (getvar "PRODUCT") "ZWCAD") (progn (vlr-remove-all :VLR-Command-Reactor) (vlr-command-reactor nil '((:vlr-commandwillstart . bylayer) (:vlr-commandended . previous) (:vlr-commandcancelled . previous) (:vlr-commandfailed . previous) ) ) ) (progn (if (not globalcommandslist) ; zabezpiecza przed ponowną deklaracją reaktora (vlr-command-reactor ; przy ponownym wczytaniu lisp'a nil '((:vlr-commandwillstart . bylayer) (:vlr-commandended . previous) (:vlr-commandcancelled . previous) (:vlr-commandfailed . previous) ) ) ) ) ) (mapcar '(lambda (x) (set x nil)) '(reactorlayer reactorcolor reactorltype reactorlweight) ) (mapcar '(lambda (x y) (set x y)) '(globalcommandslist globallayer) (list commandslist layer) ) (foreach x layer (if (not (tblsearch "LAYER" x)) (entmake (list '(0 . "LAYER") '(100 . "AcDbSymbolTableRecord") '(100 . "AcDbLayerTableRecord") (cons 2 x) '(70 . 0) '(62 . 7) '(6 . "Continuous") '(370 . -3) ) ) ) ;end if ) ;end foreach (defun bylayer (idreactor namecommand / komendy licznik) (setq licznik 0) (foreach komendy globalcommandslist (if (member (strcase (car namecommand)) (mapcar 'strcase komendy) ) (progn (if (not (and reactorlayer reactorcolor reactorltype reactorlweight ) ) (mapcar '(lambda (x y) (set x (getvar y))) '(reactorlayer reactorcolor reactorltype reactorlweight) '("clayer" "cecolor" "celtype" "celweight") ) ) ; end if (mapcar '(lambda (x y) (setvar x y)) '("clayer" "cecolor" "celtype" "celweight") (list (nth licznik globallayer) "256" "Bylayer" -1) ) ) ) ;end If (setq licznik (1+ licznik)) ) ;end foreach ) ;end ByLayer (defun previous (idreactor namecommand / komendy licznik) (setq licznik 0) (foreach komendy globalcommandslist (if (member (strcase (car namecommand)) (mapcar 'strcase komendy ) ) (progn (if (and reactorlayer reactorcolor reactorltype reactorlweight) (mapcar '(lambda (x y) (setvar x y)) (list "clayer" "cecolor" "celtype" "celweight") (list reactorlayer reactorcolor reactorltype reactorlweight ) ) ) (mapcar '(lambda (x) (set x nil)) '(reactorlayer reactorcolor reactorltype reactorlweight) ) ) ) (setq licznik (1+ licznik)) ) ;end cond ) ;end Previous t (prompt "SetLayInCom (C)2003 Andrzej Gumuła.") (princ) ) ;end file Na koniec wywołanie w kodzie startowym i mamy piękny reaktor na dowolne komendy jakie sobie dopiszemy.
    (setlayincom (list *layerWymiary* *layerHatche* *layerOsie* *layerCienkie* *layerOpisy*) '( ("DIMLINEAR" "DIMALIGNED" "DIMRADIUS" "DIMDIAMETER" "DIMANGULAR" "DIMORDINATE" "DIMCONTINUE" "DIMBASELINE" "QDIM" "DIMJOGGED" "DIMARC") ("BHATCH") ("DIMCENTER") ("QLEADER") ("DTEXT" "TEXT") ) )  
     
  15. Upvote
    perlon otrzymał(a) reputację od kruszynski w Wymiar szeregowy od początku?   
    Najprostsze z możliwych rozwiązanie to :
    (defun c:wymiarszeregowy( / )
        (command "_dimlinear" pause pause pause)
        (command "_dimcontinue")
    )
     
  16. Upvote
    perlon otrzymał(a) reputację od kruszynski w Możliwość ustawienia odrębnych właściwości warstw dla rzutni [Wprowadzono z ZWCAD 2021]   
    A czy nie można by tego zrealizować za pomocą styli drukowania? Przypisać do layoutu odpowiedni styl do danej fazy i włączyć pokazywanie arkusza zgodnie ze stylem (Display plot styles).Oznaczenia specyficzne dla danej fazy umieszczać na osobnych warstwach i ustalać ich widoczność w filtrze warstw dla rzutni. Wydaje mi się, że jest to spokojnie do ogarnięcia przy obecnej funkcjonalności. Poszczególne fazy to byłyby kolejne layouty.
  17. Upvote
    perlon otrzymał(a) reputację od Adam Klaczek w Możliwość ustawienia odrębnych właściwości warstw dla rzutni [Wprowadzono z ZWCAD 2021]   
    A czy nie można by tego zrealizować za pomocą styli drukowania? Przypisać do layoutu odpowiedni styl do danej fazy i włączyć pokazywanie arkusza zgodnie ze stylem (Display plot styles).Oznaczenia specyficzne dla danej fazy umieszczać na osobnych warstwach i ustalać ich widoczność w filtrze warstw dla rzutni. Wydaje mi się, że jest to spokojnie do ogarnięcia przy obecnej funkcjonalności. Poszczególne fazy to byłyby kolejne layouty.
  18. Upvote
    perlon otrzymał(a) reputację od Parikon w Przybornik PARIKON   
    Nakładka nie powinna wymuszać w jakich jednostkach się rysuje. Powinna dać możliwość wyboru i zdaje się o ile dobrze to czytam przybornik daje taką możliwość. Nie sprawdzałem bo nie mam zainstalowanej v.2017. Nie rozumiem więc co oznacza powyższy akapit. Proponuję również zamiast słowa "Dokładność:" w oknie skali wstawić "Jednostka rysunkowa:" Para jednostka rysunkowa + skala powinna determinować wielkość liter i symboli generowanych przez przybornik. Plotowanie przestrzeni papieru przyjęło się zwyczajowo drukować w mm w skali 1:1. Więc chyba tu jest OK.  Brakuje mi w tym oknie pola tekstowego do ustalania niestandardowej skali. Ja np. często korzystam ze skali 1:75 (występuje na niektórych skalówkach, natomiast nie spotkałem się ze skalą 1:80 i 1:8). Ograniczenie wyboru jedynie do radiobox'a jest chyba zbyt daleko idącym ograniczeniem. Ograniczyłbym radioboxa i wprowadził ręczny wybór skali.
    Co do kot to wiem Martin_S że jesteś fanem stosowania norm w szczególności rysunkowych ale zgodnie z ustawą nie ma takiego obowiązku - mamy demokrację ;-)  Tak więc w twoim poście zamieniłbym słowo "powinien" na słowo "należy" a jeszcze lepiej "zaleca". Tak więc zaleca się stosowanie obowiązujących norm bo normy są obowiązujące ale nie obowiązkowe. Kol. Parikon jeżeli liczy na szersze stosowanie swojego przybornika zapewne to uwzględni.  Życzę sukcesów w dalszych pracach.
  19. Upvote
    perlon otrzymał(a) reputację od Parikon w Przybornik PARIKON   
    Widzę ciągły progress
    Dorzuciłbym do okna dialogowego obok textboxa z numerem koloru buttona z podpiętym dialogiem wyboru coloru. W lispie to (acad_truecolordlg ...).

    W c# zdaje się jest to coś około: 
    ColorDialog dlg = new ColorDialog();
                    dlg.ShowDialog();
    Ale mi w ZwCAD 2015 wyskakuje inne okno niż to wołane przez (acad_truecolordlg) a mianowicie

    Wiesz może jak w NET.API wywołuje się ten pierwszy dialog?
     
    Już znalazłem. Trzeba wskazać pełny Namespace
    ZwSoft.ZwCAD.Windows.ColorDialog dlg = new ZwSoft.ZwCAD.Windows.ColorDialog();
     
  20. Upvote
    perlon przyznał(a) reputację dla montek w Import danych z Excela do SMath   
    Widziałem , gdzieś na forum pytanie czy da się wstawić tabele z Excela do SMatha. Bezpośrednio przez schowek się nie da :( Jednak jakiś czas temu znalazłem na to sposób. Trzeba zainstalować dwie wtyczki Jedna do tworzenia tabeli druga do importu danych z Excela
                  
    Następnie tworzymy zmienną ala Macierz funkcją  importData.XLSX(4) 
    np. DANE:=importData.XLSX ("ścieżka do pliku.xlsx"; "nazwa arkusza / zakładki w pliku" ; "D5"; "F16")  "D5" - początek zakresu F16 - koniec zakresu pobieranych danych - jest kilka importów ja stosuję (4). Już mamy dostęp do danych   zmiennej 
      aby odczytać dane robimy tak    RzG:= DANE[7;2=    ! nie zamykamy nawiasu ]
    to dopiero pierwszy etap czyli pobranie danych  -  niestety trzeba pilnować ścieżki musi być pełna parametry wpisujemy w " "
      Wstawiamy tabelę 
    i mamy tabele    odznaczamy wyświetl ... - aby nie było widać opisu pod tabelą
     aby usunąć Table 4 - klikamy (dwuklik) lewym na tabeli i pojawi się okno odznaczamy show caption i gotowe
    aby dodać np. kolumnę z tytułami wierszy,  trzeba stworzyć nowy zbiór danych pobieranych z excela np. Lewa określając zakres w jednej kolumnie np. ;"DANE" ; "C5" ; C16"  lub macierz bezpośrednio w SMatch i przypisać tzn. wybieramy miejsce gdzie będą wyświetlane dane dla lewej kolumny
        w kolejnej zakładce możemy formatować wygląd  Body to zakres tabeli za danymi,
    a Left stub to  nasza kolumna z opisami  
           
    Uff i to było na tyle - dane z Excela w tabeli w SMath - zabawy trochę jest, ale się da 
    SMath to naprawdę fajne narzędzie - z mojego doświadczenia jak trzeba przenieść obliczenia do edytora to lepiej skorzystać z OpenOffice . Dane z Calc też można pobrać funkcja importData
    przyjemnej zabawy 
     
  21. Upvote
    perlon przyznał(a) reputację dla kojacek w [VisualLISP] Wczytywanie typów linii   
    Próbowałeś: cd:ACX_LoadLineType z: http://forum.cad.pl/cadpl-pack-v1-lsp-t78161.html ?
  22. Upvote
    perlon otrzymał(a) reputację od Martin_S w Edycja i zapisywanie XREF'ów   
    Witam.
    Zauważyłem taką oto przypadłość. Rysunek zawiera kilka Xref'ów. Domyślny format zapisu ustawiony na AutoCAD2010 i w takim się zapisuje każdy otwarty plik. Jednak gdy wejdę w edycję referencji (RefEdit) i zapiszę zmiany podpięta referencja jest zapisywana w formacie AC1027 czyli AutoCAD2013. Inni koledzy mający niższe wersje automatycznie tracą dostęp do referencji. Muszę wtedy otworzyć osobno plik referencji i zapisać go w formacie AutoCAD2010. Generalnie lipa bo RefClose Save nie ma opcji wyboru formatu pliku i oczywistym byłoby żeby używał formatu ustawionego globalnie ewentualnie formatu w jakim jest sama referencja.
    Wersja ZwCAD'a vernum = "2014.09.20(25578)" z pakietu Architectural 2015.
    Proszę o zgłoszenie tego jako bug'a i ewentualnie radę jak to ustawić żeby było dobrze.
  23. Upvote
    perlon otrzymał(a) reputację od dmatusz3 w Własny przycisk zaznaczający linie   
    Jeśli mogę dać rybę to w załączeniu kawałek zel'a który zlicza niebieskie linie. Podepnij pod przycisk c:countBlueLine załaduj lisp'a i używaj ;-)
     
    countBlueLine.zel
  24. Upvote
    perlon otrzymał(a) reputację od Zurek87 w Zmiana wartości wymiaru   
    Okno Properties wskazujesz wymiar pole Text override. Wpisujesz co chcesz. znaki mniejszy-większy ( <> ) przywraca oryginaną wartość wymiaru.