Jak ustawić filtr warstwy w LISPie?


Rekomendowane odpowiedzi

Mam problem...

Mam zdefiniowane filtry warstw (LAYER FILTER) i chciałbym je przełączać korzystając z LISPa.

Gdzie jest zapisana informacja o aktualnym filtrze warstw? Jakaś zmienna systemowa? (To byłoby najlogiczniejsze)

A może jakieś Polecenie?

=2P=

PS.

Pytanie dotyczy ZWcad 2012 i ZWcad 2012+

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

Nie znam sposobu na manipulowanie stanami warstw przez LISP. Zapytam ZWSOFT czy jest taka możliwość.

Jakiś czas temu napisałem coś, co pozwala na uzgodnienie stanu warstw ze stanem z zewnętrznego pliku.

http://www.zwcad.pl/zwcad-pomoc/kurs-lisp/39-kursy/kurs-lisp/przyklady-lisp/195-wczytywanie-warstw-z-zewnetrznego-pliku.html

Może to byłoby pomocne

Odnośnik do komentarza
Udostępnij na innych stronach

Czy może Pan coś więcej podpowiedzieć w tym temacie?

Wiem jak można odczytać Dictionary, ExtensionDictionary czy XRecord, ale jak pobrać filtry warstw?

Sprawdzałem link, który Pan podał, program wczytuje się w ZWCAD, ale kiedy chcę sprawdzić działanie, wyświetla się okno, ale nie wyświetlają się w nim nazwy filtrów a jedynie <wszystkie warstwy>

Jak można to sprawdzić?

Odnośnik do komentarza
Udostępnij na innych stronach

Rozróżnić należy: Filtry grupy i filtry właściwości. AutoCAD ma oba - nie wiem jak to jest w ZwCAD-zie. Być może jest tu tylko struktura z AutoCAD-a nizszego niż 2005 (tylko filtry właściwości). Są to słowniki o nazwach ACAD_LAYERFILTER i ACLYDICTIONARY. Poniższy malunek ilustruje tenże strukturę - w oknie GF widać tylko część obiektów:

post-451-0-45389200-1352813323_thumb.png

kojacek

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

Dobrze rozumiem, że te słowniki należy pobrać z samego dokumentu?

Jeśli tak, to tutaj jest to jakoś inaczej rozwiązane, bo wylistowałem zdefiniowane słowniki i takich nie było.

Oczywiście że wszystkie dane są w dokumencie (rysunku). Nie sądzę żeby tu było inaczej - ZwCAD-owy dwg to najogólniej taki sam ja dwg jak autocad-owy.

kojacek

Odnośnik do komentarza
Udostępnij na innych stronach

1. Widzę, że nie do końca jasno zadałem swoje pierwsze pytanie :( Precyzuję więc:

Mam już w rysunku zdefiniowane (metodą tradycyjną) kilka filtrów. Dzięki temu, gdy w oknie LAYER ustawię któryś filtr, wyświetlane poniżej są tylko warstwy odpowiadające temu filtrowi. Teraz jeśli opuszczę okno LAYER to w liście rozwijanej na pasku toolbar również umieszczone są tylko te warstwy które odpowiadają ustawionemu filtrowi. Czyli jest coś takiego jak aktualny filtr wyświetlanych warstw - aż prosi się do tego jakaś zmienna systemowa....

Szukam rozwiązania, aby mój program w LISP "coś" przestawił i "wybrał" istniejący już filtr, dzięki czemu w liście rozwijanej z warstwami, użytkownik będzie widział konkretny zestaw warstw.

Chodzi mi o ZAUTOMATYZOWANE PRZESTAWIANIE FILTRÓW zrealizowane za pomocą LISPa, a nie ich definiowanie za pomocą LISPa, bo do tego już doszedłem, jak to zrobić (poniżej).

Chyba teraz udało mi się zwerbalizować problem jaśniej :)

2. Z moich doświadczalnych badań wiem, że przedstawiony przez Was problem polega na.... innej nazwie słownika w ZWcadzie i AutoCADzie!

Odpowiednikiem ACAD_LAYERFILTER jest ICAD_LAYERFILTER, i takiego właśnie słownika należy poszukiwać. Tam są zdefiniowane filtry!

Ale gdzie jest zapisane, który jest bieżącym - aktualnym????

