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


Recommended Posts

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

33 minuty temu, dmatusz3 napisał:

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

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

23 minuty temu, dmatusz3 napisał:

Do czego może się ono przydać?

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.

26 minut temu, dmatusz3 napisał:

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

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

28 minut temu, 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.

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.

Link to comment
Share on other sites

40 minut temu, BKW napisał:

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

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.

Link to comment
Share on other sites

58 minut temu, BKW napisał:

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

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

11 minut temu, 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.

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

12 minut temu, 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ść?

Dokładnie tak

14 minut temu, 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.

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.

Link to comment
Share on other sites

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)

)

 

Link to comment
Share on other sites

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?

 

 

Link to comment
Share on other sites

7 minut temu, dmatusz3 napisał:

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

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% ...

10 minut temu, dmatusz3 napisał:

czy wystarczające będą 2 rzutnie?

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.

13 minut temu, dmatusz3 napisał:

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

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

Link to comment
Share on other sites

Brawo, brawo i jeszcze raz brawo.:clapping:

12 godzin temu, Marek-M napisał:

Zaraz nam się pomysły skończą i co wtedy będziecie robić w tej Szansie??

My pomysłów mamy co niemiara, więc pracy nie stracą ;) 

Link to comment
Share on other sites

Dziękujemy za uznanie :)

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

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

Link to comment
Share on other sites

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.

Edited by BKW
Link to comment
Share on other sites

16 godzin temu, dmatusz3 napisał:

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

Jak najbardziej

16 godzin temu, dmatusz3 napisał:

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

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.

 

 

 

 

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