• 1

DRAWORDER dla warstw (i bloków)


Chris
 Share

Question

Witam,

proponuję wprowadzenie funkcji DRAWORDER dla Warstw i bloków. Myślę, że funkcja mogłaby być bardzo przydatna jeśli chodzi o rysunki, w których mamy elementy pierwszorzędne i pomocnicze lub znaczenie ma kolejność wyświetlania niektórych elementów. Wiem, że można zblokować warstwę lub zamrozić, ale bardziej myślę tutaj o kolejności wyświetlania. Zamiast klikać za każdym razem w DRAWORDER możliwe byłoby wybranie dla warstwy (lub bloku), że ma być ciągle na górze, lub na dole (bring to front/send to back). Myślę, że dość proste rozwiązanie do wprowadzenia (taką mam nadzieję), a jednak mogłoby znacznie poprawić komfort pracy.

Krótki przykład: Tworzę blok (blok dynamiczny) np. drzwi lub okien. Wstawiam na rysunek. W przypadku modyfikacji ściany na styku bloku (np. dorysuję ścianę lub zmodyfikuję ją) to często blok zakrywany jest w tym zakresie, w którym pojawiły się nowe elementy rysunku. Gdyby w bloku wbudowana była funkcja DRAWORDER (bring to front) to blok sam automatycznie przenoszony byłby przed dorysowane elementy.
 

 

 

Link to comment
Share on other sites

17 answers to this question

Recommended Posts

  • 0

Ciekawa funkcja.

Proszę nam przybliżyć jak miałaby wyglądać deklaracja, która warstwa ma być na górze?

Myśleliśmy o otworzeniu okna, które wyświetliłoby listę warstw i za pomocą strzałek moglibyśmy zmieniać kolejność wyświetlania warstw.

Na podstawie tych ustawień specjalna funkcja ustawiłaby kolejność wyświetlania w całym rysunku.

Link to comment
Share on other sites

  • 0

Witam,

powyżej opisana przeze mnie funkcja DRAWORDER dla warstw byłaby ustawiana w oknie warstw (Layer Properties Manager), jako kolejna z opcji. W tym oknie jest np. STATUS/NAME/ON/FREEZE/LOCK/COLOR/LINETYPE/LINEWEIGHT/PLOTSTYLE/PLOT/NEW VIEVPORT/DESCRIPTION - do tych opcji dodane zostałoby DRAWORDER FOR LAYER i np. wartość od 1 do 9, albo od 1 do 99 i ewentualnie OFF, czyli funkcja nie aktywna dla danej warstwy. Warstwy, które miałyby nadany priorytet (1 jako najważniejsza/pierwsza i kolejno 2, 3, 4 i 5). Wyświetlanie warstw zależałoby od nadanej wartości. Tutaj widzę pewien problem, a raczej konflikt w przypadku warstw, które mają ten sam priorytet. Czyli zakładam, że mogą wystąpić warstwy o tej samym priorytecie... hmm... do przemyślenia. Gdyby wystąpiły takie warstwy, to co wtedy decyduje??? Albo założyć, że dana wartość priorytetu może wystąpić tylko raz (tzn. jeśli ustawimy wartość 1 /jeden/ dla jakiejś warstwy, to następna może mieć 2 lub inny numer). W tym przypadku byłoby dużo łatwiej. Mamy ustawiony priorytet wyświetlania i wiadomo, które warstwy będą nad którymi... Jeszcze jedna kwestia, która decydowałaby, czy funkcja działa. Wprowadzenie zmiennej LAYERDRAWORDER (przykładowa nazwa), która przyjmowałaby wartości 0 lub 1 (OFF lub ON).
 

Jeśli wprowadzona byłaby kolejność warstw to zastanawiam się, czy kolejność wyświetlania dla bloków ma sens... OK, przyjmując, że robimy taką funkcję tyko dla bloków...
W tym przypadku dodałbym funkcję DRAWORDER w oknie definiowania bloku. Tutaj albo priorytet jak powyżej dla warstw (numeracja), albo prościej włączenie opcji ptaszkiem i wybranie BRING TO FRONT/SEND TO BACK. Blok zawsze byłby wyświetlany nad innymi elementami rysunku lub przesuwany na spód... tutaj powstaje problem... co gdy dwa bloki o tym samym ustawieniu spotkają się na rysunku??? hmm... chyba tak jak wcześniej, czyli ten, który został dodany później jest nad tym, który był wcześniej... do przemyślenia....

 

