ZWCAD - synchroniczne przesuwanie (pan), zoomowanie w 2 rzutniach (plikach)


Rekomendowane odpowiedzi

Opublikowano

Czy istnieje jakaś funkcja, skrypt, program pozwalający na synchroniczne przesuwanie (zoomowanie) na dwóch rzutniach jednocześnie ?
W samym AutoCadzie nie udało mi się odnaleźć czegoś takiego. Istnieją natomiast aplikacje, których zainstalowanie w Autocadzie pozwala na taką funkcjonalność - poniżej podaje przykład.

https://apps.autodesk.com/ACD/en/Detail/Index?id=2788892389049910944&appLang=en&os=Win32_64

Chodzi mi o działanie takiej funkcji w "czasie rzeczywistym". 
Napisałem sobie procedurę w lispie, której wywołanie pozwala na takie działanie czyli wyświetlenie w każdym oknie tego samego widoku lub w jednym z okien widoku przesuniętego po współrzędnych X (lub Y) o jakąś wartość. Wszystko to jednak nie dzieje się w czasie rzeczywistym - aby użyć skryptu należy skończyć (przerwać) wykonywane polecenie.

Opublikowano

Nie spotkałem się z takim rozwiązaniem.

Do czego może się ono przydać?

Aplikacja, która znajduje się pod linkiem pozwala (jeśli dobrze rozumiem) na otwarcie dwóch plików dwg (raczej nie rzutni).

Na filmie otwierają ten sam plik dwg. Myślę, że większe zastosowanie takiego mechanizmu byłoby przy porównywaniu dwóch osobnych plików.

Wtedy w dwóch plikach dwg możemy patrzeć na ten sam obszar rysunkowy.

Opublikowano
  W dniu 4.11.2024 o 09:02, dmatusz3 napisał:

Nie spotkałem się z takim rozwiązaniem.

Rozwiń  

Ja też nie, chociaż już od paru lat zastanawiam się dlaczego nie ma takiej funkcjonalności. 

  W dniu 4.11.2024 o 09:02, dmatusz3 napisał:

Do czego może się ono przydać?

Rozwiń  

Do jednoczesnego podglądania np. rzutów kondygnacji "0" i "+1".
Działając w jednym oknie (rzutni) na kondygnacji niższej chciałbym mieć podgląd co jest na kondygnacji wyższej.
Uprzedzając od razu pomysły i rady - wykorzystuje wiele sposobów na pracę na wielu kondygnacjach, począwszy od xrefów po nakładanie rzutów itp.

  W dniu 4.11.2024 o 09:02, dmatusz3 napisał:

Aplikacja, która znajduje się pod linkiem pozwala (jeśli dobrze rozumiem) na otwarcie dwóch plików dwg (raczej nie rzutni).

Rozwiń  

Mam tego pełną świadomość i wkleiłem to tylko po to, aby moje pytanie było lepiej zrozumiane.

  W dniu 4.11.2024 o 09:02, dmatusz3 napisał:

Na filmie otwierają ten sam plik dwg. Myślę, że większe zastosowanie takiego mechanizmu byłoby przy porównywaniu dwóch osobnych plików.

Wtedy w dwóch plikach dwg możemy patrzeć na ten sam obszar rysunkowy.

Rozwiń  

Zgodzę się z Panem gdy np. rzuty branżowe są rysowane każde na osobnym rysunku. 
Czasami jednak lepiej pracuje się, gdy ja swoje rysunki robię na jednym pliku - stąd pytanie o rzutnie.

Przerobiliśmy w biurze prace z rzutami na różny sposób - teraz padł pomysł na taki sposób pracy.

Opublikowano
  W dniu 4.11.2024 o 09:38, BKW napisał:

Do jednoczesnego podglądania np. rzutów kondygnacji "0" i "+1".

Rozwiń  

Ten skrypt z linku powoduje, że widzielibyśmy dokładnie taki sam fragment rysunku w rzutniach. Czyli nie możemy mieć różnych kondygnacji.

Jeśli mamy widzieć różne kondygnacje, to oznacza że skrypt nie ma pokazywać tego samego fragmentu, tylko przesuwać i zoomować o tę samą wartość?

