Recommended Posts

Posted

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

Posted

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

 

  • 4 weeks later...
Posted

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?

Posted

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.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...