Przechowywanie informacji w pliku rysunku AutoCAD/ZWCAD C#


Recommended Posts

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?

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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?

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Edited by JasW
Link to comment
Share on other sites

  • 4 weeks later...

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.

Link to comment
Share on other sites

A mi jeszcze jeden pomysł wpadł do głowy. Wg mnie to co nam potrzeba to: średnica, długość i nr pręta.

średnica - szerokość globalna polilini

długość - długość polilini

nr pręta - przypisany do odpowiedniego koloru (nr1 - czerwony, nr2 - zielony itd)

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...