Np. na początku ustawiamy 2 rzutnie - na jednej pierwsza kondygnacja, na drugiej druga kondygnacja. Wtedy po włączeniu synchronizacji przesuwalibyśmy widok o tę samą wartość, ale widoczne byłby różne kondygnacje.

Nie wiem czy dobrze to interpretuje.

Opublikowano
  W dniu 4.11.2024 o 09:38, BKW napisał:

Do jednoczesnego podglądania np. rzutów kondygnacji "0" i "+1".

Rozwiń  

Powinienem tutaj dodać - "przesuniętych względem siebie na rysunku o jakąś wartość w poziomie lub pionie" - wtedy wszystko byłoby jasne.

  W dniu 4.11.2024 o 10:26, dmatusz3 napisał:

Ten skrypt z linku powoduje, że widzielibyśmy dokładnie taki sam fragment rysunku w rzutniach. Czyli nie możemy mieć różnych kondygnacji.

Rozwiń  

Zgadza się - mój błąd w opisaniu funkcji. Powyżej jest informacja czego zabrakło w moim opisie.

  W dniu 4.11.2024 o 10:26, dmatusz3 napisał:

Jeśli mamy widzieć różne kondygnacje, to oznacza że skrypt nie ma pokazywać tego samego fragmentu, tylko przesuwać i zoomować o tę samą wartość?

Rozwiń  

Dokładnie tak

  W dniu 4.11.2024 o 10:26, dmatusz3 napisał:

Np. na początku ustawiamy 2 rzutnie - na jednej pierwsza kondygnacja, na drugiej druga kondygnacja. Wtedy po włączeniu synchronizacji przesuwalibyśmy widok o tę samą wartość, ale widoczne byłby różne kondygnacje.

Nie wiem czy dobrze to interpretuje.

Rozwiń  

Bardzo dobrze Pan to interpretuje.

Ogólnie chodzi o to co opisał Pan powyżej. Nie ma znaczenia co jest na jednej i drugiej rzutni. Chodzi o to, żeby po włączeniu funkcji synchronizacji widok na jednej i drugiej rzutni przesuwał się synchronicznie oraz powiększał się również synchronicznie.

Opublikowano

Poniżej wklejam na szybko napisany fragment kodu lisp, który pozwala na wykonanie tego o czym piszę powyżej, ale nie w czasie rzeczywistym.
Ja przypisałem sobie to polecenia skrót klawiaturowy, dzięki czemu całkiem sprawnie ustawiam na dwóch rzutniach to co chcę uzyskać.
Kod oczywiście trzeba "owarunkować" itp.

  Cytat

(DEFUN C:-+ ( / px) 
  (setq px (getvar "USERR1"))
    (if px 
      (setq px (getreal (strcat "\nPodaj wartość przesunięcia POZIOMEGO X <" (rtos (getvar "USERR1") 2 2) ">: ")))
      (setq px 0)
    )
   (setvar "USERR1" px)
)

(DEFUN C:zsaa ( / c h zasosnap px c1)
  (setvar "CVPORT" 2)
  (setq c (getvar "viewctr")
        h (getvar "viewsize")
        zasosnap (getvar "OSMODE")
        px (getvar "USERR1")  
  )
  (setvar "OSMODE" 0)
  (setvar "CVPORT" 3)
  (setq c1 (list (+ (car c) px)(car (cdr c))))

  (command "_zoom" "_c" c1 h)
  (setvar "OSMODE" zasosnap)
  (setvar "CVPORT" 2)
  
  (princ (strcat "\nViewctr: " (rtos (car c) 2 2) " , " (rtos (car (cdr c)) 2 2) "   -    " (rtos (car c1) 2 2) " , " (rtos (car (cdr c1)) 2 2)))
  (princ (strcat "\nViewsize: " (rtos h 2 2) "   -    " (rtos h 2 2)))
  (princ)

)

Rozwiń  

 

Opublikowano

Po wstępnym rozeznaniu doszliśmy do wniosku, że zrobienie takiego Lispa będzie raczej niemożliwe.

Spróbujemy to zrobić w C#.

Mam jeszcze pytania: 

  • czy wystarczające będą 2 rzutnie?
  • co będzie się działo jak będziemy przełączać się pomiędzy rzutniami?

 

 