Mam nadzieję, że choć trochę udało mi się opisać zagadnienie, które wskazałem tworząc propozycję nowej funkcjonalności programu.

Chętnie poznam opinie innych użytkowników programów CAD.

Link to comment
Share on other sites

  • 0

Pomysł w mojej opinii chybiony, wynikający z niezrozumienia działania mechanizmu DRAWORDER. Po pierwsze, DRAWORDER dotyczy entycji, czyli graficznych obiektów rysunkowych, warstwy zaś są obiektami niegraficznymi. Nie można ich mieszać ze względu na różnice ich właściwości. Po drugie, opisywana sytuacja nie bierze pod uwagę konfliktu pomiędzy proponowanym a istniejącym DRAWORDER. To tworzyłoby większy chaos, niż korzystanie ze zwykłego DRAWORDER, czy nawet nie korzystanie z niego. Po trzecie trzeba również rozróżnić pojęcia blok (definicja bloku), a jego odniesienie (wstawienie). To pierwsze jest obiektem niegraficznym, to drugie (INSERT) zaś graficznym. Dla niego normalny DRAWORDER działa tak jak dla innych entycji. Na koniec - DRAWORDER nie tworzy i nie zmienia położenia obiektów. To jedynie ich kolejność wyświetlania

Link to comment
Share on other sites

  • 0

Zasadniczo zgadzam się z @kojacek , dlatego choć nie pracuję w 2D ( łownie 3D które ma trochę inne problemy z przesłanianiem widoczności ) proponuję spróbować inne rozwiązanie : 

 Wejść 'minimalnie w 3D'  tzn. nadawać współrzędne 'z'  obiektów  zależnie od potrzeby widoczności  ( Z> 0  pierwszoplanowym) ( tło , Z< 0 tłu ). 
Powstanie coś w stylu warstw opartych właśnie o  współrzedną 'z' .

Zwykłym ORBIT możesz sprawdzić, który jest wyżej / niżej jednym rzutem oka. W blokach także to można zrobić.
Potem w widoku Top View zasłanianie powinno być prawidłowe. 

DRAWORDER i wiele funkcji właściwie wywodzi się z próby rozwiązania problemu kolejności rysowania obiektów w czasach gdzie ACAD'a nie mógł w ogole (ew. lub w sposób naciagany)  pracować w 3D tzn. obiekty miały tylko współrzedne X,Y ew. odległośc od plany OXY.

PS1: Niezależnie od tego czy to da efekty , proponuje poczytać w helpie o ustawieniach zmiennych DRAWORDERCTL , SORTENTS  i samym DRAWORDER.

Ja czasami mam problem odwrotny - z selekcjami w 3D - czasami najpierw łapie obiekt dalszy. Mimo eksperymentów z powyższymi zmiennymi zawsze z duzymi modelami był jakiś problem.

W 'czystych aplikacjach 3D nie ma takiego problemu.

