atrybuty w blokach


Rekomendowane odpowiedzi

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Kilometrapunktw.thumb.gif.0963bf42740c3e0783f8f68666b004db.gif

Odnośnik do komentarza
Udostępnij na innych stronach

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.

Odnośnik do komentarza
Udostępnij na innych stronach

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?

Odnośnik do komentarza
Udostępnij na innych stronach

  • 3 tygodnie później...

Cześć,

Napisałem program PIKIETAZ.lsp w LISPie który zdecydowanie skróci twoją pracę.

Działanie jest bardzo proste

  1. W Pasku poleceń wpisujesz PIKIETAZ
  2. Wybierasz oś drogi (która musi być polilinią)
  3. Wpisujesz początkową wartość kilometrów i metrów na pikietażu
  4. Na koniec klikasz po kolei na bloki w których chcesz zmienić wartość
  5. Ż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!

image.thumb.gif.4de7880a19b96b0fb71df7470d6e1d63.gif

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

 

Odnośnik do komentarza
Udostępnij na innych stronach

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ą.

Gość
Dodaj odpowiedź do tematu...

×   Wklejono zawartość z formatowaniem.   Usuń formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Odnośnik został automatycznie osadzony.   Przywróć wyświetlanie jako odnośnik

×   Przywrócono poprzednią zawartość.   Wyczyść edytor

×   Nie możesz bezpośrednio wkleić grafiki. Dodaj lub załącz grafiki z adresu URL.

Ładowanie