Opublikowano
  W dniu 5.11.2024 o 08:42, dmatusz3 napisał:

Po wstępnym rozeznaniu doszliśmy do wniosku, że zrobienie takiego Lispa będzie raczej niemożliwe.

Rozwiń  

Dziękuję za zainteresowanie. Byłem pewny na 99%, że takiej funkcjonalności nie da się uzyskać za pomocą LISPa.
Chociaż tak na prawdę patrząc na procedury jakie piszą użytkownicy programów CAD (chociażby Kojacek lub Lee Mac) zawsze zostaje ten 1% ...

  W dniu 5.11.2024 o 08:42, dmatusz3 napisał:

czy wystarczające będą 2 rzutnie?

Rozwiń  

Mi wystarczą w zupełności. Nie śmiałbym prosić o więcej.
Ogólnie, z użytkowego pkt widzenia pewnie maksymalnie 4 by wystarczyły (chociażby z uwagi na wielkość monitorów - im więcej rzutni, tym mniejsze okno i mniej szczegółowy ogląd na to co się rysuje i na co się patrzy). Oczywiście to moje zdanie.

  W dniu 5.11.2024 o 08:42, dmatusz3 napisał:

co będzie się działo jak będziemy przełączać się pomiędzy rzutniami?

Rozwiń  

Nie do końca wiem o co Pan pyta.
Jeżeli dobrze rozumiem to chyba najlepszym rozwiązaniem byłoby, gdyby w momencie przejścia na drugą rzutnię ta pierwsza zaczęłaby reagować tak samo jak ta druga przed jej aktywacją.
 

Oczywiście wszelkie inne pomysły, sposoby działania itp. itd. będą jak najbardziej mile widziane

Opublikowano

Dziękujemy za uznanie :)

Oto skrypt do załadowania do synchronizacji widoków w rzutni w przestrzeni modelu  ViewChanged.dllPobieranie informacji ...

Bibliotekę trzeba załadować poleceniem netload, uprzednio odblokowując plik .dll.

image.png

 

Po załadowaniu pliku ViewChanged.dll ZWCAD wyświetli komunikat z dostępną listą poleceń,

image.png

czyli dostępne są 2 nowe polecenia:

  • VIEWSYNCHROSTART - włącza synchronizacje,
  • VIEWSYNCHROSTOP - wyłącza synchronizacje.
     

Skrypt działa w taki sposób, że przesuwanie widoku w rzutniach jest ustawione względem pozycji początkowej, natomiast zoom jest jednakowy.

image.gif

Opublikowano

Super !!!
Skrypt działa.
Niestety nie dane mi (nam) będzie go dogłębnie przetestować, gdyż posiadamy ZWCADa w wersji 2024.
Ale szacunek za ekspresową pomoc i bardzo fajne podejście do rozwiązania problemu.

Opublikowano (edytowane)

Potestowałem troszkę skrypt na nowym ZWCadzie 2025 i niestety na moim przypadku nie działa on poprawnie.

Poniżej zamieszczam film z zachowania wraz z zrzutem, na którym widać wyświetlany błąd.

 

 

2024-11-12 13 31 43.png

 

EDIT: dodam jeszcze, że lokalne układy nie mają znaczenia gdyż przy globalnych skrypt zachowuje się tak samo.

Edytowane przez BKW
Opublikowano
  W dniu 12.11.2024 o 14:34, dmatusz3 napisał:

Czy może Pan podesłać nam w wiadomości prywatnej ten rysunek?

Rozwiń  

Jak najbardziej

  W dniu 12.11.2024 o 14:34, dmatusz3 napisał:

Czy sprawdzał Pan działanie skryptu na innych rysunkach?

Rozwiń  

Tak, sprawdzałem. Na kilku plikach mam podobne zachowanie.

Potestowałem skrypt na czystym pliku i wyniki na filmie poniżej.
Skrypt poprawnie działa gdy używamy do nawigacji i zoomowania scrolla myszki. Gdy używamy polecenia "_zoom" to zawartość drugiego okna przesuwa się w pionie względem pierwszego okna (widać to po poziomej linii).
Gdy przełączymy na drugi plik jest podobnie plus dodatkowo w linii komend pojawiają się błędy.

 

 

 

 

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.