swazy

Użytkownik forum
  • Postów

    33
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    1

Treść opublikowana przez swazy

  1. Łał, mega... Dziękuję Chyba rzeczywiście pora się przesiąść z trabanta na coś nowszego... A czy możecie polecić jakieś materiały, które wprowadzają w v-lisp'a i ActivX'a ? Oczywiście znam LeeMac'a i wordpress'a Kojacka +to forum, ale czy są jakieś opracowania z listą wszystkich dostępnych komend. LISP'a nauczyłem się z prehistorycznej książki zassanej z odmętów chomika i mówiąc szczerze to najbardziej mi odpowiada taka forma nauki. Pomoc ZWCAD-owa też jest mega pożyteczna, ale tam już trzeba wiedzieć, czego się szuka.
  2. Cześć! Popełniłem taką oto komendę, która ma na celu odmrożenie wszystkich warstw pasujących do danego klucza. I o ile w ZWCAD 2021 (i 2024) działa tak jak się tego spodziewałem, o tyle w AC 2022 już nie. To znaczy w memu warstw, warstwy na których mi zależy w kolumnie freeze zmieniają symbol na "odmrożony", ale w programie te warstwy fizycznie nie wyświetlają się. (defun C:ODMROZENIE_WARSTW ( / POM jeszcze LAY qqq ) (setq POM (tblnext "layer" T )) (setq jeszcze T ) (while jeszcze (setq LAY (cdr (assoc 2 POM ))) (if (and (wcmatch (substr LAY 1 17 ) (strcat "@@####@#########@#" )) ;tutaj jakiś klucz nazewnictwa warstw );and (progn (setq qqq (entget (tblobjname "layer" LAY ))) (if (= 1 (cdr (assoc 70 qqq ))) (progn (setq qqq (subst (cons 70 0 )(assoc 70 qqq ) qqq)) (entmod qqq) );progn );if (if (= 49 (cdr (assoc 70 qqq ))) (progn (setq qqq (subst (cons 70 48 )(assoc 70 qqq ) qqq)) (entmod qqq) );progn );if );progn );if (setq POM (tblnext "layer" )) (if (= POM nil ) (setq jeszcze nil )) );while (princ) );defun Macie pomysł co można z tym zrobić? "regen" nie działa, "redrawall" też nie. Ale już po zapisaniu, wyjściu i wczytaniu pliku wyświetla się to tak jak powinno. Również po włączeniu "layon" odmrożone warstwy się wyświetlają poprawnie, no ale siłą rzeczy włączają się warstwy, które chciałbym mieć "off". I kolejne pytanie: czy jest gdzieś sporządzona lista wszystkich komend visual lispa analogicznie jak to jest w naszym cad-packu? Bo może dałoby się odmrozić skutecznie te warstwy visualowo (?) (szczerze mówiąc wolę klasycznego lispa bo jest ładniejszy 😄 ).
  3. Dzień dobry, Chciałbym wyklikać Lisp'a który po wskazaniu bloku w cadzie definiowałby nowy blok złożony z identycznych elementów i podanej przeze mnie nowej nazwie. Jestem zapoznany z wpisem: https://kojacek.wordpress.com/2017/11/22/programowe-tworzenie-bloku/ , CadPack-owym "cd:BLK_GetEntity" da się wyciągnąć elementy tworzące blok, tylko nie za bardzo wiem jak połączyć te kropki. Albo może za bardzo kombinuję i da się skopiować całą pozycję bloku w tabeli bloków i zmienić temu nazwę (?) Mam nadzieję, że klarownie opisałem mój problem. Rozwiązaniem nielispowym jest "save block as" w edytorze bloku. Będę dźwięczny za naprowadzenie
  4. Faktycznie, nie jest to skomplikowane. Spodziewałem się, że gdzieś siedzi definicja zbioru który jest obiektem/ami źródłowym szyku. A idąc za ciosem to czy (a znając Was to raczej "gdzie" ) da się modyfikować liczbę elementów/kolumn/wierszy i ich rozstaw w szyku?
  5. Rzeczywiście działa 🤩 Dziękuję! A w jaki sposób ( o ile to jest możliwe ) mogę dostać się do elementu źródłowego szyku coby go edytować? I drugie pytanie: czy to narzędzie poniżej jest tylko dla magów, czy też może zostało udostępnione śmiertelnikom? ;)
  6. Przy pomocy: (getpropertyvalue blkEnt "AcDbDynBlockPropertyA1 X") ...udało mi się wyciągnąć współrzędne, które mnie interesują, ale ogrom niewiedzy pozostał... (dumpallproperties blkEnt) Co to właściwie jest i czy da się to w jakiś w miarę łopatologiczny sposób wyjaśnić laikowi co się tutaj wydarza?
  7. Wiem, tylko że nie mogę tego udostępnić bo to element sytemu, prawa autorskie, bla, bla, bla.... https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/get-list-of-parameters-being-used-in-block-without-vla-vlax/m-p/8461420#M378276 Wykopałem z czeluści internetów taki post - chodzi mi praktycznie o to samo co w przytoczonym trójkącie. Tylko z tego co rozumiem AutoCad ma (albo miał) wbudowaną funkcję getpropertyvalue. Sprawdzę to jutro (zaraz) w pracy. Czy ZWCAD ma coś analogicznego, albo czy da się takowe wydziobać?
  8. Czy brak reakcji na pytanie oznacza, że w internecie było to wałkowane miliard razy i powinienem sobie to znaleźć (oczywiście próbowałem)?
  9. Dziękuję za odpowiedź. Muszę się z tym przespać i pewnie będę męczył pytaniami dalej A póki co to mam jeszcze jedno pytanie z kolejnej beczki. Jak mogę się dostać do tych danych? To jest point parameter, ale nie ma jego wartości w atrybutach, cd:BLK_GetEntity też tego nie pokazuje. Dodam jeszcze, że to nie jest blok dynamiczny (wg cd:BLK_IsDynamicInsert ).
  10. Dobry wieczór, Mam pytanie programistyczne odnośnie szyków. Gdzie i w jaki sposób zapisane są dane poszczególnych elementów szyku? Czy da się uzyskać dane położenia poszczególnych jego elementów? Czy możliwa jest edycja zakresu szyku, liczby elementów czy rozstawu poprzez Lisp'a? I drugie pytanie z innej beczki: czy możliwe jest zaprogramowanie własnych osnapów? Przykładowo chciałbym uzyskać endpoint i middlepoint, ale tylko dla obiektów ze wskazanej warstwy.
  11. A co dokładnie jest problemem? Wstawienie bloku? Zmiana atrybutu? Odczytanie pikietażu? Jest to jak najbardziej do zrobienia Lisp-em.
  12. Dziękuję za odpowiedź. Moją ideą było przeszukanie "m" razy (gdzie m to długość mojej listy) zbiór wszystkich bloków w rysunku i pisałem to pod jeden konkretny blok, dlatego brak filtrów na wejściu. Teraz widzę, że "(1+ m)" i (1+ n ) są w złych miejscach no i mam oczywiście świadomość, że działanie programu jest mało finezyjne....ale tak jakoś nauczyłem się kiedyś AutoLispa a Visual wydaje mi się mniej czytelny no i nie ma o tym książek (chyba 😄 ).
  13. Pozwolę sobie pociągnąć wątek dalej. Dlaczego nie chce mi działać coś takiego i gdzie tu jest błąd? (defun C:HL ( / ) (setq LISTA (cdr (cd:BLK_GetDynBlockNames "<nazwa mojego bloku>" ))) (setq BLOKI (ssget "x" '(( 0 . "INSERT" )))) (setq WYB nil ) (setq n 0 ) (repeat (length LISTA ) (setq m 0 ) ;(setq jeszcze T ) (repeat (sslength BLOKI ) (setq POM (ssname BLOKI m )) (if (= (cdr (assoc 2 (entget POM ))) (nth n LISTA )) (progn (if WYB (progn (setq WYB (ssadd (cdr (assoc -1 (entget POM ))) WYB )) );progn (progn (setq WYB (ssadd (cdr (assoc -1 (entget POM ))))) );progn );if (setq jeszcze nil ) (setq n (1+ n )) );progn );if ;(if (= m (- (sslength BLOKI) 1 ))(setq jeszcze nil )) (setq m (1+ m )) );repeat );repeat (command "hideobjects" WYB "" ) (princ (strcat "\n...ukrylem < " (rtos (sslength WYB ) 2 0 ) " > blok/i/ow..." )) (princ) );defun Kod działa częściowo, bo listę bloków anonimowych tworzy tak jak bym tego chciał, ale dalsza część wyłapuje i ukrywa tylko część z bloków z listy... Na przykład *U286 nie ukrywa.
  14. Ale czad! 🤩 Dziękuję! Na ZW-Cadzie 2024 działa bez zarzutów. A z ciekawości: czy da się to zrobić klasycznym AutoLispem ?
  15. Dobry wieczór, Mam problem z programistycznym okiełznaniem bloków dynamicznych - chodzi o blok belki prefabrykowanej występujący w kilku określonych długościach. Belka przedstawiona jest za pomocą bloku dynamicznego, który ma zdefiniowany kilka Visibility z Linear Parameter. Czy mogę prosić o nakierowanie w jaki sposób mogę się dowiedzieć, która długość belki jest aktualnie wybrana na rysunku? Obstawiam, że to siedzi gdzieś w słownikach. "(102 . {ACAD_XDICTIONARY) (360 . <ENTITY NAME: 2ba9f768>) (102 . })", Próbowałem googlować, ale nie za bardzo potrafię się połapać o co w tej technologyi chodzi... (niestety nie mam zgody na upublicznienie pliku z blokiem, więc muszę tak lakonicznie i opisowo) Będę dźwięczny za pomoc :)
  16. Cześć! Coś czuję że zadaję głupie pytanie, ale mój mały rozumek uważa że to powinno działać ale niestety nie działa. Dlaczego? 🧐 (setq qqq (entget (car (entsel )))) (setq qqq (subst (cons 50 0.25 )(assoc 50 qqq) qqq )) (setq entmod qqq )
  17. Dzięki wielkie! Brzmi jak weekend z Lispem bo zajeżdża mi to czarną magią 😛
  18. Chyba jestem cieńszy w uszach niż myślałem... 😞 (defun C:MODYFIKACJA_WARSTW ( / POM n ENT_POM BASE ) (setvar "cmdecho" 0 ) (setq BASE (list ;W tym miejscu uzupełniasz sobie listę interesujących Cię wartstw wg podanego klucza ;NAZWA WARSTWY || 1=widoczny / -1=wygaszony || KOLOR || STYL LINII '( "209-Opis konturu klasyfikacyjnego" 1 55 "sm05_500") '( "238-Punkt adresowy budynku" 1 161 "sm05_500") '( "219-Linia granicy" 1 1 "sm05_500") ));setq (foreach EL BASE (if (/= nil (tblobjname "layer" (nth 0 EL ))) (progn (setq POM (tblobjname "layer" (nth 0 EL))) (setq ENT_POM (entget POM )) (setq ENT_POM (subst (cons 62 (* (nth 1 EL )(nth 2 EL )))(assoc 62 ENT_POM ) ENT_POM )) (setq ENT_POM (subst (cons 6 (nth 3 EL ))(assoc 6 ENT_POM ) ENT_POM )) (entmod ENT_POM ) );progn (progn (princ (strcat "\n...barak warstwy: <<<" (nth 0 EL ) ">>> na rysunku...")) );progn );if );foreach (princ "\n<<< warstwy zmodyfikowane! >>>") (princ) );defun (defun C:MODYFIKACJA_OBIEKTOW ( / KOLOR WYSOKOSC WYB POM ENT_POM n ) (setvar "cmdecho" 0 ) (setq KOLOR 12 ;<<<<<<<<<<<<<<< TUTAJ WPISUJESZ NR KOLORU WYSOKOSC 2.40 ;<<<<<<<<<<<<<<< TUTAJ WPISUJESZ WYSOKOSC TEXTU );setq (setq WYB (ssget "x" '((-4 . "<AND")(0 . "TEXT")(8 . "211-Nr dzia*ki")(-4 . "AND>")))) ;<<<<<<< TUTAJ W NAWIASIE (8 . "xxx") WSTAWIASZ NAZWE WARSTWY (if (/= nil WYB) (progn (setq n 0 ) (repeat (sslength WYB ) (setq POM (ssname WYB n )) (setq ENT_POM (entget POM)) (setq ENT_POM (subst (cons 40 WYSOKOSC )(assoc 40 ENT_POM ) ENT_POM )) (if (assoc 62 ENT_POM) (progn (setq ENT_POM (subst (cons 62 KOLOR )(assoc 62 ENT_POM ) ENT_POM )) );progn (progn (setq ENT_POM (append '(cons 62 KOLOR ) ENT_POM )) );progn );if (entmod ENT_POM ) (setq n (1+ n )) );repeat (princ "\n<<< obiekty zmodyfikowane! >>>") );progn (progn (alert "\n<<< nie znalazłem tekstow o podanych kryteriach! >>>") );progn );if (princ) );defun Popełniłem coś takiego - proszę o krytykę tutejszych Gooru. Działa, ale nie sądzę że jest to najwyżej punktowana odpowiedź i trzeba by się było nad tym jeszcze chwilę popastwić. a) nie potrafię sobie poradzić z polskimi znakami w nazwach warstw b) nie wiem jak się zmienia kolory "truecolor")
  19. Piszesz o rzeczach podstawowych i niezbędnych jak prawo do edukacji na karcie praw człowieka 😄 Spróbuję zaraz coś pomocnego wyprodukować.
  20. Już bardziej, ale tak o poziom bezpieczniej 😛 Myślałem o czymś w stylu PIN-u (no bo zrobienie czegoś w stylu (if (not PIN)(exit)) , ale taki kod można udostępnić tak samo łatwo jak i sam skompilowany plik. Zastanawiam się jak swoje kody zabezpieczają ludzie, którzy odpłatnie zajmują się pisaniem skryptów do środowiska CAD. Czy też może jest to zbyt prymitywne środowisko i nikomu się nie chce bawić w takowe biznesy???
  21. Polecenie "compile" wiem, znam i używam, tylko nie do końca mi o to chodziło No bo ten plik *.zel owszem, ukrywa kod, ale zaszyfrowany plik może uruchomić każdy kto wejdzie w jego posiadanie. A moją intencją jest zachowanie efektów mojej pracy i udostępnienie jej tylko wybranym przeze mnie osobom (a przez to zachowanie konkurencyjności tego, co napisałem). Kiedyś bawiłem się zmienną "CDATE" żeby dezaktywować działanie programów po jakimś czasie nawet jeśliby "wyciekły" ale takie rozwiązanie wydaje mi się bardzo chałupnicze no i cofnięcie zegara systemowego załatwia sprawę. Podejrzewam że da się to zrobić w sposób bardziej profesjonalny...
  22. Dobry wieczór, Przychodzę z serią pytań a główne z nich brzmi "Czy da się zabezpieczyć Lisp'a żeby ten nie rozlazł się po świecie?" Moja historia jest taka: już dobrych kilka lat temu usłyszałem o czymś takim jak Lisp a że to co się usłyszało to już się nie odsłyszy to konsekwencją tego było nadziubanie pierwszej pary nawiasów, które do dziś dzień rozmnożyły się niczym swego czasu króliki w Australii... I tak oto zacząłem pisać dla siebie narzędzia, którymi potem zainfekowałem swoje Biuro. W tym momencie jestem na etapie zmieniania pracy, ale jednocześnie chciałbym zostawić moje Lispy bo zrobiło się już z tego środowisko pracy a moje biuro to fajne biuro i nie chcę go upośledzać. Jednocześnie chciałbym, żeby to co napisałem nie zostało rozprzestrzenione na konkurencyjne firmy (wiadomo - co raz w internecie na zawsze w internecie). Czy da się temu w jakiś sposób zaradzić? (mam nadzieję że moje pytanie i poruszana kwestia jest moralnie poprawna - jeśli nie to usunę posta). Pozdrawiam Mateusz
  23. Dawno mnie tu nie było i nie podziękowałem... Dziękuję więc! Kupa wiedzy na tym forum mieszka zaprawdę...
  24. Dobry wieczór, Mam takie szybkie pytanko. Myślę, że sprawa jest banalna, ale nie mogę tego nigdzie znaleźć. No więc: jaką komendą da się zmienić widoczność danej warstwy w tablicy? (setq LAY (tblsearch "layer" "zbrojenie_linie" )) (setq LAY (subst (cons 62 -8 )(assoc 62 LAY) LAY)) (entmod LAY ) Chciałem w ten sposób, ale program [ZW-Cad 2020] nie współpracuje. Pozdrawiam 😉
  25. Do ZW-Soft....grubo Dziękuję za odpowiedź. A możliwe, że ZW-Soft coś z tym zrobi, czy to taka bardziej sugestia do przyszłych wersji? No i mam pytanie czy da się napisać to od nowa, od innej strony i w inny sposób?