Dla mnie w ZWCAD przy pracy w 3D powinna być przy selekcjach możliwość całkowitej dezaktywacji wpływu DRAWORDERCTL , SORTENTS  i powinien działać wyłącznie algorytm oparty o bufor głębokosci 'z' w lokalnym układzie współrzędnych  (tak to rozwiązują akceleratory w kartach graficznych 3D aby poprawne wyświetlanie złożone sceny z np. 100K  elementów .

J.
 

Link to comment
Share on other sites

  • 0
3 godziny temu, JasW napisał:

(...) DRAWORDER i wiele funkcji właściwie wywodzi się z próby rozwiązania problemu kolejności rysowania obiektów w czasach gdzie ACAD'a nie mógł w ogole (ew. lub w sposób naciagany)  pracować w 3D tzn. obiekty miały tylko współrzedne X,Y ew. odległośc od plany OXY (...)

Bzdura. Obsługa obiektów w przestrzeni trójwymiarowej datuje się od wersji AutoCAD 2.1 (Release 6 - maj 1985). Polecenie DRAWORDER jest zaś dostępne od wersji AutoCAD R14 (luty 1997). Zatem nie ma i nie było tu żadnej próby rozwiązywania czegokolwiek w 3D.

Powtórzę raz jeszcze. W AutoCAD obiekty wyświetlane są domyślnie w kolejności tworzenia (nowy "przykrywa" stary), chyba że zostanie zastosowany DRAWORDER właśnie. I dotyczy to tylko kolejności wyświetlania, a nie umiejscowienia w przestrzeni. Dotyczy tylko obiektów graficznych, a nie warstw, definicji bloków, słowników, stylów tekstu, wymiarowania itp. To ma i miało od początku zastosowanie do określenia porządku wyświetlania obiektów w rzeczywistości się pokrywających (np. aby obwiednia obiektu "nakładała się" na jego kreskowanie, teksty opisujące były "na wierzchu" linii itp.) 

 

Link to comment
Share on other sites

  • 0

@kojacek: może trochę elastyczności w interpretacji wypowiedzi innych bo  nie rozumiem dlaczego dyskredytujesz  akapit w/g mnie jednak niesprzeczny z historią wchodzenia Autocad w 3D:
a) Jednak do wersji Autocad 2.0 nie było obsługi 3D (to ważne bo wiele koncepcji Autocad z lat 1982..1985 przetrwało do dziś )  
b) Od wersji 2.1 była ale to właśnie dotyczy spójnika  "...LUB (ew. lub w sposób naciagany) "
   To akcentuję bo to 3d wdrażano drobnymi krokami i to ciązy także do dziś.
    Widać po specyfice poleceń np. Polyline ( jest parametr Elevation ale to nie to samo co 'z' )

Kiedy pojawiały sie polecenia i opcje dot. 3D mozna domniemać np. tu
( http://autodesk.blogs.com/between_the_lines/autocad-release-history.html )  


@Chris:
Nie mam zamiaru dyskutować o historii,  interesujący wydał mi się bardziej główny wątek dlatego zabrałem głos:
Myślę że dla merytorycznej dyskusji ważniejsza jest tu zmienna DRAWORDERCTL.

Moja propozycja obejścia problemów w 2D (OXY) dotyczy spróbowania używania współrzędnej 'z' do rozstrzygania kolejności tam gdzie DRAWORDER 'wymiękł'
Co więcej to nic oryginalnego została ona zastosowana w innych typach proramow np. DTP : i HTML ( arkusze stylów CSS) np: https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Positioning/Understanding_z_index/Stacking_context_example_1

 

Link to comment
Share on other sites

  • 0

Wydaje się, że w przestrzeni 3D też można zdefiniować nieskończenie wiele nakładających się prostych, które w bazie będą oddzielnymi obiektami. A zatem bzdura i nie ma co się obrażać.

Próby rozwiązania problemu kolejności rysowania obiektów nigdy nie było. Wystarczy tylko znać język polski i zastanowić się nad określeniem "próba rozwiązania kolejności rysowania obiektów". Kto by miał ją podejmować i w jakim celu. Chcę narysować najpierw obiekt A a potem obiekt B a potem obiekt C itd.  Uda mi się to. Nawet każdy z tych obiektów w przestrzeni będzie opisany tą samą funkcją ;). W zasadzie pozostaje problem kolejności ich wyświetlenia. Albo jeszcze inaczej. Zmuszenie programu żeby ostatecznie narysował na ekranie określony z tych obiektów. 

 

Link to comment
Share on other sites

  • 0

1. Jeśli prośba o elastyczność, to mam nadzieję że zgodzimy się do pewnych faktów:
a) AutoCAD obsługuje 3D od 1985 roku.
b) Draworder jest dostępny od 1997, ale nie ma nic wspólnego z 3D.

