wedzik

Użytkownik forum
  • Content Count

    21
  • Joined

  • Last visited

  • Days Won

    1

wedzik last won the day on February 9

wedzik had the most liked content!

About wedzik

  • Rank
    Początkujący

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

  1. Zawsze zastanawiałem się dlaczego w niektórych lispach jest taka konstrukcja z kropką ._circle Winne temu jest polecenie UNDEFINE, które potrafi wyłączyć polecenie cada. Jeśli użyjemy wtedy _circle to nie będzie takiego polecenia. Natomiast polecenie z kropką ignoruje UNDEFINE i korzysta z oryginalnych poleceń. Polecenie: _CIRCLE Określ środek okręgu lub [3P/2P/Ssr (sty sty promień)]: *Anuluj* Polecenie: undefine Podaj nazwę polecenia:circle Polecenie: _CIRCLE Nieznane polecenie "_CIRCLE". Naciśnij F1, aby uzyskać pomoc. Polecenie: ._CIRCLE Określ środek okręgu lub [3P/2P/Ssr (
  2. Chyba bardziej czytelnie jest jak przy małych kątach i dużych promieniach linie pomocnicze są równoległe. Przykład z książki - Poradnik Mechanika tom II. Zresztą w Autocadzie też tak jest (a przynajmniej było z tego co pamiętam).
  3. Na VBA się nie znam, na lispie też, ale jak coś ostatnio próbowałem robić to też miałem problem z zaznaczaniem. Obiekty były wybrane ale nie były podświetlone. Może to pomoże?
  4. Dzięki pomocy tutaj zrobiłem lispa do zaznaczania okręgów większych niż wpisany promień. Na początku jest mechanizm zapamiętywania promienia okręgu. Jeśli nie jest ustawiony to przyjmuję 10. (defun c:okregi (/ ile zbior rtemp) (if (= malypromien nil)(setq malypromien 10.0)) (prompt "\Podaj maly promien: <")(princ malypromien)(princ "> ") (initget 4) (setq rtemp (getreal)) (if (= rtemp nil)(setq rtemp malypromien)) (setq malypromien rtemp) (setq zbior (ssget "X" (list (cons 0 "CIRCLE") (cons 410 "Model")(cons -4 ">=") (cons 40 malypromien ) ) )) (if zbior (pr
  5. Dziękuję. Oto kod jaki mam teraz. Wyświetla się też komunikat o ilości znalezionych elementów. (defun c:okregi (/) (setq malypromien (getreal "Podaj maly promien: ")) (setq zbior (ssget "X" (list (cons 0 "CIRCLE") (cons 410 "Model")(cons -4 ">=") (cons 40 malypromien ) ) )) (if zbior (princ (list "Ilosc znalezionych elementow: " (setq ile (sslength zbior)))) (princ "\nBrak elementow")) (princ) ) Dziwi mnie że te obiekty nie są wybrane na rysunku. Można je ręcznie zaznaczyć z linii poleceń tak Polecenie: !ile 47 Polecenie: _SELECT Wybierz obiekty: _p znaleziono
  6. Chcę napisać lispa który zaznaczy mi okręgi o średnicach znajdujących się w przedziale. Zacząłem od napisania takiego programu, który zaznacza wszystkie okręgi w rysunku o promieniu większym lub równym od podanego. Ten skrypt działa ale muszę wpisać promień wewnątrz skryptu czyli tak (40 . 10 ) - zaznacza okręgi o promieniu >=10 Jeśli jednak zapytam o promień i zmodyfikuję program to dostanę błąd Doszukałem, że trzeba zamienić (40 . malypromien ) na (cons 40 malypromien ) ale błąd jest dalej. Jakieś sugestie?
  7. Abs nie wystarczył, trzeba było dorzucić IFa. Działa już po lewej i po prawej kierunek zaznaczania bez znaczenia. (defun c:krawedzieotworux () (princ "Zaznacz okregi do rzutownia: \n") (setq okrag (ssget '((0 . "CIRCLE")) )) ;prosimy o wskazanie obiektów oknem. Pozwalamy na wybor tylko okregow (setq ile (sslength okrag)) ;liczymy ile obiektow zaznaczylismy (setq i 0) ;ustawiamy zmienna i zeby sobie odliczac (setq pt1 (getpoint "Wskaz poczatek linii: ")) (setq pt2 (getpoint "Wskaz koniec linii: ")) (setq przedluzenieosi (* (abs (- (car pt2) (car pt1) )) 0.1
  8. W widoku z góry trzeba zmienić na wartość bezwzględną (setq przedluzenieosi (* (abs (- (car pt2) (car pt1) )) 0.1 ))
  9. Kolejna wersja programu: rysuje osie i grupuje elementy otworu. Przed Po (defun c:krawedzieotworux () (princ "Zaznacz okregi do rzutownia: \n") (setq okrag (ssget '((0 . "CIRCLE")) )) ;prosimy o wskazanie obiektów oknem. Pozwalamy na wybor tylko okregow (setq ile (sslength okrag)) ;liczymy ile obiektow zaznaczylismy (setq i 0) ;ustawiamy zmienna i zeby sobie odliczac (setq pt1 (getpoint "Wskaz poczatek linii: ")) (setq pt2 (getpoint "Wskaz koniec linii: ")) (setq przedluzenieosi (* (- (car pt2) (car pt1) ) 0.1 )) (setq aktualnawarstwa (
  10. Teraz coś co działa. Program do tworzenia krawędzi otworów na drugim rzucie. Wybieramy wszystkie obiekty, odfiltrują się otwory. Wskazujemy gdzie maja się zaczynać i kończyć otwory. Na rysunku po lewej przed rzutowaniem po prawej po rzutowaniu. Jak ktoś jest chętny to plik dwg jest tutaj rzutownie-otworow.dwg Plik lispa z opisem krawedzieotworux.lsp Teraz pochwalę się moim kodem: (defun c:krawedzieotworux () (princ "Zaznacz okregi do rzutownia: \n") (setq okrag (ssget '((0 . "CIRCLE")) )) ;prosimy o wskazanie obiektów oknem. Pozwalamy na wybor tylko okregow (setq
  11. Dzięki, przyda się. Teraz pracuję nad czymś dużym. Zrobiłem początek: zapytanie o zaznaczenie obiektów i wyświetlenie liczby zaznaczonych obiektów i ich właściwości. (defun c:krawedzie () (setq okrag (ssget)) ;prosimy o wskazanie obiektów oknem (setq ile (sslength okrag)) ;liczymy ile obiektow zaznaczylismy (setq i 0) ; ustawiamy zmienna i zeby sobie odliczac (repeat ile ; powtarzamy tyle razy ile jest obiektow (setq nazwyobiektow (ssname okrag i)) ; ustalamy nazwe kolejnych obiektow (setq listaobiektu (entget nazwyobiektow)) ;pobieramy wlasciwosci obiektu o nazwie jak
  12. Dziękuję teraz jest znacznie lepiej. (defun c:PETLA (/) (setq pnt1 (getpoint "Wskaz srodek polprostych: ")) (initget (+ 1 2 4)) (setq a (getint "\nPodaj ilosc polprostych: " )) (setq k (/ 360.0 a)) ; obliczam kat pomiedzy polprostymi (setq i 0) ; zmienna do petli (while i (command "_line" pnt1 "D" 100 (* k i) "") ; rysowanie linii, kat pomnozony przez zmienna petli i (setq i (1+ i)) ; zwiekszam o 1 wartosc zmiennej i (if (= i a) ; jesli mam dosc polprostych to wychodze z petli (setq i nil) ) ) ) Zastanawiam się jak zrobić żeby przy pytaniu o ilość progr
  13. No tak Mam takie coś: (defun c:PETLA (/) (setq pnt1 (getpoint "Wskaz srodek polprostych: ")) (setq a (getint "\nPodaj ilosc polprostych: " )) (setq k (/ 360 a)) ; obliczam kat pomiedzy polprostymi (setq i 0) ; zmienna do petli (while i (command "_line" pnt1 "D" 100 (* k i) "") ; rysowanie linii, kat pomnozony przez zmienna petli i (setq i (1+ i)) ; zwiekszam o 1 wartosc zmiennej i (if (= i a) ; jesli mam dosc polprostych to wychodze z petli (setq i nil) ) ) ) Problem polega na tym, że jak kąt jest liczbą całkowitą np. 36 stopni to rysuje poprawnie. Jeśli t
  14. Po próbach i poprawkach oraz uzupełnianiu nawiasów doszedłem do takiego skryptu: (defun c:WS (/) (setq pnt1 (getpoint "Wskaz srodek polprostych: ")) (command "_line" pnt1 "D" 100 0 "") (command "_line" pnt1 "D" 100 30 "") (command "_line" pnt1 "D" 100 60 "") (command "_line" pnt1 "D" 100 90 "") (command "_line" pnt1 "D" 100 120 "") (command "_line" pnt1 "D" 100 150 "") (command "_line" pnt1 "D" 100 180 "") ) ws.lsp Polecenie "WS". Skrypt pyta o wskazanie punktu i rysuje linie co 30 stopni. Teraz chyba czas na pętle.