
Pawcyk
Użytkownik forum-
Postów
54 -
Dołączył
-
Ostatnia wizyta
Treść opublikowana przez Pawcyk
-
entmod na wielu obiektach
Pawcyk odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
Lost In Stupid Parentheses - to moje nowe motto;) Nie mogę uwierzyć,że to o to chodziło. Co do powyższego kodu jest jeszcze jeden bug. Zmienia tylko jeden wierzchołek. Prawdopodobnie dlatego, że przy drugim punkcie odwołuję się do lstEntity (przed zmianą 1 punktu). Rozwiązałem to tak: (defun ChangeVx ( NrVx / ) (repeat (setq intCount (sslength ssSelections)) (setq intCount (1- intCount) entSelection (ssname ssSelections intCount) lstEntity (entget entSelection) ) ;Vertex (setq wierzcholek (assoc NrVx lstEntity)) (setq x1 (nth 1 wierzcholek)) (setq y1 (nth 2 wierzcholek)) (setq z1 (nth 3 wierzcholek)) ;podmiana punktu (setq nowaDef (subst (cons NrVx (list (atof (rtos x1 2 2)) (atof (rtos y1 2 2)) (atof (rtos z1 2 2)) )) (assoc 'NrVx lstEntity ) lstEntity )) (setq nowaDef (append lstEntity (list (cons NrVx (list (atof (rtos x1 2 2)) (atof (rtos y1 2 2)) (atof (rtos z1 2 2)))) ) ) ) (entmod nowaDef) );koniec repeat (print) ); (defun c:zz () (setq ssSelections (ssget (list (cons 0 "3DFACE")))) (setq NrVx 10) (repeat 4 (ChangeVx NrVx ) (setq NrVx (1+ NrVx)) );end repeat );KONIEC A zamiast: (atof (rtos x 2 2)) można tak: (/ (fix (* x 100.)) 100.0) Dziękuję za wszystkie podpowiedzi -
entmod na wielu obiektach
Pawcyk odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
Mój poziom wiedzy o lispie jest o kilka poziomów za niski, żeby w 100% zrozumieć powyższy kod... a może strach ma wielkie oczy. Żeby ruszyć dalej z nauką muszę wiedzieć gdzie robię błędy na obecnym etapie. Tak czy siak dziękuję za pomoc PS docelowy kod ma zmieniać wsp wierzchołków z takich: W1: x1=5.12345678 y1=3.23456789 z1=7.42345678 na takie: W1: x1=5.12000000 y1=3.23000000 z1=7.42000000 Czyli niewielkie przesunięcie. Uważałem, że nie ma potrzeby pisać całego kodu, dlatego posłużyłem się przykładem (* z 10) -
entmod na wielu obiektach
Pawcyk odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
Oczywiście zajrzę na Pańską stronę. Każda dodatkowa wiedza jest cenna. Do tej pory myślałem, że deklarowanie zmiennych to pomoc przy dużych kodach, a nie konieczność. Czy to może być powodem nie działania programu? Program działa do linijki: podmiana punktu 1 Natomiast mnożenie zmiennej "Z" to tylko przykład. Pozdrawiam -
Dzień dobry. Próbuję wykonać pewną operację na wielu powierzchniach 3DFACE. Dla przykładu pomnożyć współrzędną "Z" wierzchołków razy 10. Korzystając z kilku podpowiedzi: https://www.zwcad.pl/help/lisp-help/246-subst.html http://forums.augi.com/showthread.php?120834-How-to-know-name-of-Entity-by-ssget Stworzyłem coś takiego: (defun c:zz () (if (setq ssSelections (ssget (list (cons 0 "3DFACE")))) (repeat (setq intCount (sslength ssSelections)) (setq intCount (1- intCount) entSelection (ssname ssSelections intCount) lstEntity (entget entSelection) ) ;współrzędne wierzchołka 1 (setq wierzcholek1 (assoc 10 lstEntity)) (setq x1 (nth 1 wierzcholek1)) (setq y1 (nth 2 wierzcholek1)) (setq z1 (nth 3 wierzcholek1)) ;współrzędne wierzchołka 2 (setq wierzcholek2 (assoc 11 lstEntity)) (setq x2 (nth 1 wierzcholek2)) (setq y2 (nth 2 wierzcholek2)) (setq z2 (nth 3 wierzcholek2)) ;podmiana punktu 1 (setq lstEntity (subst (cons 10 (list x1 y1 (* z1 10)) (assoc '10 lstEntity ) lstEntity ) )) (entmod lstEntity) ;podmiana punktu 2 (setq lstEntity (subst (cons 11 (list x2 y2 (* z2 10)) (assoc '11 lstEntity ) lstEntity ) )) (entmod lstEntity) );koniec repeat );koniec if (print) );Koniec W powyższym kodzie pominąłem dwa ostatnie punkty. Chciałem pokazać tylko ideę. Co robię źle, że to nie działa? Pozdrawiam
-
Wyrównanie tekstu - Entmake TEXT [rozwiązany]
Pawcyk odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
Wszystko się wyjaśniło. Przeoczyłem ten kod 11. -
Wyrównanie tekstu - Entmake TEXT [rozwiązany]
Pawcyk odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
OK dziękuję. Ciekawi mnie tylko dlaczego jak ręcznie stworzę taki tekst i odzyskam kody to nie pokazuje kodu 11. -
Wyrównanie tekstu - Entmake TEXT [rozwiązany]
Pawcyk opublikował(a) temat w Wsparcie programistyczne LISP i VisualLISP
Dzień dobry. Być może przesadzam ostatnio z postami, ale patrząc z drugiej strony może moje problemy pomogą innym. Otóż tworze ręcznie jakiś tekst i sprawdzam jak wygląda w DXF. Potem tworzę odpowiednią listę jak w poniższym przykładzie. Problem się pojawia przy wierszu 14 i 15 odpowiedzialnym za wyrównanie. Jak wiersze są aktywne to nie wstawia tekstu. (defun WstawianyTekst (wartosc / ) ;1 (setq WstT ;2 (entmake ;3 (list ;4 '(0 . "TEXT") ;5 '(100 . "AcDbEntity") ;6 (cons 8 (getvar "CLAYER")) ;7 '(100 . "AcDbText") ;8 (cons 1 wartosc) ;9 (cons 10 (getpoint)) ;10 '(50 . 1.5708) ;11 '(40 . 0.15) ;12 '(41 . 0.75) ;13 ; '(72 . 0) ;14 ; '(73 . 2) ;15 ))) ;16 ) ;17 (setq P1 (list 750 715 0)) ;18 ;19 (defun c:qaw () ;20 (setq tral "tralalala") ;21 (WstawianyTekst tral ) ;22 ) ;23 Jak ktoś zna przyczynę takiej sytuacji to będę wdzięczny za pomoc. Pozdrawiam -
Tworzenie bloku [rozwiązany]
Pawcyk odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
Dziękuję bardzo, działa idealnie. -
Tworzenie bloku [rozwiązany]
Pawcyk opublikował(a) temat w Wsparcie programistyczne LISP i VisualLISP
Dzień dobry. W pewnym lispie chciałbym wykorzystywać blok o nazwie znacznik. Blok ten składa się z linii prostej pionowej o długości 0.1 Ponieważ nie potrafię stworzyć czegoś takiego przy pomocy entmake...jak na poniższych przykładach: https://www.zwcad.pl/3-tworzenie-i-modyfikacja-obiektow.html skorzystałem z lispa Lee Mac'a: http://www.cadtutor.net/forum/showthread.php?45495-Block-creation-and-insertion-Lisp-Template i wygląda to tak: (defun c:zna () ;tworzenie definicji bloku "znacznik" ;ale najpierw definicja linii (setq LiniaDef (entmake (list '(0 . "LINE") '(100 . "AcDbEntity") '(100 . "AcDbLine") '(62 . 0) '(370 . -2) (cons 10 (list 0.1 0.1 0)) (cons 11 (list 0.1 0 0 )) ))) ;teraz blok z tej linii ;kod stworzony przez Lee Mac ~11.01.10 (setq P40 (list 0.1 0.1 0)) (cond ( (not (setq ss (ssget (list 0.1 0.1 0))))) ( (repeat 1 (progn (setq bNme "znacznik") (cond ( (not (snvalid bNme)) (princ "\n** Invalid Block Name **")) ( (tblsearch "BLOCK" bNme) (princ "\n** Block Already Exists **")))))) ( (not (setq i -1 pt (list 0.1 0.1 0)))) (t (entmake (list (cons 0 "BLOCK") (cons 10 pt) (cons 2 bNme) (cons 70 0))) (while (setq ent (ssname ss (setq i (1+ i)))) (entmake (entget ent)) (entdel ent)) (entmake (list (cons 0 "ENDBLK") (cons 8 "0"))) (entmake (list (cons 0 "INSERT") (cons 2 bNme) (cons 10 pt))))) (princ) ;Koniec tworzenia bloku ;usuwanie utworzonego bloku lub linii (jeżeli blok już istniał) (setq P41 (list 0 0 0)) (setq P42 (list 1 1 0)) (command "_zoom" "_w" P41 P42) (command "_erase" (ssget P40) "") ;(command "_zoom" "_p") (princ) );KONIEC Problem się pojawia w trzeciej linijce od końca. Jeżeli ta linijka jest aktywna to usuwa także definicję bloku "znacznik". Może jest lepszy sposób na kasowanie stworzonych obiektów np bez konieczności migania widokiem? Pozdrawiam i dziękuję za ewentualną pomoc -
Takiego lispa znalazłem....
Pawcyk odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
...ciągle szukam i znalazłem coś takiego: 1) zastępstwo funkcji acet-ss-zoom-extents: ; nie wiem czy potrzebna jest ta funkcja; https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/zoom-to-selected-entities/td-p/917180?nobounce 2) zastępstwo funkcji acet-list-remove-adjacent-dups: ; to chyba nie problem, że będą duplikujące się elementy; https://forums.autodesk.com/t5/visual-lisp-autolisp-and-general/remove-duplicates-from-a-list/td-p/2914874 3) zastępstwo funkcji acet-geom-object-point-list ; wg mnie to jest najważniejsze; http://lee-mac.com/entitytopointlist.html P.S. będę się starał zwracać większą uwagę na to co piszę, żeby "sronie" się nie powtórzyło. -
Takiego lispa znalazłem....
Pawcyk odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
Może udało by się stworzyć jakiś zamiennik... Rękawica została podjęta na sronie: http://www.cadtutor.net/forum/showthread.php?99825-Problem-with-function-ACET-....... -
Takiego lispa znalazłem....
Pawcyk odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
Wydaje mi się, że największym problemem jest ten fragment kodu: (defun getfencesel (en flt / fe ss) (acet-ss-zoom-extents (setq ss (ssadd en))) (setq fe (acet-list-remove-adjacent-dups (acet-geom-object-point-list en 0.05)) ss (ssget "_F" fe flt) ) (vl-cmdf "_ZOOM" "_P") ss ) Może ktoś zna jakiś sposób na zapisanie tego w zwykłym autolispie??? -
Takiego lispa znalazłem....
Pawcyk opublikował(a) temat w Wsparcie programistyczne LISP i VisualLISP
Dzień dobry. Znalazłem pewnego lispa: https://www.theswamp.org/index.php?topic=9042.465 Żeby zachęcić do pomocy przedstawię jego działanie: 1) z punktów 3d oraz liniii nieciągłości (3DPOLY) tworzy siatkę trójkątów (3DFACE) 2) na podstawie polilinii tworzy profil wdowolnej skali pionowej Niestety działa tylko w AutoCadzie. Problem pojawia się z funkcjami: 1) pragma (z tego co się dowiedziałem pomaga przy programowaniu. Oznacza zmienne innym kolorem. Więc może nie jest potrzebna) 2) _vl-times 3) acet-ui-progress 4) ACET-SS-ZOOM-EXTENTS Punkty 2 i 3 mają związek z wyświetlaniem informacji ile czasu zajęło programowi wykonanie poszczególnych działań (tak mi się wydaje). Jak kogoś zainteresuje to zachęcam do walki o działanie w ZWCadzie lub inny_cadzie ;) Pozdrawiam TriangV0.6.7.lsp -
Wierzchołki polilini
Pawcyk odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
po wpisaniu komendy "ps_ow" wyświetla: Polecenie: ps_ow Wskaż polilinię 0.0 Polecenie: Moje rozumienie działania to takie, że kod wstawia tekst z wartością współrzędnej Z w wierzchołkach polilinii 3d. A niestety tego nie robi. -
Wierzchołki polilini
Pawcyk odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
Czy kod do opisywania wierzchołków polilinii może działać dla polilinii 3d?? Jeżeli tak to czemu taka modyfikacja nie działa: (defun c:ps_ow () (setvar "dimzin" 2) (setq polilinia(entget (car(entsel "\nWskaż polilinię \n")))) (setq wierzchołki nil ) (while (setq wierzchołek (assoc 10 polilinia)) (setq wierzchołki (append wierzchołki (list (cdr wierzchołek)))) (setq polilinia (cdr (member wierzchołek polilinia) ) ) (setq wierzchołek (cdr wierzchołek )) (setq z1 (nth 2 wierzchołek) ) (command "_text" wierzchołek "" "" (RTOS z1 2 2)) ) );KONIEC -
Wierzchołki polilini
Pawcyk odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
KOREKTA nowe ZWCady też potrafią. (sprawdzone ZWCad 2015+ i 2017) Wniosek...lisp niepotrzebny. -
Wierzchołki polilini
Pawcyk odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
tylko nowsze autocady potrafią wyciągać wiele powierzchni na raz.... dlatego myślałem, żeby zaznaczyć wiele obiektów, ale żeby brał po jednym do wyciągania. -
Wierzchołki polilini
Pawcyk odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
zmiana kodu na taki: (command "_sweep" JednaPow "" sciezka "n") powoduje działanie lispa, jednak tworzy bryły w jednym miejscu, a chodzi o wyciągnięcie do góry w miejscu, w którym ta powierzchnia się znajduje. Chyba sam powyższego wywodu bym nie zrozumiał, dlatego zachęcam do odpalenia lispa w załączonym wyżej pliku. -
Wierzchołki polilini
Pawcyk odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
Chodzi mi o coś takiego (rys 2 i 3): w powyższym przykładzie zrobiłem to funkcją: _extrude Dodaje także przykładowy plik. Pow3d.dwg -
Wierzchołki polilini
Pawcyk odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
Dziękuję za pomoc. Jeżeli można to mam jeszcze problem z funkcją "wyciągnij" tz. działa tylko na jednym elemencie (powierzchni 3d). Pomyślałem ze można wykorzystać powyższy kod...ale oczywiście nie działa. (defun c:zz () (print "\nWskaż ścieżkę wyciągania") (setq sciezka (ssget "_:S")) ;a może tak:(setq sciezka(entget (car(entsel "\nWskaż polilinię \n")))) (print "\nWskaż wszystkie powierzchnie") (setq pow3D (ssget)) (setq wszystkie nil ) (while (setq JednaPow (assoc 10 pow3D)) (setq wszystkie (append wszystkie (list (cdr JednaPow)))) (setq pow3D (cdr (member JednaPow pow3D) ) ) (setq JednPow (cdr JednaPow )) (command "_extrude" JednaPow "c" sciezka) ) );KONIEC -
Dzień dobry. Kombinuje z pewnym lispem, który wpisywałby współrzędną Y w wierzchołkach polilini. Na stronie ZWCada napotkałem na taki kod: https://www.zwcad.pl/help/lisp-help/270-assoc.html moja wariacja na ten temat (która nie działa): defun c:yy () (setvar "dimzin" 2) (setq PozOdn (getreal "\nPodaj poziom odniesienia \n")) (setq P1 (getpoint "\nWskaz początek ukladu wspolrzednych \n")) (setq x1 (nth 0 P1) y1 (nth 1 P1)) (setq polilinia(entget (car(entsel "\nWskaż polilinię \n")))) (setq wierzchołki nil ) (while (setq wierzchołek (assoc 10 polilinia)) (setq wierzchołki (append wierzchołki (list (cdr wierzchołek)))) (setq polilinia (cdr (member wierzchołek polilinia) ) ) (setq x2 (nth 0 wierzchołki) y2 (nth 1 wierzchołki)) (setq rzedna (+ PozOdn (/ (- y2 y1) 5))) (command "_text" wierzchołki "" "" (RTOS rzedna 2 2)) ) );KONIEC Dziękuję za pomoc i proszę o wyrozumiałość dla początkującego.
-
Powierzchnia terenu jako bryła...
Pawcyk odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
W pracy używam Civila 3d, więc nie ma problemu. Natomiast w domu przy drobnych robótkach (i cięciu kosztów) próbuję go zastąpić "metodą ręczną". -
Powierzchnia terenu jako bryła...
Pawcyk opublikował(a) temat w Wsparcie programistyczne LISP i VisualLISP
Dzień dobry. Zacznę od początku... Dostaję od geodety plik txt z punktami. Wprowadzam te dane do cada, tz. tworze punkty 3d. Następnie korzystając z lispa: https://www.theswamp.org/index.php?topic=9042.15 tworzę powierzchnie 3d między tymi punktami. Wszystkie utworzone w ten sposób powierzchnie 3d wyciągam po ścieżce (po osi Z) "w dół". I tu zaczynają się schody. Nie wszystkie bryły można dodać do siebie. Widać to na rys 3. Bryła zielona, utworzona z kilku brył, nie chce się dodać do bryły fioletowej. Troszkę poszukałem i prawdopodobnym błędem jest to, że po przeciągnięciu spód bryły ma inne współrzędne niż góra. Chodzi, o któreś miejsce po przecinku. Zależy mi na terenie jako bryle, ponieważ w cadzie jest więcej możliwości obróbki brył w stosunku do powierzchni 3d. Zamieściłem to na tym forum ze względu na lisp do tworzenia powierzchni 3d oraz pomyślałem o wykorzystaniu VisualLISP'a, jako że bazuje na obiektach (wg mojej marnej wiedzy). Jeżeli macie jakieś inne pomysły jak to rozwiązać to będę wdzięczny. Bryły3d.dwg -
Mały lisp a nie działa w ZWCad 2012 Classic
Pawcyk odpowiedział(a) na Pawcyk temat w Wsparcie programistyczne LISP i VisualLISP
Dziękuję za pomoc.