picaro Opublikowano 11 Marca Zgłoś Udostępnij Opublikowano 11 Marca Dzień dobry, problem przekracza moje zdolności programistyczne. Nawet nie wiem, czy to gruby temat czy łatwy. Mianowicie potrzebuję lispa, który pozamienia atrybuty w blokach: powpisuje w nich pikietaż drogi. W załączeniu przesyłam rysunek przyklad.dwg, na którym jest wyjaśniony problem. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
pawmal Opublikowano 11 Marca Zgłoś Udostępnij Opublikowano 11 Marca Witam, Mamy nakładkę drogową do wspomagania tworzenia oznakowania. Działa z ZWCAD wersją PRO. https://www.zwcad.pl/nakladki-na-zwcad/oznakowanie-i-projektowanie-drog/zwtraffic/funkcjonalnosc-zwtraffic.html?pid=2 W ZWCAD jest też polecenie ATTOUT i ATTIN, które może być pomocne jeśli chodzi o zamianę samych wartości atrybutów. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
picaro Opublikowano 11 Marca Autor Zgłoś Udostępnij Opublikowano 11 Marca pracuje na gaznakach. Gddkia sobie zażyczyła specyficznego sposobu opisywania barier 😒. Tych bloków są setki, stad moje pytanie. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
swazy Opublikowano 12 Marca Zgłoś Udostępnij Opublikowano 12 Marca A co dokładnie jest problemem? Wstawienie bloku? Zmiana atrybutu? Odczytanie pikietażu? Jest to jak najbardziej do zrobienia Lisp-em. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kruszynski Opublikowano 13 Marca Zgłoś Udostępnij Opublikowano 13 Marca W ZWTraffic mamy funkcje opisywania pikietażem punktów wzdłuż trasy. Tutaj temat podobny. Jednak potrzeba doprecyzować kilka rzeczy. - Czy te bloki są już wstawione w rysunku i trzeba wstawiać kilometraż jako wartość atrybutu ? - Może potrzebne byłoby wstawianie opisu na podstawie istniejących barier w rysunku. We wstawianym opisie można uzupełniać też inne atrybuty np nazwa znaku - Czy szablon opisu np wielkość, dostępne atrybuty jest narzucony? Możemy zrobić tak, żeby pozwolić wybrać szablon opisu jaki będzie wstawiany. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
picaro Opublikowano 19 Marca Autor Zgłoś Udostępnij Opublikowano 19 Marca Bardzo dziękuję z odpowiedź. Tak, mniej więcej tak to robię, tylko, że w gaznakach. Jednak jest to robota ręczna. Zastanawiałem się nad lispem, który automatycznie opisze pikietaż wskazanych bloków. W odpowiedzi na pytania: 1. załóżmy, że bloki są już wstawione na rysunku, ponieważ często pikietażosi przybywa za późno lub trzeba ją zmienić. zazwyczaj trzeba ją zmienić 😉 2. niestety, formę opisu barier narzucił klient. Natomiast taki lisp byłby uzyteczny przy opisie kilomeraża zjazdów, skrzyzowań, pkp, pkl i innych, które są już ściśle graficznym przedstawieniem 3. szablon opisu jest poniekąd narzucony w stylu "tak jak robi to ekkom" ;). Ale jeżeli ZWTraffic jest elastyczny na tyle, że można go wykorzystać do opisywania innych elementów rysunku to natychmiast się przesiadam. "A co dokładnie jest problemem? Wstawienie bloku? Zmiana atrybutu? Odczytanie pikietażu? Jest to jak najbardziej do zrobienia Lisp-em. " Nie ma problemu z definicją atrybutu, wstawieniem bloku, zmianą atrybutu ani odczytaniem pikietażu. Problem jest w ilości tych opisów. Kilka tysięcy zmian atrybutu zajmuje dwa dni idiotycznej pracy. Chodzi o zautomatyzowanie tej pracy. Tak jak wspomniałem, dochodzi element elastyczności, w sytuacji, kiedy trzeba przekilometrować od nowa odcinek drogi. Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kruszynski Opublikowano 19 Marca Zgłoś Udostępnij Opublikowano 19 Marca Zastanawiam się na jakiej podstawie rozróżnić te bloki, którym trzeba zmienić kilometraż. Czy chce Pan zaznaczyć jeden przykładowy blok i mają sie zaktualizować wszystkie wstawione tego samego typu? to rozwiązałoby kwestie różnych szablonów od różnych "wymagaczy" Ale wszystkie to wydaje się zbyt dużo. skąd wiedzieć które pominąć? Jak powiązać je z konkretną osią drogi? Wyobrażam sobie że kiedy projektujemy skrzyżowanie, mamy przynajmniej 2 osie, zmieniamy jedną oś, jakie kryteria zastosować do wyboru i odrzucenia poszczególnych opisów? Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
RobS Opublikowano 4 Kwietnia Zgłoś Udostępnij Opublikowano 4 Kwietnia Cześć, Napisałem program PIKIETAZ.lsp w LISPie który zdecydowanie skróci twoją pracę. Działanie jest bardzo proste W Pasku poleceń wpisujesz PIKIETAZ Wybierasz oś drogi (która musi być polilinią) Wpisujesz początkową wartość kilometrów i metrów na pikietażu Na koniec klikasz po kolei na bloki w których chcesz zmienić wartość Żeby wyjść z programu klikasz ESC Drobne różnice w wartościach w stosunku do twojego przykładu wynikają ze sposobu wstawiania bloków. Program rzutuje punkt bazowy bloku prostopadle na oś drogi. Warto zwrócić na to uwagę przy wstawianiu bloków lub zmienić ich punkt bazowy. Nagranie z działania i kod poniżej. Miłej pracy! (princ (strcat " Copyright © 2000 — 2024 Uslugi Informatyczne Szansa www.zwcad.pl Dostepne polecenia: PIKIETAZ - uruchamia funkcje automatycznego pomiaru odleglosci do pikietazu i zapisanie wartosci w atrybucie bloku ") ) (defun C:PIKIETAZ (/ roadAxis startDistKm startDistM blk blkName blkBasePnt polyPnt distToPnt meters kilometers attValue) (while (not (and (setq roadAxis (car (entsel "\nWybierz os drogi: "))) (eq (cdr (assoc 0 (entget roadAxis)))"LWPOLYLINE") )) (prompt "\nProsze wybrac polilinie!") ) (setq startDistKm (atoi (getstring "\nOkresl wartosc kilometrow na poczatku drogi: ")) startDistM (atoi (getstring "\nOkresl wartosc metrow na poczatku drogi: ")) kilometers 0 ) (while t (setq blk (entsel "\nWybierz blok: ") blkName (car blk) blkBasePnt (cadr blk) polyPnt (vlax-curve-getClosestPointTo roadAxis blkBasePnt) distToPnt (atoi (rtos (vlax-curve-getDistAtPoint roadAxis polyPnt) 2 0)) meters (+ startDistM distToPnt) ) (if (>= meters 1000) (setq kilometers (/ meters 1000) meters (- meters (* 1000 kilometers)) ) ) (setq attValue (strcat (itoa (+ startDistKm kilometers)) "+" (itoa meters))) (foreach ATT (vlax-invoke (vlax-ename->vla-object blkName) 'GetAttributes ) (if (= (strcase (vla-get-TagString Att)) "KM") (progn (vla-put-textstring Att attValue) attValue) ) ) ) (princ) ) Cytuj Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Dołącz do dyskusji
Możesz dodać zawartość już teraz a zarejestrować się później. Jeśli posiadasz już konto, zaloguj się aby dodać zawartość za jego pomocą.