kojacek

Użytkownik forum
  • Postów

    236
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    26

Aktywność reputacji

  1. Upvote
    kojacek otrzymał(a) reputację od swazy w [LISP] Dostęp do elementów w szyku   
    Szyki jeśli mówimy o ich geometrycznej reprezentacji są (jak (powszechnie) wiadomo) blokami. Blokami anonimowymi. Ich struktura jest dwupoziomowa i wygląda tak: z obiektów które są powielane tworzone są bloki anonimowe. Następnie już w bloku szyku (również anonimowym) te bloki są układane w szyku prostokatnym, biegunowym lub po ścieżce, w odpowiedniej ilości.
    Progra(mistycznie) trzeba w pierwszej kolejności: wybrać blok, ma być on anonimowy, i reprezentować szyk (bo nie każdy blok anonimowy nim jest). Tu mozna skorzystać z mojej funkcji jk:BLK_getInsertType (którą znajdziesz TUTAJ). Następnie mając wybrany blok szyku trzeba zbadać jego wszystkie obiekty będą to (rzecz jasna) bloki anonimowe. Tu można skorzystać z funkcji CADPL_Pack-a, o nazwie cd:BLK_GetEntity. Tak na szybko ten proces wykonuje funkcja:
    ; getinsidearray - by kojacek (defun getinsidearray (Ename / %a)   (if     (and       (setq %a (jk:BLK_getInsertType Ename))       (wcmatch %a "ACDBASSOC*ARRAY")     )     (cd:BLK_GetEntity       (cdr (assoc 2 (entget Ename)))       nil     )     (prompt "\nTo nie szyk.")   ) ) To może wyglądać tak:

    Funkcję cd:BLK_GetEntity możesz użyć do zbadania każdego bloku anonimowego w szyku.
    Druga rzecz:
    Możliwe, acz (uważam) nie warte zachodu. Można tu wykorzystać taki sam mechanizm tworzenia osnap'ów jak dla funkcji grread. Jak wiadomo funkcja ta nie obsługuje trybów lokalizacji więc... jest w sieci kilka różnych rozwiązań (mniej lub bardziej skomplikowanych), które to symulują. 
     
  2. Upvote
    kojacek otrzymał(a) reputację od dmatusz3 w [LISP] Dostęp do elementów w szyku   
    Szyki jeśli mówimy o ich geometrycznej reprezentacji są (jak (powszechnie) wiadomo) blokami. Blokami anonimowymi. Ich struktura jest dwupoziomowa i wygląda tak: z obiektów które są powielane tworzone są bloki anonimowe. Następnie już w bloku szyku (również anonimowym) te bloki są układane w szyku prostokatnym, biegunowym lub po ścieżce, w odpowiedniej ilości.
    Progra(mistycznie) trzeba w pierwszej kolejności: wybrać blok, ma być on anonimowy, i reprezentować szyk (bo nie każdy blok anonimowy nim jest). Tu mozna skorzystać z mojej funkcji jk:BLK_getInsertType (którą znajdziesz TUTAJ). Następnie mając wybrany blok szyku trzeba zbadać jego wszystkie obiekty będą to (rzecz jasna) bloki anonimowe. Tu można skorzystać z funkcji CADPL_Pack-a, o nazwie cd:BLK_GetEntity. Tak na szybko ten proces wykonuje funkcja:
    ; getinsidearray - by kojacek (defun getinsidearray (Ename / %a)   (if     (and       (setq %a (jk:BLK_getInsertType Ename))       (wcmatch %a "ACDBASSOC*ARRAY")     )     (cd:BLK_GetEntity       (cdr (assoc 2 (entget Ename)))       nil     )     (prompt "\nTo nie szyk.")   ) ) To może wyglądać tak:

    Funkcję cd:BLK_GetEntity możesz użyć do zbadania każdego bloku anonimowego w szyku.
    Druga rzecz:
    Możliwe, acz (uważam) nie warte zachodu. Można tu wykorzystać taki sam mechanizm tworzenia osnap'ów jak dla funkcji grread. Jak wiadomo funkcja ta nie obsługuje trybów lokalizacji więc... jest w sieci kilka różnych rozwiązań (mniej lub bardziej skomplikowanych), które to symulują. 
     
  3. Upvote
    kojacek otrzymał(a) reputację od dmatusz3 w Wyciągnięcie danych z bloku dynamicznego   
    Możesz użyć funkcji cd:BLK_GetDynamicProps z biblioteki CADPL-Pack-v1.lsp, tak jak na animacji poniżej dla bloku dynamicznego ścian wielowarstwowych. Ma to zastosowanie dla AutoCAD w wersji 2004 i wyższych, dla ZwCAD - nie wiem niestety.
     

  4. Upvote
    kojacek otrzymał(a) reputację od swazy w Wyciągnięcie danych z bloku dynamicznego   
    Możesz użyć funkcji cd:BLK_GetDynamicProps z biblioteki CADPL-Pack-v1.lsp, tak jak na animacji poniżej dla bloku dynamicznego ścian wielowarstwowych. Ma to zastosowanie dla AutoCAD w wersji 2004 i wyższych, dla ZwCAD - nie wiem niestety.
     

  5. Upvote
    kojacek otrzymał(a) reputację od dmatusz3 w Jak narysować trapez równoramienny?   
    W AutoCAD-zie mam 4 kliki:
    (1) klik - zaznaczam prostokąt (2) klik - zaznaczam prawy górny wierzchołek (3) klik - po przesunięciu klikam środek górnego boku (4) klik - zanaczam lewy dolny uchwyt. Tu już wiecej nie klikam (przesuwam kursor), a z klawiatury wpisuję 50 i voila (i jeszcze ESC (z klawiatury)): 
     

  6. Upvote
    kojacek otrzymał(a) reputację od dmatusz3 w Lisp - zlecenie napisania programu   
    Z mojej strony takie coś:
    ; -------------------------------------------------------------------------------------------- ; ; by kojacek 2022 ; -------------------------------------------------------------------------------------------- ; (defun C:MOD_WAR (/ d)   (if     (setq d (cd:SYS_ReadFile nil (findfile "warstwy.dat")))     (if       (setq d         (vl-remove-if '(lambda (%)(/= (substr % 1 1) "*")) d)       )       (progn         (cd:SYS_UndoBegin)         (foreach % d (LayChProp %))         (cd:SYS_UndoEnd)       )     )   )   (princ) ) ; -------------------------------------------------------------------------------------------- ; (defun LayChProp (Data / d s c v p g x y cl :color :tcolor :lweight)   (defun :lweight (/ %1 %2 %3)     (vl-remove-if 'minusp       (if         (setq %1           (vl-sort             (vl-remove-if-not              '(lambda (%2)(wcmatch %2 "ACLNWT*"))               (atoms-family 1)             )'<           )         )         (mapcar           '(lambda (%3) (eval (read %3))) %1         )       )     )   )   (defun :tcolor ()     (vla-getinterfaceobject       (vlax-get-acad-object)       (strcat         "AutoCAD.AcCmColor."         (substr (getvar "ACADVER") 1 2)       )     )   )   (defun :color (i m / r)     (if       (<= (strlen i) 3)       (progn         (setq r (abs (atoi i)))         (if m           (if (and (>= r 0)(<= r 256)) r)           (if (and (>= r 1)(<= r 255)) r)         )       )       (progn         (setq r (cd:STR_Parse i "," t))         (if           (and (listp r)(= 3 (length r)))           (mapcar 'atoi r)         )       )     )   )   (setq d (cd:STR_Parse Data ";" t)         l (substr (car d) 2)   )   (if     (= 5 (length d))     (if       (tblobjname "LAYER" l)       (progn         (setq s (cadr d)                                        ; lay-on-off               v (vlax-ename->vla-object (tblobjname "LAYER" l)) ; lay-vlaxobj               c (:color (caddr d) nil)                          ; lay-color               p (cadddr d)                                      ; lay-ltype               g (atoi (car (cddddr d)))                         ; lay-lwght               x (ssget "_x"                   (list                     (cons 8 l)                     (cons 410 (getvar "CTAB"))                   )                 )         )         (if           (member s '("0" "1"))           (if (zerop (read s))             (LayOnOff l)           )         )         (if c           (if             (= (type c) 'INT)             (vla-put-Color v c)             (progn               (setq cl (:tcolor))               (vla-SetRGB cl (car c)(cadr c)(caddr c))               (vla-put-TrueColor v cl)             )           )         )         (if           (tblobjname "LTYPE" p)           (vla-put-Linetype v p)         )         (if           (and g (member g (:lweight)))           (vla-put-LineWeight v g)         )         (if x           (progn             (setq x (cd:SSX_Convert x 1))             (foreach % x               (vla-put-Color % 256)               (vla-put-LineType % "ByLayer")                (vla-put-LineWeight % -1)             )                  )         )                )     )   ) ) ; -------------------------------------------------------------------------------------------- ; (defun LayOnOff (Lay / e d)   (if     (setq e (tblobjname "LAYER" Lay))     (progn       (setq d (entget e))       (setq d         (subst           (cons 62             (* -1 (cdr (assoc 62 d)))           )           (assoc 62 d)         d)       )       (entmod d)     )   ) ) ; -------------------------------------------------------------------------------------------- ; (princ) Potrzebne będą:
    1) Załadowany plik CADPL-Pack-v1.lsp (tutaj info: https://kojacek.wordpress.com/2015/11/04/cadpl-pack/)
    2) plik o nazwie warstwy.dat i poniższej strukturze:
    ;;;*name,status,layercolor,layelinetype,layerlineweight *jezdnia (powierzchnia);1;7;Continous;30 *krawężnik (linia);1;1;Continous;30 *plac (powierzchnia);1;147,39,143;%;% *chodnik (powierzchnia);1;147,39,143;%;% *219-linia granicy;1;3;218-500;%;% *211- Nr działki;1;3;%;% *238-Punkt adresowy budynku;1;7;%;% *238-Punkt adresowy;1;7;%;% *994-Nazwa ulicy;1;27;%;30 Działa to wszystko tak: 
    - wywołujemy polecenie MOD_WAR (trzeba załadowac wczesniej kod i Pack-a)
    - jezeli zostanie znaleziony plik tekstowy warswtwy,dat, to dla danych z kazdej linii wykonywane sa zmiany dla warstw.
    Skladnia pliku jest prosta:
    - brane sa pod uwage tylko linie rozpoczynajace sie od * (gwiazdki)
    - po niej nastepuje nazwa warstwy,
    - separatorami sa znaki "srednika" ;
    - po warstwie wystepuja koleno dane: stan warstwy (jezeli jest to 0 warstwa jest ukrywana) dopuszczalne wartosci to 0 i 1
    - potem jest kolor warstwy - liczba (od 1 do 255) lub RGB formatu rrr,ggg,bbb (separatorem jest przecinek)
    - po kolejnym sredniku jest nazwa rodzaju linii, jezeli zostanie znaleziony w rysunku zostanie przypisany do warstwy
    - na koncu jest szerokosc linii. Tylko dopuszczalne szerokosci, (zobacz: https://kojacek.wordpress.com/2015/11/26/szerokosc-linii/)
    ogólnie dla wartosci dla których nic nie zmieniamy wstawiamy znak procent (%). program kontroluje poprawnosc dla czesci danych, wtedy je pomija. 
    Plik dat trzeba sobie rozbudowac o kolejne wpisy,
     
  7. Upvote
    kojacek otrzymał(a) reputację od Marek-M w Lisp - zlecenie napisania programu   
    Z mojej strony takie coś:
    ; -------------------------------------------------------------------------------------------- ; ; by kojacek 2022 ; -------------------------------------------------------------------------------------------- ; (defun C:MOD_WAR (/ d)   (if     (setq d (cd:SYS_ReadFile nil (findfile "warstwy.dat")))     (if       (setq d         (vl-remove-if '(lambda (%)(/= (substr % 1 1) "*")) d)       )       (progn         (cd:SYS_UndoBegin)         (foreach % d (LayChProp %))         (cd:SYS_UndoEnd)       )     )   )   (princ) ) ; -------------------------------------------------------------------------------------------- ; (defun LayChProp (Data / d s c v p g x y cl :color :tcolor :lweight)   (defun :lweight (/ %1 %2 %3)     (vl-remove-if 'minusp       (if         (setq %1           (vl-sort             (vl-remove-if-not              '(lambda (%2)(wcmatch %2 "ACLNWT*"))               (atoms-family 1)             )'<           )         )         (mapcar           '(lambda (%3) (eval (read %3))) %1         )       )     )   )   (defun :tcolor ()     (vla-getinterfaceobject       (vlax-get-acad-object)       (strcat         "AutoCAD.AcCmColor."         (substr (getvar "ACADVER") 1 2)       )     )   )   (defun :color (i m / r)     (if       (<= (strlen i) 3)       (progn         (setq r (abs (atoi i)))         (if m           (if (and (>= r 0)(<= r 256)) r)           (if (and (>= r 1)(<= r 255)) r)         )       )       (progn         (setq r (cd:STR_Parse i "," t))         (if           (and (listp r)(= 3 (length r)))           (mapcar 'atoi r)         )       )     )   )   (setq d (cd:STR_Parse Data ";" t)         l (substr (car d) 2)   )   (if     (= 5 (length d))     (if       (tblobjname "LAYER" l)       (progn         (setq s (cadr d)                                        ; lay-on-off               v (vlax-ename->vla-object (tblobjname "LAYER" l)) ; lay-vlaxobj               c (:color (caddr d) nil)                          ; lay-color               p (cadddr d)                                      ; lay-ltype               g (atoi (car (cddddr d)))                         ; lay-lwght               x (ssget "_x"                   (list                     (cons 8 l)                     (cons 410 (getvar "CTAB"))                   )                 )         )         (if           (member s '("0" "1"))           (if (zerop (read s))             (LayOnOff l)           )         )         (if c           (if             (= (type c) 'INT)             (vla-put-Color v c)             (progn               (setq cl (:tcolor))               (vla-SetRGB cl (car c)(cadr c)(caddr c))               (vla-put-TrueColor v cl)             )           )         )         (if           (tblobjname "LTYPE" p)           (vla-put-Linetype v p)         )         (if           (and g (member g (:lweight)))           (vla-put-LineWeight v g)         )         (if x           (progn             (setq x (cd:SSX_Convert x 1))             (foreach % x               (vla-put-Color % 256)               (vla-put-LineType % "ByLayer")                (vla-put-LineWeight % -1)             )                  )         )                )     )   ) ) ; -------------------------------------------------------------------------------------------- ; (defun LayOnOff (Lay / e d)   (if     (setq e (tblobjname "LAYER" Lay))     (progn       (setq d (entget e))       (setq d         (subst           (cons 62             (* -1 (cdr (assoc 62 d)))           )           (assoc 62 d)         d)       )       (entmod d)     )   ) ) ; -------------------------------------------------------------------------------------------- ; (princ) Potrzebne będą:
    1) Załadowany plik CADPL-Pack-v1.lsp (tutaj info: https://kojacek.wordpress.com/2015/11/04/cadpl-pack/)
    2) plik o nazwie warstwy.dat i poniższej strukturze:
    ;;;*name,status,layercolor,layelinetype,layerlineweight *jezdnia (powierzchnia);1;7;Continous;30 *krawężnik (linia);1;1;Continous;30 *plac (powierzchnia);1;147,39,143;%;% *chodnik (powierzchnia);1;147,39,143;%;% *219-linia granicy;1;3;218-500;%;% *211- Nr działki;1;3;%;% *238-Punkt adresowy budynku;1;7;%;% *238-Punkt adresowy;1;7;%;% *994-Nazwa ulicy;1;27;%;30 Działa to wszystko tak: 
    - wywołujemy polecenie MOD_WAR (trzeba załadowac wczesniej kod i Pack-a)
    - jezeli zostanie znaleziony plik tekstowy warswtwy,dat, to dla danych z kazdej linii wykonywane sa zmiany dla warstw.
    Skladnia pliku jest prosta:
    - brane sa pod uwage tylko linie rozpoczynajace sie od * (gwiazdki)
    - po niej nastepuje nazwa warstwy,
    - separatorami sa znaki "srednika" ;
    - po warstwie wystepuja koleno dane: stan warstwy (jezeli jest to 0 warstwa jest ukrywana) dopuszczalne wartosci to 0 i 1
    - potem jest kolor warstwy - liczba (od 1 do 255) lub RGB formatu rrr,ggg,bbb (separatorem jest przecinek)
    - po kolejnym sredniku jest nazwa rodzaju linii, jezeli zostanie znaleziony w rysunku zostanie przypisany do warstwy
    - na koncu jest szerokosc linii. Tylko dopuszczalne szerokosci, (zobacz: https://kojacek.wordpress.com/2015/11/26/szerokosc-linii/)
    ogólnie dla wartosci dla których nic nie zmieniamy wstawiamy znak procent (%). program kontroluje poprawnosc dla czesci danych, wtedy je pomija. 
    Plik dat trzeba sobie rozbudowac o kolejne wpisy,
     
  8. Upvote
    kojacek otrzymał(a) reputację od swazy w [AutoLisp] Zmiana widoczności warstwy.   
    Byłoby dziwne gdyby wpółpracował. Lista z tblsearch nie jest poprawną listą dla entmod. Użyj tu formy entget + tblobjname. Zobacz:
    (setq e (tblobjname "layer" "zbrojenie_linie" )) (setq d (entget e)) (entmod (subst (cons 62 -8)(assoc 62 d) d)) a to prowadzić może do bardziej ogólnej funkcji:
    (defun LayOnOff (Lay / e d)   (if     (setq e (tblobjname "LAYER" Lay))     (progn       (setq d (entget e))       (setq d         (subst           (cons 62             (* -1 (cdr (assoc 62 d)))           )           (assoc 62 d)         d)       )       (entmod d)     )   ) ) Funkcja steruje widocznością warstwy podanej jako jej argument tak jak przełącznik, wywołaj kolejno:
    (LayOnOff "zbrojenie_linie")  
  9. Upvote
    kojacek otrzymał(a) reputację od dmatusz3 w Obrót widoku na rzutni   
    PPR (Przekręć Pan Rzutnię) 😉
  10. Upvote
    kojacek otrzymał(a) reputację od dmatusz3 w lisp, generowanie kierunków/grotów strzałek na zadanej polilinii   
    Zadanie z tych banalnych raczej... Można rozwiązać tak:
    ; ---------------------------------------------------------------------------- ; (defun c:testuj ()(InsBlkInPolySeg (car (entsel)) "arrow1" 20.0 15.0)(princ)) ; ---------------------------------------------------------------------------- ; ; funkcja zwraca liste segmentow LWPOLY typu: ((p1 bulge1 p2)(p2 bulge2 p3)...); ; ---------------------------------------------------------------------------- ; (defun jk:LWP_GetSegments (e / p d r)   (setq d (entget e)         p (if              (= 1 (logand (cdr (assoc 70 d)) 1))              (cdr (assoc 10 d))            )         d (mapcar 'cdr             (vl-remove-if-not               '(lambda (%)(member (car %) '(10 42)))               d             )           )   )   (if p     (setq d (append d (list p)))   )   (while     (> (length d) 2)     (setq r (cons                 (list                   (car d)                   (cadr d)                   (caddr d)                 ) r               )           d (cddr d)     )   )   (reverse r) ) ; ---------------------------------------------------------------------------- ; (defun InsBlkInPolySeg (Poly Block Scale MinLength / d b n a p)   (if     (not (tblobjname "BLOCK" Block))     (princ       (strcat         "\nBłąd: w rysunku nie ma bloku "         (strcase Block) "."       )     )     (if       (not         (setq d (jk:LWP_GetSegments Poly))       )       (princ "\nBłąd - niepoprawna Polilinia.")       (if         (not           (setq d             (vl-remove-if-not '(lambda (%)(zerop (cadr %))) d)           )         )         (princ "\nBłąd - polilinia składa sie z samych łuków.")         (if           (not             (setq d               (vl-remove-if                 '(lambda (%)                    (< (distance (car %)(caddr %)) MinLength)                 ) d               )             )           )           (princ "\nBłąd - segmenty polilinii są za krótkie.")           (progn             (cd:SYS_UndoBegin)             (foreach % d               (setq a (angle (car %)(caddr %))                     p (polar (car %) a (/ (distance (car %)(caddr %)) 2.0))               )               (cd:BLK_InsertBlock p Block (list Scale Scale Scale) a nil)             )             (cd:SYS_UndoEnd)           )         )       )     )   ) ) ; ---------------------------------------------------------------------------- ; Polecenie TESTUJ, wywołuje funkcję InsBlkInPolySeg, dla której jednak kluczem jest funkcja jk:LWP_GetSegments. Dla całości trzeba CADPL-Pack-a który opisywałem kiedyś tutaj: https://kojacek.wordpress.com/2015/11/04/cadpl-pack/ . W uproszczeniu - groty strzałek w postaci bloku (argument Block) wstawiane są na liniowych segmentach wskazanej polilinii (argument Block - tutaj trzeba wstawić jeszcze jakieś testowanie wyboru), których długość jest większa niż argument MinLength.

  11. Upvote
    kojacek otrzymał(a) reputację od alf w lisp, generowanie kierunków/grotów strzałek na zadanej polilinii   
    😉 takie coś można wydziobać albo wydrapać... blok dynamiczny sterowany dynamicznie z okna dialogowego:
  12. Like
    kojacek otrzymał(a) reputację od alf w lisp, generowanie kierunków/grotów strzałek na zadanej polilinii   
    Zadanie z tych banalnych raczej... Można rozwiązać tak:
    ; ---------------------------------------------------------------------------- ; (defun c:testuj ()(InsBlkInPolySeg (car (entsel)) "arrow1" 20.0 15.0)(princ)) ; ---------------------------------------------------------------------------- ; ; funkcja zwraca liste segmentow LWPOLY typu: ((p1 bulge1 p2)(p2 bulge2 p3)...); ; ---------------------------------------------------------------------------- ; (defun jk:LWP_GetSegments (e / p d r)   (setq d (entget e)         p (if              (= 1 (logand (cdr (assoc 70 d)) 1))              (cdr (assoc 10 d))            )         d (mapcar 'cdr             (vl-remove-if-not               '(lambda (%)(member (car %) '(10 42)))               d             )           )   )   (if p     (setq d (append d (list p)))   )   (while     (> (length d) 2)     (setq r (cons                 (list                   (car d)                   (cadr d)                   (caddr d)                 ) r               )           d (cddr d)     )   )   (reverse r) ) ; ---------------------------------------------------------------------------- ; (defun InsBlkInPolySeg (Poly Block Scale MinLength / d b n a p)   (if     (not (tblobjname "BLOCK" Block))     (princ       (strcat         "\nBłąd: w rysunku nie ma bloku "         (strcase Block) "."       )     )     (if       (not         (setq d (jk:LWP_GetSegments Poly))       )       (princ "\nBłąd - niepoprawna Polilinia.")       (if         (not           (setq d             (vl-remove-if-not '(lambda (%)(zerop (cadr %))) d)           )         )         (princ "\nBłąd - polilinia składa sie z samych łuków.")         (if           (not             (setq d               (vl-remove-if                 '(lambda (%)                    (< (distance (car %)(caddr %)) MinLength)                 ) d               )             )           )           (princ "\nBłąd - segmenty polilinii są za krótkie.")           (progn             (cd:SYS_UndoBegin)             (foreach % d               (setq a (angle (car %)(caddr %))                     p (polar (car %) a (/ (distance (car %)(caddr %)) 2.0))               )               (cd:BLK_InsertBlock p Block (list Scale Scale Scale) a nil)             )             (cd:SYS_UndoEnd)           )         )       )     )   ) ) ; ---------------------------------------------------------------------------- ; Polecenie TESTUJ, wywołuje funkcję InsBlkInPolySeg, dla której jednak kluczem jest funkcja jk:LWP_GetSegments. Dla całości trzeba CADPL-Pack-a który opisywałem kiedyś tutaj: https://kojacek.wordpress.com/2015/11/04/cadpl-pack/ . W uproszczeniu - groty strzałek w postaci bloku (argument Block) wstawiane są na liniowych segmentach wskazanej polilinii (argument Block - tutaj trzeba wstawić jeszcze jakieś testowanie wyboru), których długość jest większa niż argument MinLength.

  13. Like
    kojacek otrzymał(a) reputację od s1016 w ZWCAD - Bloki dynamiczne i atrybuty   
    LISP-em można sterować parametrami bloku dynamicznego podczas aktywności okna dialogowego. Pozwala to kontrolować wizualnie dokonane zmiany. Tutaj na szybko tylko jeden parametr:

  14. Like
    kojacek otrzymał(a) reputację od kruszynski w [AutoLisp] Zmiana widoczności warstwy.   
    Byłoby dziwne gdyby wpółpracował. Lista z tblsearch nie jest poprawną listą dla entmod. Użyj tu formy entget + tblobjname. Zobacz:
    (setq e (tblobjname "layer" "zbrojenie_linie" )) (setq d (entget e)) (entmod (subst (cons 62 -8)(assoc 62 d) d)) a to prowadzić może do bardziej ogólnej funkcji:
    (defun LayOnOff (Lay / e d)   (if     (setq e (tblobjname "LAYER" Lay))     (progn       (setq d (entget e))       (setq d         (subst           (cons 62             (* -1 (cdr (assoc 62 d)))           )           (assoc 62 d)         d)       )       (entmod d)     )   ) ) Funkcja steruje widocznością warstwy podanej jako jej argument tak jak przełącznik, wywołaj kolejno:
    (LayOnOff "zbrojenie_linie")  
  15. Like
    kojacek otrzymał(a) reputację od perlon w [AutoLisp] Zmiana widoczności warstwy.   
    Byłoby dziwne gdyby wpółpracował. Lista z tblsearch nie jest poprawną listą dla entmod. Użyj tu formy entget + tblobjname. Zobacz:
    (setq e (tblobjname "layer" "zbrojenie_linie" )) (setq d (entget e)) (entmod (subst (cons 62 -8)(assoc 62 d) d)) a to prowadzić może do bardziej ogólnej funkcji:
    (defun LayOnOff (Lay / e d)   (if     (setq e (tblobjname "LAYER" Lay))     (progn       (setq d (entget e))       (setq d         (subst           (cons 62             (* -1 (cdr (assoc 62 d)))           )           (assoc 62 d)         d)       )       (entmod d)     )   ) ) Funkcja steruje widocznością warstwy podanej jako jej argument tak jak przełącznik, wywołaj kolejno:
    (LayOnOff "zbrojenie_linie")  
  16. Upvote
    kojacek otrzymał(a) reputację od Chris w ZWCAD 2020 - ciąg wymiarowy   
    Take?

  17. Upvote
    kojacek otrzymał(a) reputację od kruszynski w [ssget]   
    Ja tam jestem zwolennikiem minimalizmu w kodzie:
    (ssget "_x" '((0 . "hatch")(-4 . "/=")(62 . 1)(-4 . "/=")(62 . 105))) 😉
  18. Upvote
    kojacek otrzymał(a) reputację od Pawcyk w Dokumentacja fotograficzna   
    Skorzystaj z gotowych narzędzi lispowych zwanych CADPL-Pack.
    Poczytaj tutaj: https://kojacek.wordpress.com/2015/11/04/cadpl-pack/ o nim, co to jest i jak używać.
    Potem jest już z górki:
    1) Odczytanie pliku csv: 
    (setq a (cd:SYS_ReadFile nil (findfile "GPS.csv")))
    zwraca listę:
    ("D:\\Smietnik\\IMG_20180218_133113.jpg;51.269562;22.542074;22" "D:\\Smietnik\\IMG_20180218_133117.jpg;51.269562;22.542074;90" "D:\\Smietnik\\IMG_20180218_133144.jpg;51.269562;22.542074;180" "D:\\Smietnik\\IMG_20180221_190038.jpg;51.269558;22.542191;130")
    2) Podział łańcuchów (elementów listy) na osobne listy:
    (setq b (mapcar '(lambda (%)(cd:STR_Parse % ";" T)) a))
    zwraca:
    (("D:\\Smietnik\\IMG_20180218_133113.jpg" "51.269562" "22.542074" "22") ("D:\\Smietnik\\IMG_20180218_133117.jpg" "51.269562" "22.542074" "90") ("D:\\Smietnik\\IMG_20180218_133144.jpg" "51.269562" "22.542074" "180") ("D:\\Smietnik\\IMG_20180221_190038.jpg" "51.269558" "22.542191" "130"))
    3) Utworzenie osobnych list na podstawie indeksu. Na poczatek krótka definicja funkcji do tego celu:
    (defun jk:LST_nth (Lst Idx)   (mapcar '(lambda (%)(nth Idx %)) Lst) )
    Teraz wywołania:
    (setq p (jk:LST_nth b 0))
    zwraca ścieżki:
    ("D:\\Smietnik\\IMG_20180218_133113.jpg" "D:\\Smietnik\\IMG_20180218_133117.jpg" "D:\\Smietnik\\IMG_20180218_133144.jpg" "D:\\Smietnik\\IMG_20180221_190038.jpg")
    potem iksy:
    (setq x (jk:LST_nth b 1))
    następnie igreki:
    (setq y (jk:LST_nth b 2))
    na koniec kąty:
    (setq g (jk:LST_nth b 3))
    oczywiście jeśli potrzeba zmień STR-ingi listy na liczby, tu dla igreków który wygląda tak:
    ("22.542074" "22.542074" "22.542074" "22.542191")
    wywołujesz:
    (mapcar 'read y)
    zwraca:
    (22.5421 22.5421 22.5421 22.5422) Powinno działać - w razie problemów daj znać.
     
  19. Like
    kojacek otrzymał(a) reputację od alf w Szablony i skrypty startowe ZWPack   
    Odnośnie polecenia C:ZZ (ze skryptu), przełączającego FILLMODE, polecam szersze rozwiązania: https://kojacek.wordpress.com/2017/12/30/uproszczone-wyswietlanie-obiektow/ 
  20. Upvote
    kojacek otrzymał(a) reputację od Pawcyk w Zapamiętywanie ostatniej wprowadzonej wartości   
    W mojej subiektywnej opinii, pomysł nieco chybiony. Co będzie gdy w tym samym katalogu będzie więcej plików rysunkowych? Wszystkie będą się odwoływać do tego samego pliku tekstowego? A co jeśli przypadkowo plik zostanie usunięty? Nie wiemy czemu ma to służyć, niemniej widzę chyba lepsze rozwiązania: zapamiętanie danych w rysunku np. Zmienna USERRn (ulotne - niezapamiętywane w sesji), lub jako dane niegraficzne - słownik w namedobjdict, a w nim XRecord (zapamiętane na stałe). Ponadto XData przypięta do jakiegoś obiektu, itp.
  21. Downvote
    kojacek otrzymał(a) reputację od dmatusz3 w Punkt przecięcia podczas przesuwania [rozwiązany]   
    Również działa poprawnie w każdej wersji AutoCAD-a, począwszy od wersji 13, czyli od...1994 roku.
  22. Upvote
    kojacek otrzymał(a) reputację od JasW w Wyświetlanie etykiety z odległością i kątem - rozszerzenie funkcji [Wprowadzono w ZWCAD 2018]   
    To jak rozumiem przejęzyczenie? W AC AutoTrack działa w każdym (predefiniowanym i dowolnie ustalonym) układzie:

    Ponadto mechanizmy śledzenia i wprowadzania dynamicznego, działają wszędzie, a w zależności od sytuacji dostępne są wszelkie możliwe opcje wywoływane tab-em, klawiszami strzałek itd. 
  23. Upvote
    kojacek otrzymał(a) reputację od kruszynski w Tworzenie nowego układu   
    Nie ma problemu. Zainteresuj się CADPL-Pack'iem: http://forum.cad.pl/cadpl-pack-v1-lsp-t78161.html
    Potem, wczytaj go, oraz poniższą funkcję:
    (defun -MakeLayout (Start End Pref / i n l)   (setq i Start         l (layoutlist)   )   (while     (< i End)     (progn       (setq n (strcat Pref (itoa i)))       (if         (not (member n l))         (vla-Add (cd:ACX_Layouts) n)       )       (setq i (1+ i) l (cons n l))     )   ) ) Ma ona trzy argumenty: Start - to liczba całkowita od jakiej zaczyna się licznik, End - to koniec, Pref to łańcuch tekstowy, nazwy układu.
    Wywołujesz ją w ten sposób:
    (-MakeLayout 1 201 "Szkic") i po chwili masz te Layouty...
    kojacek (https://kojacek.wordpress.com)
  24. Downvote
    kojacek otrzymał(a) reputację od dmatusz3 w Rozwój wersji 2017   
    Wielkość i ilość poprawek do ostatniego ZwCAD-a (kroczącego nieustannie gdzieś między wersją alpha i ciągle jeszcze bardzo wczesną beta), pozwala przypuszczać że ów "bieg czasu" będzie bardzo długi. Przy spełnieniu warunku że "odpowiednik" w tym czasie nie będzie zmierzał do przodu...
  25. Upvote
    kojacek otrzymał(a) reputację od gruzin w Przełączanie koloru tła   
    zgrabniej może być tak:
    (setvar "BKGCOLOR" (abs (- 7 (getvar "BKGCOLOR"))))