Poniżej kod wyświetlający:

1. słowniki (widać słownik ICAD_LAYERFILTER, jeśli plik przechodził przez AutoCADa to pewnie będzie równolegle widać słownik ACAD_LAYERFILTER)

2. listę zdefiniowanych filtrów

3. dane konkretnego filtra.

Uruchomienie poniższego kodu należy poprzedzić typowym utworzeniem jakiegoś filtra w oknie LAYER (dopiero wtedy tworzony jest słownik)

(setq dict (namedobjdict))
(ZYXAK_PrintEntity (entget dict) )
(ZYXAK_PrintEntity (dictsearch dict "ICAD_LAYERFILTERS"))
(ZYXAK_PrintEntity (entget (cdr (assoc 350 (dictsearch dict "ICAD_LAYERFILTERS")))))

(defun ZYXAK_PrintEntity (E / f)
(setq f 0)
(print "====================")
(repeat (length E)
(print (nth f E))
(setq f (+ f 1))
)
(print "====================")
(princ)
)

Przykładowy wynik działania kodu u mnie:

"===================="

(-1 . <Entity name: c1cc240>)

(0 . "DICTIONARY")

(5 . "C")

(100 . "AcDbEntity")

(102 . "{ACAD_XDICTIONARY")

(360 . <Entity name: 0>)

(102 . "}")

(100 . "AcDbDictionary")

(280 . 0)

(281 . 1)

(3 . "ACAD_COLOR")

(350 . <Entity name: c1cef60>)

(3 . "ACAD_GROUP")

(350 . <Entity name: c1cee20>)

(3 . "ACAD_LAYOUT")

(350 . <Entity name: c1cece0>)

(3 . "ACAD_MATERIAL")

(350 . <Entity name: c1ce100>)

(3 . "ACAD_MLINESTYLE")

(350 . <Entity name: c1c8b10>)

(3 . "ACAD_PLOTSETTINGS")

(350 . <Entity name: c1c8890>)

(3 . "ACAD_PLOTSTYLENAME")

(350 . <Entity name: c1c8750>)

(3 . "ACAD_TABLESTYLE")

(350 . <Entity name: c1cf2a0>)

(3 . "ACAD_WIPEOUT_VARS")

(350 . <Entity name: c1caf60>)

(3 . "ACDBVARIABLEDICTIONARY")

(350 . <Entity name: c1caed0>)

(3 . "ACAD_SCALELIST")

(350 . <Entity name: c1cc920>)

(3 . "ACAD_MLEADERSTYLE")

(350 . <Entity name: c1cd690>)

(3 . "ICAD_LAYERFILTERS")

(350 . <Entity name: bf309f0>)

"===================="

"===================="

(-1 . <Entity name: bf309f0>)

(0 . "DICTIONARY")

(5 . "1D5")

(102 . "{ACAD_REACTORS")

(330 . <Entity name: c1cc240>)

(102 . "}")

(102 . "{ACAD_XDICTIONARY")

(360 . <Entity name: 0>)

(102 . "}")

(100 . "AcDbDictionary")

(280 . 0)

(281 . 1)

(3 . "NAZWA FILTRA")

(350 . <Entity name: c366020>)

"===================="

"===================="

(-1 . <Entity name: c366020>)

(0 . "XRECORD")

(5 . "229")

(102 . "{ACAD_REACTORS")

(330 . <Entity name: bf309f0>)

(102 . "}")

(100 . "AcDbXrecord")

(330 . <Entity name: bf309f0>)

(1 . "Nazwa filtra")

(1 . "*")

(1 . "*")

(1 . "*")

(70 . 0)

(1 . "*")

(1 . "*")

"===================="

A największym zaskoczeniem dla mnie było to, że: słowo: "ICAD_LAYERFILTER" nie występuje w internecie. ZERO wyników w Google! Nikt nigdy nic nie opublikował o tym słowniku InteliCada w Internecie... aż wierzyć się nie chce!

_VERNUM = "2011.10.30(17176)" (read only)

Odnośnik do komentarza
Udostępnij na innych stronach