2. Teraz znów o DRAWORDER:
Mówiąc cały czas o DRAWORDER, musimy mieć na uwadze że nie ma on nic wspólnego z modelowaniem czy rysowaniem w 3D. Zatem dywagacje na temat współrzędnej Z są bezcelowe - DRAWORDER nie zmienia położenia obiektów w przestrzeni. Mało tego - położenie obiektów w przestrzeni 3D nie determinuje kolejności ich wyświetlania. Można w prosty sposób przekonać się że obiekty o mniejszej wspórzędnej Z "przykrywają" obiekty znajdujące się w przestrzeni "wyżej". 
I tego rodzaju "problemy" rozwiązuje właśnie DRAWORDER. Powstał na zapotrzebowanie wizualizacji projektu i tworzenia grafiki prezentacyjnej. Steruje porządkiem wyświetlania obiektów, a nie ich położeniem w przestrzeni.

3. Kulą w płot jest argumentacja dotycząca parametru Elevation dla polilinii, mająca wyjaśniać domniemane "wdrażanie 3D drobnymi krokami" i "ciążenia tego do dziś". Proszę o zapoznanie się ze strukturą danych obiektów LWPOLYLINE i POLYLINE.

4. Całkowitym nieporozumieniem zaś jest przytaczanie opisu strony html. Choć pozornie ma również związek z kolejnością wyświetlania, dotyczy jednak zupełnie czegoś innego.

Link to comment
Share on other sites

  • 0

@Kojacku .

1b) No cóż może fakty do kolegi przemowią? :
   DRAWORDER  niestety MA jednak wpływających na pracę w 3D.  Kolega zapewne chciał napisać , że nie powinien mieć....

  Wystarczy  popracować trochę w  Zwcad/Autocad z większym projektem 3D . DRAWORDER ma wpływ i to zły
  Selekcja obiektu 3D po użyciu ORBIT wykorzystuje niestety DRAWORDER co jest bez sensu.. Prowadzi to do oczywistych problemów i co do zasady jest niedoróbką np. w ZWCAD 2018 do dziś)  bo klikając na widoku z lewej strony możemy zamiast lewej ściany dostać w selekcji obiekt zasłonięty prawej ściany ....
Używanie SHIFT+SPACEBAR przy skomplikowanych scenach także czesto niewiele wnosi.

To jest właśnie scheda w pracy w 3D wynikający z orientacji pod pracę 2D.
Jak powinno być? - w pierwszej kolejności selekcja wg kolejności wg bufora głębokości (z-order) bieżącego widoku. To oczywiste dla każdej aplikacji zorientowanej głownie na pracę w 3D ( Inventor/SolidEdge etc )  lub osoby która pisze aplikacje pod DirectX czy OpenGL.

2,3)
> Proszę o zapoznanie się ze strukturą danych obiektów LWPOLYLINE i POLYLINE. 

  Ciekawe, tak się składa, że znam te komendy nie tylko jako użytkownik ale także jako programista (z poziomu API). Znam także możliwości kolejnych 20..30 obiektów .
  To pozwala mi wypowiadać się co do schedy i historii Autocad (API  od 2002 do dziś) .  
  Dlatego też dziwię się trochę koledze dlaczego  zapomniał o dodaniu  do obiektywnego  porównania - trzecim typie polilinii :  "3D POLYLINE"  .   
   Jest w nim lista verteksów x/y/z:3D  a nie jak w POLYLINE i LWPOLYLINE lista verteksow 2D + Elevation.
   Czy 3dPOLYLINE  było w wersji 2.1 ?  - NIE! 
   To dla mnie oczywisty przykład ewolucji i optymalizacji ( używanie zwykłych  POLYLINE 2D do projektów 3D ma znaczne ograniczenia) 
 
