RobS

Użytkownik forum
  • Postów

    105
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    18

Treść opublikowana przez RobS

  1. Kolejny skrypt, "delikatne" rozwinięcie poprzedniego programu. Tym razem rysowanie okręgów w środku każdego segmentu polilinii. Średnica okręgu to 1/10 długości danego segmentu. Kod i nagranie działania poniżej (defun C:CIRCATMID (/ poly polyName polyAtt polyLen segLen circCenDist circCord circDia vertexLst pp pt) (setq poly (entsel "\nWskaz polilinie: ") ;Wybór polilinii polyName (car poly) ;Identyfikator polilinii polyAtt (entget (car poly)) ;Zapisanie atrybutów w zmiennej polyprop polyLen (vla-get-length (vlax-ename->vla-object polyName)) ;Pomiar długości polilinii ) (foreach pp polyAtt (if (= (car pp) 10) ;Warunek sprawdza czy atrybut zawiera współrzędne (zaczyna się od kodu 10) (setq vertexLst (cons (cdr pp) vertexLst)) ;Dodawanie współrzędnych do listy vertexLst ) ) (foreach pt vertexLst (setq segLen (- polyLen (vlax-curve-getDistAtPoint polyName pt)) ;Obliczanie długości segmentów polilinii circCenDist (+ (vlax-curve-getDistAtPoint polyName pt) (/ segLen 2.0)) ;Dystans do środka okręgu polyLen (vlax-curve-getDistAtPoint polyName pt) ;Nadpisanie długości do obliczenia kolejnego segmentu circCord (vlax-curve-getPointAtDist polyName circCenDist) ;Współrzędne środka segmentu polilinii circDia (/ segLen 10.0) ;Obliczenie średnicy okręgu ) (if (> circDia 0) ;Warunek sprawdza czy średnica jest większa od 0 w przypadku polilinii otwartych (command "_.CIRCLE" circCord "_D" circDia) ;Rysowanie okręgu ) ) )
  2. Cześć, Chciałem się pochwalić swoim programem w języku LISP. Zadaniem programu jest automatyczne wstawienie trójkątów o określonym przez siebie rozmiarze w każdy wierzchołek dowolnej polilinii. (defun C:TRIATVERTEX () (setq trirad (getstring "Okresl wielkosc trojkatow w wierzcholkach: ") ;Podanie średnicy okregu na którym bedą opisane trójkąty vertexlst nil ;Czyszczenie listy współrzędnych poly (entget (car (entsel "\nWskaz polilinie: "))) ;Wybór polilinii i zapisanie jej atrybutów w zmiennej poly ) (foreach pp poly (if (= (car pp) 10) ;Sprawdzenie czy atrybut zawiera współrzędne (zaczyna się od kodu 10) (setq vertexlst (cons (cdr pp) vertexlst)) ;Dodawanie współrzędnych do listy vertexlst ) ) ;Pętla która tworzy listę współrzędnych wierzchołków (foreach pt vertexlst (command "_.POLYGON" "3" pt "O" trirad) ) ;Pętla wstawiania trójkąty we wszystkich wierzchołkach polilinii ) Nie pisałem nic wcześniej w tym języku, ale myślę że jest całkiem schludnie. Wiedzę czerpałem z książki "AutoLISP czyli programowanie AutoCADa" wydawnictwa HELION, polecam nie tylko początkującym.