Zatem jak mniemam schemat filtrów warstw w ZwCAD ma strukturę taką jak miał AutoCAD w wersji sprzed wersji 2005... bowiem od tego czasu (jak wcześniej zaznaczyłem) w AutoCAD są dwa rodzaje filtrów, i zapisywane są nie (jak wcześniej było) w ACAD_LAYERFILTERS w NamedObjectDictionary, tylko w słowniku ACAD_LAYERFILTERS znajdującym się w ExtensionDictionary tablicy LAYER (obiekt "TABLE"). Poniższa rycina ilustruje tę strukturę (w AutoCAD - filtry w oknie menadzera warstw i podgląd obiektów ExtensionDict warstw):

post-451-0-48571500-1352830931_thumb.png

Słownik ICAD_LAYERFILTER (wydaje się) ma lokalne i marginalne znaczenie, i jak sądzę nikt oprócz jego twórców z niego nie korzysta. Opublikuj jakiś mały malunek (dwg) z tymi filtrami - do "badań" - logika nakazuje mniemać, że w AutoCAD filtry utworzone w ZwCAD widoczne nie będą.

kojacek

Odnośnik do komentarza
Udostępnij na innych stronach

Zamieszczam link do pliku DWG ze zdefiniowanymi dwoma filtrami. W dwóch wersjach dwg'a.

Cudem byłoby gdyby AutoCAD odczytał te filtry ZWcada i odwrotnie.... Ale może gdyby w prost zmienić nazwę ACAD_LAYERFILTERS na ICAD_LAYERFILTER (i odwrotnie) to by się to powiodło.... :)

http://85.89.179.8/dwg.zip (PS. Jak zamieścić plik na tym forum ?)

A jak się w autoCADzie ustawia z poziomu LISPa aktualny filtr??

=2P=

Odnośnik do komentarza
Udostępnij na innych stronach

Rzeczywiście tak jest. AutoCAD "nie widzi" tych filtrów. Zdefiniowane są tak jak się spodziewałem - podobnie jak były definiowane w AutoCAD 8-10 lat temu - w NamedObjectDictionary, a nie ExtensionDictionary obiektu. Z tego co widzę, żaden obiekt rysunku nie ma ExtDict. Ponieważ ten słownik nie może nazywać się ACAD_LAYERFILTERS ze względu na brak zgodności z formatem DWG nazywa się ICAD_LAYERFILTERS. Zdaje się że jest użyteczny tylko w ZwCAD-zie (czyt. jest bezużyteczny wszędzie indziej):

post-451-0-32401100-1352834469.png

kojacek

Odnośnik do komentarza
Udostępnij na innych stronach

Nie dałem za wygraną i udało mi się wymyślić częściowe rozwiązanie mojego problemu. Opiszę poniżej może się komuś przyda, a może ktoś dzięki temu wpadnie jak rozwiązać mój problem w całości.

Dot. ZWcada 2012 bez plusa.

ZWCAD zapisuje nazwę aktualnego filtra w rejestrze:

HKEY_CURRENT_USER\Software\ZWSoft\ZWCAD 2012 Eng\Profiles\LayerDiaFilter

Zmieniając wartość tam zapisaną spowodujemy, że w momencie wyświetlenia okna LAYER ustawiony będzie odpowiedni filtr.

Niestety zmienna ta nie ma bezpośredniego przełożenia na listę rozwijaną Layer w toolbarze. Dopiero po wejściu do okna Layer i kliknięciu OK, zawartość listy dostosowuje się do wybranego filtra wpisanego do rejestru...

=2P=

Odnośnik do komentarza
Udostępnij na innych stronach

Nie dałem za wygraną i udało mi się wymyślić częściowe rozwiązanie mojego problemu. Opiszę poniżej może się komuś przyda, a może ktoś dzięki temu wpadnie jak rozwiązać mój problem w całości.

Dot. ZWcada 2012 bez plusa.

ZWCAD zapisuje nazwę aktualnego filtra w rejestrze:

HKEY_CURRENT_USER\Software\ZWSoft\ZWCAD 2012 Eng\Profiles\LayerDiaFilter

Zmieniając wartość tam zapisaną spowodujemy, że w momencie wyświetlenia okna LAYER ustawiony będzie odpowiedni filtr.

Niestety zmienna ta nie ma bezpośredniego przełożenia na listę rozwijaną Layer w toolbarze. Dopiero po wejściu do okna Layer i kliknięciu OK, zawartość listy dostosowuje się do wybranego filtra wpisanego do rejestru...

=2P=