4) Kolego,  nie wiem w czym ci uchybiłem, może jakąś świętość Twoją obraziłem.ale...używanie fraz typu: nieporozumienie, bzdura, kula w płot to mało elegancka metoda dyskusji zakładająca, że jesteś alfą i omegą....    Gdy kogoś nie rozumiemy nie oznacza to jeszcze, że ten ktoś nie może mieć racji.... 

   Czy kolega zastanowił się co mam na myśli używając pojęcia z-bufora ?
    Jeśli nie,  to w rewanżu  proponuję zapoznanie/przypomnienie sobie  dwóch algorytmów określania widoczności w grafice 3D :
     a) współczesnej - sprzętowej opartej o  'z' bufor głębokości.
     b) historycznej - programowej opartej o algorytmy linii/płaszczyzny zasłoniętej'   ( gdy karty grafiki ni emiały akceleratorów 3D) 

    Zaręczam, to pozwala zrozumieć większość  moich sugestii i refleksji  dot. ewolucji rozwiązań 3D w kernelu AutoCAD .
     Także nadal podtrzymuję za pozyteczny  przykład CSS z parametrem  "z-index"   . 

Na koniec może trochę nieskromnie  dodam:

Grafiką 2D, 3D,  systemami CAD/CAE zajmuję się chyba już 35 lat,
pozwala mi to wyrobić sobie pewne pojecie co do możliwości i ograniczeń takich narzędzia jak Autocad, ZwCAD oraz ich interfejsy API.
W tym wątku w tematach innych niż pierwszy post Chrisa nie będę się już wypowiadał bo wątek meandruje za bardzo w kierunku Offtopic.

Pozdrawiam,
J.



 

Link to comment
Share on other sites

  • 0

Dzień dobry,

weekend nieobecności na forum i taki szum...

Postaram się krótko wyjaśnić pomysł nowej funkcji. Otóż często rysując mam (pewnie nie tylko ja) problem z graficznym porządkiem wyświetlania obiektów. Przesyłając plik dalej często, gęsto zapomnę świadomie lub nie nadać warstwom odpowiednią kolejność wyświetlania. Inny użytkownik lub nawet ja sam po dłuższym rozbracie z danym plikiem dwg chciałbym aby warstwy, na których zależy mi wyświetlane były w pliku w taki sposób, jak to sobie ustawiłem (czyli nadałem im priorytet i nawet jeśli dorysuję inną warstwę to nie muszę klikać za każdym razem w ikonkę lub wywoływać komendę skrótem). Możliwość wcześniejszego zdefiniowania porządku wyświetlania przyspieszyłaby sprawę (zazwyczaj dotyczy to kilku obiektów w pliku). Przy dużej liczbie wstawianych obiektów nie musiałbym pilnować, czy obiekt jest nad czy pod innym obiektem.

Do użytkownika @kojacek - tak. wiem, że porządek wyświetlania dotyczy tylko obiektów graficznych i nie służy niczemu innemu niż porządkowi wyświetlania obiektów w pliku dwg. A jednak często spotykam się z problemem, że obiekty, na których zależy mi (nam) są przekryte i trzeba je przenosić przed obiekty zakrywające. Nie zawsze jest możliwość rysowania obiektów, w takiej kolejności, jak byśmy sobie tego życzyli... Gdyby była możliwość ustawania takiej kolejności dla warstw lub bloków to mogłoby to przyspieszyć pracę wielu osobom. Odnosząc się do Pańskiej uwagi, że pomysł jest chybiony, bo warstwy to obiekty niegraficzne - OK, zrozumiałem. A czy obiekty graficzne nie są przypisane do warstw? Na jakiej zasadzie zatem działa transparentność warstwy w AC? Przyznaję się, że nie znam się na programowaniu i w kwestii znajomości programu od strony kodu jestem totalnie zielony (jestem laikiem, ale nie ignorantem - nie mylić pojęć). Wskazałem problem, który do dłuższego czasu nie daje mi spokoju. Liczę, na konstruktywną krytykę i polemikę na argumenty a nie przerzucanie się swoimi racjami i udowadnianie innym, że ich "wizja świata" jest totalnie mylna...

Zdaję sobie sprawę, że zagadnienie nie jest proste i jest bardzo wiele zmiennych, ale nie takie problemy udało się rozwiązać... :-))
Jestem "tylko użytkownikiem programu CAD", dlatego jako użytkownik wskazałem problem, który może mógłby zostać inaczej zdefiniowany w programie CAD, żeby ułatwić choć trochę pracę.

 

