Przechowywanie informacji w pliku rysunku AutoCAD/ZWCAD C#


Rekomendowane odpowiedzi

Jak przechowywać dane w pliku rysunku cad? Mam pręt. Składa się z polilinii oraz opisu. W opisie jest zawarty numer pręta , średnica, długość, liczba sztuk i inne dodatkowe dane. Numer pręta będzie dodawany automatycznie. Gdzie przechowywać takie dane w rysunku aby było do nich stały dostęp (przy każdym uruchomieniu muszą być w pamięci)?  Widziałem, że jest np. XData ale jeśli to jest ta droga to jak to zrobić aby dostosować do tej sytuacji. W dokumentacji czy blogach sprzed kilku lat to tylko pokazują jak dodać jakiś prosty, pojedynczy, tekst do danego Entity. A ja potrzebuję przechowywać całe kolekcje (słownik z dynamicznymi listami).

Lepiej zrobić pręt jako blok z tekstem i polilinią czy nową klasę z polami Polyline i MText/MLeader?

Odnośnik do komentarza
Udostępnij na innych stronach

Niektóre nakładki do zliczania używają bloków opisów z atrybutami. Czyli opis nie jest tekstem tylko blokiem. Dodatkowo można dorzucić do elementu rysunkowego XData ułatwiające wstawianie takich bloków opisowych. Samego pręta nie robiłbym jako bloku. Zobacz przykładowo jak robi to e-cad. Można również pójść drogą PROXY_ENTITY ale zdaje się to znacznie utrudnia wymianę rysunków między użytkownikami.

Odnośnik do komentarza
Udostępnij na innych stronach

9 minut temu, perlon napisał:

Niektóre nakładki do zliczania używają bloków opisów z atrybutami. Czyli opis nie jest tekstem tylko blokiem. Dodatkowo można dorzucić do elementu rysunkowego XData ułatwiające wstawianie takich bloków opisowych. Samego pręta nie robiłbym jako bloku. Zobacz przykładowo jak robi to e-cad. Można również pójść drogą PROXY_ENTITY ale zdaje się to znacznie utrudnia wymianę rysunków między użytkownikami.

A w jaki sposób XData ułatwi wstawianie bloków opisowych? 

Czyli cały opis jako blok z atrybutami a kształt pręta to zwykła Polilinia obok opisu? 

Nie można jakoś powiązać opisu z kształtem pręta? 

Przedstawię co potrzebuję:

1a.thumb.PNG.143632ddc0fc332fb2f9ae39346011cb.PNG

Na rysunku zdefiniuję linie jako pręty z opisami. Opis ma być jako blok tak? A co z linią? Na rysunku mam ten sam pręt w kilku miejscach. Na koniec podczas wyciągania pręta zlicza wszystkie sztuki na całym rysunku i tworzy nowy inny opis wraz z długością (wymiar na dole pręta).  Chciałbym aby również była taka możliwość że gdy zmienię średnicę pręta w jednym miejscu na wyciągniętym pręcie to zmieni się to również na całym rysunku. Czy bloki opisów pozwolą na to? Czy nie będzie potrzebne powiązanie linii z opisem?

Odnośnik do komentarza
Udostępnij na innych stronach

Moim zdaniem pomysł perlona jest dobry.
W rysunku wstawiamy np polilinię. Do niej dodajemy XDatę zawierającą numer, średnicę i co tam jeszcze .
Dodatkowo wstawiamy opis: tekst lub blok. Moim zdaniem lepiej użyć bloku z atrybutami ponieważ formatowanie (wygląd) możemy pozostawić do łatwej konfiguracji, a przy zestawieniach łatwiej też wybrać wszystkie bloki o podanej nazwie, niż analizować wszystkie teksty w rysunku.

Sama funkcja wstawiająca opis może sobie wczytać parametry z XDaty i na tej podstawie wypełnić treścią opis.
Mechanizm XDaty pozwala na zapisanie w elemencie danych tekstowych , liczb, współrzędnych, uchwytów do innych elementów  itp. Słowniki z dynamicznymi listami to może być problem. Można przygotować listę gdzie pierwszy element to będzie numer, drugi średnica, następny liczba sztuk itp. Taką listę można zapisać do obiektu, następnie przy odczytywaniu parametrów trzeba pamiętać o tym jaka jest kolejność poszczególnych parametrów. Nie jest to słownik, pary : właściwość - wartość. Można to przerobić tak, że lista będzie miała kolejne wpisy (właściwość1, wartość1, właściwość2 , wartość2, właściwość3, wartość3) itp. następnie przy odczycie trzeba połączyć pary w słownik.

Możliwość zmiany średnicy pręta w jednym miejscu i aktualizacja w innych daje nam mechanizm reaktorów.

PROXY_ENTITY o czym pisze perlon to raczej nie w tym przypadku. ARX (ZRX) daje nam możliwość tworzenia własnych typów obiektów, np w architekturze ściany, okna, można ich właściwości wyświetlać i modyfikować w standardowym oknie właściwości , a kiedy nakładka nie jest wczytana to wyświetlają się, a we właściwościach pojawia się tylko informacja że jest to PROXY_ENTITY , ale już nic więcej.

C# nie daje możliwości tworzenia własnych typów obiektów . W AutoCAD jest mechanizm overrule którym można osiągnąć ciekawe efekty, w ZWCAD coś gdzieś słyszałem, ale jeszcze nie jest to gotowe.

Odnośnik do komentarza
Udostępnij na innych stronach

1. Zasadniczy kierunek rozwiązania  to użycie  XData.  Każdy obiekt może mieć zdefiniowane dane dodatkowe.

Praktyczna obsługa  musi jednak być programowo np. nakładki ( Lisp / VB / C# ) .  Helpy Zwcada i Autocada dla developerów dosyć szeroko traktują temat.

 

2. Pewna praktyczna  idea łączenia obiektów ( np. polilinii z blokiem lub mtext ) jest pod tym adresem

   http://www.lee-mac.com/associativecenterlines.html

Była także pewna dyskusja na tym forum z rozwiązaniem pewnego Bug'a ZwCAD;a ( już ok ) . Przykładowy skrypt lispa używa kilku technik Asocjacje/reaktory/XData)  i to raczej 'tylko dla orłów' 

Takie asocjacje interaktywne to bardzo praktyczne rozwiązanie . Niestety  wprowadza także dod. ograniczenia ( przenośność ) .

Pozdrowienia,

J.

Edytowane przez JasW
Odnośnik do komentarza
Udostępnij na innych stronach

  • 4 tygodnie później...

To ja dorzucę swoje 3 grosze. Najprostszym rozwiązaniem jest opisane przez perlona Polilinia +xdata, z polilinii bierzemy długość pręta a w xdata dopisujemy jego średnicę, rodzaj stali i co tam jeszcze chcemy. Ładnie to działa.

Innym rozwiązaniem, które planuję zrobić i oprogramować jest stworzenie bazy bloków dynamicznych na podstawie prętów kodowanych - to również da bardzo fajne efekty.

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