Jaka to jest wartość - jeśli mozna spytać? Nazwa filtra?

kojacek

Odnośnik do komentarza
Udostępnij na innych stronach

tak, nazwa filtra lub "Show all layers" itp...

Czy dobrze (w takim wypadku) myślę, podpierając się malunkami (które tu uprzednio wstawiłem)... możliwe jest wyświetlenie (lub próba) filtra o nazwie np. 2_TECHNOLOGIA w rysunku w którym są tylko filtry: ARCH_PODST i ARCH_UZUP, lub nie ma żadnych filtrów :?:

kojacek

Odnośnik do komentarza
Udostępnij na innych stronach

Wygląda na to, że zapis w rejestrze dotyczy wszystkich rysunków (otwartych),, a raczej stanu zwcada, czy może dokładniej stanu wybranej opcji w liście rozwijanej w okienku LAYER.

Jeśli w rejestrze dokonamy zmiany wpisując nazwę filtra, którego w danym rysunku nie ma, to ustawiany jest najbliższy filtr.

Przykład:

Mam filtry o nazwach: KKKK i Show all layer (wbudowany)

Jak wpiszę do rejestru nawę "K", ustawi mi się w rysunku filtr KKKK, jeśli np. wpiszę samo "S" ustawi mi się filtr "Show all layer".

Wpis w rejestr oddziaływuje na wszystkie rysunki...

Na 100% ustawiony filtr bieżący nie jest zapisywany w pliku dwg.

Odnośnik do komentarza
Udostępnij na innych stronach

Wygląda na to, że zapis w rejestrze dotyczy wszystkich rysunków (otwartych),, a raczej stanu zwcada, czy może dokładniej stanu wybranej opcji w liście rozwijanej w okienku LAYER.

Jeśli w rejestrze dokonamy zmiany wpisując nazwę filtra, którego w danym rysunku nie ma, to ustawiany jest najbliższy filtr.

Przykład:

Mam filtry o nazwach: KKKK i Show all layer (wbudowany)

Jak wpiszę do rejestru nawę "K", ustawi mi się w rysunku filtr KKKK, jeśli np. wpiszę samo "S" ustawi mi się filtr "Show all layer".

Wpis w rejestr oddziaływuje na wszystkie rysunki...

Na 100% ustawiony filtr bieżący nie jest zapisywany w pliku dwg.

Zważywszy zatem, że warstwy są nierozerwalną częścią każdego dokumentu (rysunku a nie aplikacji ogólnie przecież), wydaje się że ich filtry (czyli pewne ich zbiory logiczne tworzone na podstawie jakiś wspólnych cech) zwane w końcu nawet filtrami warstw, takimiż też powinny być. Model w którym stan ich nie jest zapisywany w rysunku (razem z warstwami których dotyczy), wydaje się być pomysłem absurdalnie bezsensownym. No bo do czego właściwie te "filtry" miały by służyć, w efekcie? Do ręcznego ustawiania za każdym razem?

EDYTA: Opublikuj jakieś 2 rysunki, w których ustalone są identyczne np. 4 filtry warstw, ale w jednym nieżche aktywnym będzie 1, a w drugim 3 filtr, których nazwy podasz. Wprawdzie nie mam ZwCAD-a, ale z ciekawości chcę sprawdzić, czy to gdzieś nie siedzi.

kojacek

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

Chyba się nie zrozumieliśmy.

Musimy rozróżnić dwie rzeczy:

1. definicje filtrów w skład których wchodzi: nazwa filtra oraz parametry filtrowania warstw, takie jak szablon nazwy, kolor, grubość itp.

2. zapisaną informację, który w tym momencie filtr jest aktywny (który ze zbioru tych zdefiniowanych jw.).

Moje główne pytanie na początku wątku dotyczyło punktu 2. Jak się okazuje nazwa aktywnego filtra jest zapisana w w rejestrze, jako odnośnik do definicji. Ale całe definicje opisujące filtry już są w rysunku / w pliku.

Przestawienie wybranego filtra w oknie Layer powoduje zapis w rejestrze nazwy filtra. Jeśli dokonamy zmian w rejestrze "tylnymi drzwiami", czy to z poziomu LISPa, czy programu do edycji rejestru, spowodujemy, że przy ponownym otwarciu okna Layer aktywny będzie inny filtr. Jeśli w rejestr wpiszemy jakieś głupoty ZWCAD jako filtr ustawi filtr określony przez zbliżoną nazwę.

