swazy

[LISP] "Odklejenie" hatch'u od polilinii

Rekomendowane odpowiedzi

Cześć! Wiem, że tytuł nie jest zbyt profesjonalny, ale nie mam pomysłu na lepsze zsyntezowanie  mojego problemu, wszelkie googlowania i kombinacje własne też mi nie pomogły. Zacząłem się bawić w pisanie LISPów do AutoCADa (robię to od bardzo niedawna na bardzo niewysokim poziomie). Mam taki fragment kodu:

(setq SS (ssget "x"
                    '(
                        (-4 . "<OR")
                            (-4 . "<AND")
                                (8 . "K_*ciany *elbetowe")
                                    (-4 . "<OR")
                                        (0 . "POLYLINE")
                                        (0 . "LWPOLYLINE")
                                        (0 . "LINE")
                                    (-4 . "OR>")
                            (-4 . "AND>")
                            
                            (-4 . "<AND")
                                (8 . "K_tarcze")
                                    (-4 . "<OR")
                                        (0 . "POLYLINE")
                                        (0 . "LWPOLYLINE")
                                        (0 . "LINE")
                                    (-4 . "OR>")
                            (-4 . "AND>")                            
                        (-4 . "OR>")
                    )        
));setq

    (command
        "move" SS "" (list 0 0 0) (list 0 -5000 0)
    );command

Idea jest taka, żeby wybrać elementy z wyżej opisanego warunku i przesunąć to o 50m w dół (5 000 jednostek). W praktyce oprócz tych elementów KOPIUJE (nawet nie przesuwa a kopiuje) się hatch znajdujacy się pomiedzy tymi liniami (chociaż nie znajduje się na ww. warstwach). Najśmieszniejsze jest to, że kopiuje się tylko część HATCH'ów  a reszta zachowuje się tak, jak moim zdaniem powinna.

Dlaczego tak się dzieje? Czy da się "rozłączyć" granice kreskowania i te elementy?

Pozdrawiam Mateusz

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Proszę spróbować tak:

(setq SS (ssget "x"
                    '(
                        (-4 . "<OR")
                            (-4 . "<AND")
                                (8 . "K_*ciany *elbetowe")
                                    (-4 . "<OR")
                                        (0 . "POLYLINE")
                                        (0 . "LWPOLYLINE")
                                        (0 . "LINE")
                                    (-4 . "OR>")
                            (-4 . "AND>")
                            
                            (-4 . "<AND")
                                (8 . "K_tarcze")
                                    (-4 . "<OR")
                                        (0 . "POLYLINE")
                                        (0 . "LWPOLYLINE")
                                        (0 . "LINE")
                                    (-4 . "OR>")
                            (-4 . "AND>")                            
                        (-4 . "OR>")
                    )        
	));setq

    ;(command
    ;    "move" SS "" (list 0 0 0) (list 0 -5000 0)
    ;);command 
	(setq ileelementow ( sslength SS ) )
	(setq i 0 )
	(repeat ileelementow
		( vlax-invoke-method ( vlax-ename->vla-object ( ssname SS i ) ) 'Move ( vlax-3d-point ( list 0 0 0 ) ) ( vlax-3d-point ( list 0 -5000 0 ) ) )
		( setq i ( 1+ i ) )
	)

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Nie rozumiem "vlax'ów". Jadę póki co na "AutoLISP. Praktyczny kurs" Marka Dudka a tam vlax'y nie występują :)  Poradziłem sobie rozbijając polilinie i robiąc ponownie zbiór.

W każdym razie dziękuję bardzo za pomoc!

 

P.S. A jakie jest najbardziej ortodoksyjnie łopatologiczne opracowanie, żeby ogarnąć Visual Auto Lips?

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Kreskowanie ma możliwość zespolenia z polilinią tworzącą obwiednie. Jeżeli przesunę jeden wierzchołek takiej polilini to kreskowanie automatycznie dostosuje się do nowej obwiedni. 
Skojarzyło mi się to z opisywanym problemem.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się