swazy

Użytkownik forum
  • Postów

    28
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    1

Odpowiedzi opublikowane przez swazy

  1. W dniu 15.04.2024 o 06:18, kojacek napisał:

    Pewnie inaczej sprawy by się miały, gdyby został udostępniony plik dwg

    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ć?

     

  2. 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.

  3. 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 😄 ).
     

  4. 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.
     

    obraz.png

  5. 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 :)

     

  6. 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")

     

  7. 31 minut temu, dmatusz3 napisał:

    Aha, czyli jest potrzebne coś na kształt aktywacji programu kodem?

    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???

  8. 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...
     

  9. 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
     

  10. 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 😉

     

     

  11. Cześć! :)

    Mam problem z pewnym lispem do tworzenia Viewportów.

    Założenie jest takie, że podaję skalę Viewportu, wskazuję w przestrzeni modelu jego zakres (definiuje się nowy  "View") i w efekcie w przestrzeni papieru powstaje mi viewport w odpowiedniej skali i w odpowiedniej wielkości. Niestety o ile już dosyć sprawnie poruszam się w nawiasowym świecie LISPa, to VLISP jest dla mnie czarną (a przynajmniej bardzo ciemną) magią. Z tego co rozumiem komenda "setview" przypisuje ostatnio utworzonemu viewport'owi view. 

       (setq vportID (cdr (assoc 69 (entget (entlast)))))
       (setview (tblsearch "VIEW" "THEVIEW") vportID)

    ....i o ile dla AutoCada 2012 i ZW-Cada 2015+ takie coś działa, o tyle w ZW-Cad'zie 2020 już nie. Będę bardzo dźwięczny za wskazówki i informacje czy da się to jakoś zmodernizować. (Mam załączyć cały kod? ).

    Pozdrawiam Mateusz

  12. Dnia 8.11.2018 o 08:29, kruszynski napisał:

    W ZWCAD 2018, 2019 można szyfrować lispy poleceniem lispowym tak:

    
    (compile-zelx "C:\\Ścieżka\\Plik.lsp" "C:\\Ścieżka\\Plik.zelx") 

     

    Przepraszam za spam, ale chciałem bardzo podziękować za ten post. Właśnie odkryłem Amerykę!!!!! 😍

    Swoją drogą to nie wiem czemu, ale nie natknąłem się jeszcze nigdzie w helpach,  literaturze ani innych Googlach że jest taka opcja.