Ponieważ ustawienie aktywnego filtra warstw dotyczy GUI programu, a nie bazy danych rysunku, uważam, że takie rozwiązanie nie jest absurdalne, a jedynie nieoptymalne.

Lepiej by było, gdyby każdy wczytany rysunek posiadał niezależny zapis w rejestrze o ustawionym aktualnym filtrze spośród tych zdefiniowanych w rysunku. Jeszcze lepiej gdyby taki odnośnik do aktualnego filtra zawarty był w samej bazie danych / w pliku DWG. Dzięki temu aktywny filtr byłby taki sam po ponownym otwarciu rysunku.

Jeśli chodzi o porównanie dwóch plików z tym samym zestawem filtrów, ale raz z ustawionym jednym filtrem, raz innym, to właśnie taki test przeprowadziłem na początku. Sprawdziłem oba pliki na poziomie binarnym, a nie bazy danych i są identyczne. Dlatego odnośnika do aktywnego filtra poszukiwałem w zmiennych systemowych a następnie w rejestrze.

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

Chyba się nie zrozumieliśmy.

Musimy rozróżnić dwie rzeczy:

1. definicje filtrów w skład których wchodzi: nazwa filtra oraz parametry filtrowania warstw, takie jak szablon nazwy, kolor, grubość itp.

2. zapisaną informację, który w tym momencie filtr jest aktywny (który ze zbioru tych zdefiniowanych jw.).

[A] Ja to rozumiem. Ale już na początku musimy rodzielić dwie rzeczy. Filtry warstw takie jak są zdefiniowane w natywnym pliku dwg i filtry warstw definiowane przez ZwCAD-a. Okazało się że to dwie różne rzeczy. O ile standardem jest tenże filtr z adesk-owego dwg (i dxf), tak ten z ZwCAD-a filtrem w tym znaczeniu nie jest. Jest poprawnym (i dopuszczalnym) wpisem (słownikiem + XRecord-em), niemniej filtrem warstw (powtarzam jeszcze raz) nie jest.

Moje główne pytanie na początku wątku dotyczyło punktu 2. Jak się okazuje nazwa aktywnego filtra jest zapisana w w rejestrze, jako odnośnik do definicji. Ale całe definicje opisujące filtry już są w rysunku / w pliku.

Z uwagi na [A] - mogłem tego nie wiedzieć, bowiem "filtr" ZwCAD-a nie jest filtrem warstw. Rzekoma 100% zgodność dwg jest zatem mitem. ZwCAD nie widzi filtrów warstw AutoCAD-a, i odwrotnie.

Przestawienie wybranego filtra w oknie Layer powoduje zapis w rejestrze nazwy filtra. Jeśli dokonamy zmian w rejestrze "tylnymi drzwiami", czy to z poziomu LISPa, czy programu do edycji rejestru, spowodujemy, że przy ponownym otwarciu okna Layer aktywny będzie inny filtr. Jeśli w rejestr wpiszemy jakieś głupoty ZWCAD jako filtr ustawi filtr określony przez zbliżoną nazwę.

[C] I to nie ma właśnie sensu. Podstawową cechą filtra warstw jest ich grupowanie w celu manipulowania nimi jako grupą (np. wyświetlanie w oknie). Sens tego widać w możliwości zapisywania tych grup i ich stanów w rysunku.

Ponieważ ustawienie aktywnego filtra warstw dotyczy GUI programu, a nie bazy danych rysunku, uważam, że takie rozwiązanie nie jest absurdalne, a jedynie nieoptymalne.

Lepiej by było, gdyby każdy wczytany rysunek posiadał niezależny zapis w rejestrze o ustawionym aktualnym filtrze spośród tych zdefiniowanych w rysunku. Jeszcze lepiej gdyby taki odnośnik do aktualnego filtra zawarty był w samej bazie danych / w pliku DWG. Dzięki temu aktywny filtr byłby taki sam po ponownym otwarciu rysunku.

[D] Jest absurdalne. Wystarczy sobie wyobrazić że plik w "czasie swego życia" może mieć zmieniane nieskończenie wiele razy nazwy warstw, ich cechy, ich filtry. etc. Sam plik może być zapisywany i kopiowany nieskończenie wiele razy. Nie wspomnę o ilości otwieranych plików na jednym komputerze. Zapisywanie i sledzenie tych informacji... nie jest (uważam) ani dobrym ani mądrym pomysłem.

