-
Postów
236 -
Dołączył
-
Ostatnia wizyta
-
Wygrane w rankingu
26
Aktywność reputacji
-
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ą.
-
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ą.
-
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.
-
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.
-
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)):
-
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,
-
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,
-
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")
-
-
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.
-
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:
-
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.
-
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:
-
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")
-
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")
-
-
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))) 😉
-
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ć.
-
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/
-
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.
-
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.
-
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.
-
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)
-
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...
-
kojacek otrzymał(a) reputację od gruzin w Przełączanie koloru tła
zgrabniej może być tak:
(setvar "BKGCOLOR" (abs (- 7 (getvar "BKGCOLOR"))))