Link to comment
Share on other sites

  • 0

@Chris:,
1. Może  wrzucisz  jakis prosty DWG  + screenshot w którym pokażesz złe przesłanianie. 
2.  Może jako rozwiązanie  wystarczy właśnie 'trik'  jaki podałem w pierwszym moim poście. Dla złośliwych obiektów ustawienie Elevation lub ('z') dla obietów  =-1 albo +1
     To działa dla obiektów mających powierzchnie (np. 3d Face) , ale dla drutowych LINE/POLYLINE także powinno działać. Jeśli nie zadziała to dla mnie ewidentny BUG do załatania w ZWSOFT. 
Uwaga:  Ważne: Do testów Użyj Shade mode innych niż wireframe  2D/3D. W trybach wireframe zapewne nie działa wspomaganie rozstrzygania o kolejności przez  z-bufor ).
 
Używając Orbit lub rzutów innych niż TOP  będziesz widział i mógł wizualnie kontrolować co jest na górze co jest na dole. Prawdopodobnie nawet bez dotykania DRAWORDER. 
Pozdrawiam,

J.

Edited by JasW
Link to comment
Share on other sites

  • 0

>Trik raczej nie działa

A  czy włączył Pan   Tryb Shade  np. Hidden  ?

U mnie działa bez pudła na każdym Shade <> wireframe 2d i 3d  !  

Niżej screeny z aktywnym Orbit choć oczywiście finalnie w rzucie TOP także kolejność powinna wyglądać poprawnie.  

ShadeHidden.jpg

ShadeWireframe.jpg

TestPrzeslaniania.dwg

Edited by JasW
Link to comment
Share on other sites

  • 0

myślę że twórce zapytania po części zadowolił by mechanizm używany przez oprogr rodzyny Bentleya. Tam jest mozliwość "pozycjonowania warstw", co jest bardzo wygodne.

zakres jest od -500 do +500 więc jest 1000 możliwości ustawienia warstw. Działa równiez rodzaj "draworder", tj bring to front, ale nadrzędnym jest ustawienie priorytetu warstw.

Jak coś ma pozycję -100 a reszta 0, to warstwa ta zawsze bedzie się znajdował nizej niz pozostałe.

analog rozwiązanie jest dla kolejności  i pozycjonowania podpinanych xrefów.

Na bloki nie ma typowo "blokowego " rozwiązania, ale tu też działa pozycjonowanie warstw lub ustawienie w bloku odpowiedniej kolejności wyświetlania elementów..

tego (m. inn.) mi zawsze brakowało w rozwiązaniach cadowskich..

edit: ta kolumna obok po prawej z okragłą ikonka to ustawienia przezroczystości warstwy (postulowane w innym temacie) analob można tez dla xrefów oraz rastrów.. tez przeze mnie z uwielbieniem używane. Jedyny mankament że nie da się tej przzroczystosci z wiadomych powodów przenieść do wydruku numerycznego, drukowanie przezroczysttości tylko w opcji druku do rastra..

image.thumb.png.6078ee49350fe29acb0daedd8a850a67.png

Edited by alf
Link to comment
Share on other sites

  • 0
7 minut temu, alf napisał:

myślę że twórce zapytania po części zadowolił by mechanizm używany przez oprogr rodzyny Bentleya. Tam jest mozliwość "pozycjonowania warstw", co jest bardzo wygodne.

zakres jest od -500 do +500 więc jest 1000 możliwości ustawienia warstw. Działa równiez rodzaj "draworder", tj bring to front, ale nadrzędnym jest ustawienie priorytetu warstw.

Jak coś ma pozycję -100 a reszta 0, to warstwa ta zawsze bedzie się znajdował nizej niz pozostałe

Witam,

dokładnie coś takiego miałem na myśli. Bez zagłębiania się w szczegóły techniczne, zależałoby mi, żeby ustawić kolejność wyświetlania np. warstw i nie musieć używać DRAWORDER, albo przynajmniej ograniczyć częstotliwość użycia... :)
Pozdrawiam

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
Answer this question...

×   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...
 Share