kojacek

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

[D] Jest absurdalne. Wystarczy sobie wyobrazić że plik w "czasie swego życia" może mieć zmieniane nieskończenie wiele razy nazwy warstw, ich cechy, ich filtry. etc. Sam plik może być zapisywany i kopiowany nieskończenie wiele razy. Nie wspomnę o ilości otwieranych plików na jednym komputerze. Zapisywanie i sledzenie tych informacji... nie jest (uważam) ani dobrym ani mądrym pomysłem.

Tak zapis historii zmian warstw w pliku DWG jest może absurdalny, ale 2P nie chodzi o zapis historii zmian warstw, tylko o zapis nazwy aktywnego (aktualnego) filtra w pliku DWG.

Odnośnik do komentarza
Udostępnij na innych stronach

Tak zapis historii zmian warstw w pliku DWG jest może absurdalny, ale 2P nie chodzi o zapis historii zmian warstw, tylko o zapis nazwy aktywnego (aktualnego) filtra w pliku DWG.

Jak widzę trudno zauważyć zależność filtra warstw od cech warstw. Umówmy się jednak, że zależność taka istnieje. Teraz odpowiedź krótka zatem: W poprawnym pliku dwg mówi o tym wartość 1 kodu 290 danych DXF obiektu typu XRECORD w słowniku "ACLYDICTIONARIES" znajdującego się w ExtensionDictionary obiektu TABLE o nazwie "LAYER". W pliku dwg tworzonym przez ZwCAD filtry warstw w tym znaczeniu nie istnieją.

kojacek

Odnośnik do komentarza
Udostępnij na innych stronach

[A] Ja to rozumiem. Ale już na początku musimy rodzielić dwie rzeczy. Filtry warstw takie jak są zdefiniowane w natywnym pliku dwg i filtry warstw definiowane przez ZwCAD-a. Okazało się że to dwie różne rzeczy. O ile standardem jest tenże filtr z adesk-owego dwg (i dxf), tak ten z ZwCAD-a filtrem w tym znaczeniu nie jest. Jest poprawnym (i dopuszczalnym) wpisem (słownikiem + XRecord-em), niemniej filtrem warstw (powtarzam jeszcze raz) nie jest.

Przede wszystkim trzeba sprecyzować, czy sednem sprawy jest sposób wewnętrznego zapisu określonej funkcjonalności (lub zapisu tej funkcjonalności w pliku na dysku), czy też sposób zrealizowania i działania danej funkcjonalności od strony użytkownika (GUI). Ponieważ mnie jest całkowicie obojętne jak dana funkcjonalność zrealizowana jest np. w autoCADzie od strony wewnętrznej budowy bazy danych (nie zamierzam wracać do autoCADa, a programy piszę tylko dla ZWcada) interesuje mnie głównie struktura wewnętrzna ZWcada. Wcale bym nie rozpaczał, gdyby np. ZWcad działał w oparciu o zupełnie inne założenia wewnętrzne niż to kiedyś opracował autodesk... może nawet bym się z tego cieszył gdyby pewne rozwiązania nie ciągnęły się od lat 80/90... Ale to nie ten temat.

Możliwe, że słowo "filtr warstw" w autocadowym świecie znaczy coś zupełnie innego. Ja rozstałem się z autocadem ok 2004/5r i wtedy warstwy były filtrowane tak jak teraz w ZWcadzie. Filtrowane, tzn dla mnie, wyświetlane/odsiewane w okienku Layer wg określonego wzorca. To pozwala po "odsianiu" operować na grupach warstw nadając im zamierzone parametry. Możliwe, że w AutoCADzie jest to realizowane inaczej od strony użytkownika i GUI. Ale dla mnie to są filtry i sposób zapisu w bazie danych jest sprawą naprawdę drugorzędną. ZWcadowy filtr jest "...poprawnym (i dopuszczalnym) wpisem (słownikiem + XRecord-em), niemniej filtrem warstw (powtarzam jeszcze raz) nie jest."... owszem nie jest, ale raczej w autocadowym rozumieniu filtrów.

Z uwagi na [A] - mogłem tego nie wiedzieć, bowiem "filtr" ZwCAD-a nie jest filtrem warstw. Rzekoma 100% zgodność dwg jest zatem mitem. ZwCAD nie widzi filtrów warstw AutoCAD-a, i odwrotnie.

A czy ktoś w tym wątku wymagał takiej wiedzy? Pomijając ZWcada, nie padła nawet odpowiedź, jak problem zrealizować w autoCADzie. Jak spowodować, żeby w liście warstw na toolbarze wyświetlić tylko określony zestaw warstw? Chyba autoCAD ma jeszcze listę warstw dostępną z okna głównego, jak w starych wersjach? Jak w oknie ustawień warstw wyświetlić tylko określony zestaw warstw? Jak to zrealizować z poziomu LISPa? Z premedytacją w opisie problemu tym razem pominąłem słowo "filtr warstw" skoro oznacza coś innego w autoCAdzie... :)

Odpowiedź jak to zrealizować w autoCADzie, mogłaby dać trop jak to zrobić w ZW.

A 100% zgodność dwg, oczywiście, że jest mitem. Jak może być w pełni zachowana zgodność skoro w acadzie występują funkcjonalności niezrealizowane w ZW i odwrotnie....

Już sama nazwa: ICAD_LAYERFILTER - świadczy o niezgodności.

[C] I to nie ma właśnie sensu. Podstawową cechą filtra warstw jest ich grupowanie w celu manipulowania nimi jako grupą (np. wyświetlanie w oknie). Sens tego widać w możliwości zapisywania tych grup i ich stanów w rysunku.

Cóż... dla mnie to to coś, co jest w ZWcadzie nazywane "przekornie" filtrami warstw właśnie to umożliwia. Szczególnie jeśli dodamy do tego możliwość zapisywania stanów warstw w "Layer States Manager"

[D] Jest absurdalne. Wystarczy sobie wyobrazić że plik w "czasie swego życia" może mieć zmieniane nieskończenie wiele razy nazwy warstw, ich cechy, ich filtry. etc. Sam plik może być zapisywany i kopiowany nieskończenie wiele razy. Nie wspomnę o ilości otwieranych plików na jednym komputerze. Zapisywanie i sledzenie tych informacji... nie jest (uważam) ani dobrym ani mądrym pomysłem.

Prawdę powiedziawszy nie widzę związku co do sprawy ma kopiowanie i zapisywanie plików... przecież filtry nie giną, nie mieszają się i są zapisywane....

Może jednak uruchomię AutoCADa po tylu latach i sprawdzę O CO CHODZI???

Pozdrawiam

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

Jak widzę trudno zauważyć zależność filtra warstw od cech warstw. Umówmy się jednak, że zależność taka istnieje. Teraz odpowiedź krótka zatem: W poprawnym pliku dwg mówi o tym wartość 1 kodu 290 danych DXF obiektu typu XRECORD w słowniku "ACLYDICTIONARIES" znajdującego się w ExtensionDictionary obiektu TABLE o nazwie "LAYER". W pliku dwg tworzonym przez ZwCAD filtry warstw w tym znaczeniu nie istnieją.

O! Jest trop :) Jeśli to są filtry w autoCADzie, to co to jest w autocadzie coś co jest w słowniku ma w swoje strukturze nazwę: ACAD_LAYERFILTER i ludzie na różnych forach chcą to kasować?

Odnośnik do komentarza
Udostępnij na innych stronach

Dyskusja zaczyna być jałowa. Dyskusja o ideologii używania czy nieużywania tego czy innego programu mnie nie pociąga. Jakieś tam przekonanie na temat swojej wiedzy o (A/V)LISP-ie, budowy struktury rysunkowej bazy danych DXF dokumentu AutoCAD-a, mam, być może przesadzone. Słysząc o 100% zgodności dwg ZwCAD-a z AutoCAD-em, także głębokiej zgodności implementacji LISP-a w tych dwóch programach, spodziewałem się że te rzeczy są zgodne, jak ma to miejsce w przypadku np. warstw, rodzajów linii czy stylów tekstu. Stąd też zabrałem głos na ten temat, widać niepotrzebnie. Choć nauka jakaś z tego płynie: choćby to że kruszy tem mit 100% zgodności.

kojacek

Edytowane przez kojacek
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