perlon Posted May 4, 2020 Report Share Posted May 4, 2020 (edited) Witam. Czy w ZwCAD jest możliwość ustawiania domyślnych wartości zmiennych systemowych? W szczególności chciałbym ustawić zmienną WIPEOUTFRAME na 0. Za każdym razem nowy rysunek (eksportowane z innych systemów niestety też) ma ustawiony WIPEOUTFRAME na 1 Edited May 4, 2020 by perlon Quote Link to comment Share on other sites More sharing options...
Adam Klaczek Posted May 4, 2020 Report Share Posted May 4, 2020 Dzień dobry, Wartość WIPEOUTFRAME jest zapisywana w rysunku, nie w rejestrze, tak więc sądzę, że dla istniejących rysunków trzeba to będzie ustawiać. Dla nowych rozwiązaniem może być zapisanie szablonu DWT (np. ZWCADISO) z odpowiednią wartością. Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted May 4, 2020 Report Share Posted May 4, 2020 Można także spróbować ustawić zmienną w pliku lsp, który jest ładowany podczas tworzenia nowego rysunku jak również i otwierania istniejącego. Ścieżka do pliku c:\Program Files\ZWSOFT\ZWCAD 2020\Support\ZWCAD2020.lsp Poniższy wpis wyłącza wyświetlanie siatki. (setvar "GRIDMODE" 0) kruszynski 1 Quote Link to comment Share on other sites More sharing options...
perlon Posted May 4, 2020 Author Report Share Posted May 4, 2020 Miałem nadzieję, że da się ustawić wartość startową przy tworzeniu nowego rysunku. Przy tworzeniu nowego dwg bez templata zwcad musi przecież podjąć decyzję jaką wartość zmiennej ustawić. Drugi przypadek użycia to po eksporcie w bocadzie bmf->dwg mam WIPEOUTFRAME=1 a chciałbym mieć 0 lub chociaż 2. 😞 A to już sprawka samego bocada. Czyżby ta wartość był immanentną cechą standardu dwg? Będę zmuszony wykorzystać lispa startowego i będę musiał każdy rysunek przed wydanie otworzyć, żeby ustawić to WIPEOUTFRAME. Coś mi się zdaje, że pójdzie w ruch jakiś skrypt *.scr do przetwarzania masowego. Quote Link to comment Share on other sites More sharing options...
perlon Posted May 5, 2020 Author Report Share Posted May 5, 2020 Dokonałem porównania ZwCAD2020 i AutoCAD2012 bo do takiego mam dostęp. w AC nie ma zmiennej WIPEOUTFRAME a ustawienia zasłon dokonuje się w poleceniu WIPEOUT -> Frame ON/OFF. Po otwarciu nowego pliku jak i pliku eksportowanego z innego systemu w AC mam ramki zasłon na OFF a po otwarciu w ZC mam ramki na 1. Tak więc przypuszczam, przy pierwszym ładowaniu dwg do cada przy braku ustawienia tej zmiennej jest ona ładowana wartością domyślną dla danego środowiska. Tak więc pytanie skąd ZwCAD wie jaką wartość zapisać w zmiennej WIPEOUTFFRAME pozostaje aktualne. Quote Link to comment Share on other sites More sharing options...
Adam Klaczek Posted May 5, 2020 Report Share Posted May 5, 2020 W ZWCAD również można wyłączyć ramki zasłony z poziomu polecenia: Quote Link to comment Share on other sites More sharing options...
dmatusz3 Posted May 5, 2020 Report Share Posted May 5, 2020 Zmienna WIPEOUTFFRAME jest zapisywana w pliku dwg. Domyślnie jest przyjmowana jest wartość WIPEOUTFFRAME=1, tak jak w Autocad https://knowledge.autodesk.com/support/autocad/learn-explore/caas/CloudHelp/cloudhelp/2018/ENU/AutoCAD-Core/files/GUID-AF1A9E90-35FB-4A49-AA39-E3456B4F264D-htm.html Czy próbował Pan przestawić wartość tej zmiennej dodając na końcu pliku c:\Program Files\ZWSOFT\ZWCAD 2020\Support\ZWCAD2020.lsp linię (setvar "WIPEOUTFFRAME" 0) ? Oto plik dwg z ustawioną wartością zmiennej WIPEOUTFFRAME ustawioną na 0. wipe_out_frame.dwg Proszę o informację jaka jest wartość zmiennej u Pana po otworzeniu tego pliku. Kilka lat temu robiliśmy skrypt, który otwierał po kolei wszystkie pliki z wybranego katalogu, dokonywał pewnych operacji i zapisywał plik. Jeśli to mogłoby pomóc to proszę o informacje, postaramy się odszukać skrypt. Quote Link to comment Share on other sites More sharing options...
Parikon Posted May 5, 2020 Report Share Posted May 5, 2020 (edited) 16 godzin temu, perlon napisał: Miałem nadzieję, że da się ustawić wartość startową przy tworzeniu nowego rysunku. Przy tworzeniu nowego dwg bez templata zwcad musi przecież podjąć decyzję jaką wartość zmiennej ustawić. Drugi przypadek użycia to po eksporcie w bocadzie bmf->dwg mam WIPEOUTFRAME=1 a chciałbym mieć 0 lub chociaż 2. 😞 A to już sprawka samego bocada. Czyżby ta wartość był immanentną cechą standardu dwg? Będę zmuszony wykorzystać lispa startowego i będę musiał każdy rysunek przed wydanie otworzyć, żeby ustawić to WIPEOUTFRAME. Coś mi się zdaje, że pójdzie w ruch jakiś skrypt *.scr do przetwarzania masowego. using zza = ZwSoft.ZwCAD.ApplicationServices; public void AddDocEvent() { // Get the current document zza.Document acDoc = zza.Application.DocumentManager.MdiActiveDocument; acDoc.BeginDocumentClose += new zza.DocumentBeginCloseEventHandler(docBeginDocClose); zza.Application.DocumentManager.DocumentToBeDeactivated += DocumentManager_DocumentToBeDeactivated; } private void docBeginDocClose(object sender, zza.DocumentBeginCloseEventArgs e) { zza.DocumentCollection docs = zza.Application.DocumentManager; if (docs.Count == 1) { } } private void DocumentManager_DocumentToBeDeactivated(object sender, zza.DocumentCollectionEventArgs e) { } Być może można dodać przy uruchamianiu ZwCAD event otwierania dokumentu. I po jego zaistnieniu wywoływać zmianę zmiennej? Sprawdź, być może taki event jest możliwy do wywołania. http://docs.autodesk.com/ACD/2010/ENU/AutoCAD .NET Developer's Guide/index.html The following events are available for DocumentCollection objects: DocumentActivated Triggered when a document window is activated. Edited May 5, 2020 by Parikon Quote Link to comment Share on other sites More sharing options...
perlon Posted May 5, 2020 Author Report Share Posted May 5, 2020 (edited) 1 godzinę temu, dmatusz3 napisał: Czy próbował Pan przestawić wartość tej zmiennej dodając na końcu pliku c:\Program Files\ZWSOFT\ZWCAD 2020\Support\ZWCAD2020.lsp linię (setvar "WIPEOUTFFRAME" 0) Tak. Wprowadziłem tą zmienną na starcie. Ale niestety kłóci to się z zasadą, że zmienna jest przechowywana wewnątrz pliku dwg. Jeżeli zaistnieje powód, dla którego chciałbym w jednym pliku mieć te kontury to taki wpis namiętnie będzie mi to zmieniał. Szukałem sposobu na pierwszorazowe startowe ustawienie na 0 a nie na permanentne ustawianie na 0. A mam w swojej robocie sytuacje w których "produkuję" dużo rysunków dwg z bocada które później przekazuję w pdf i dwg do wykonawstwa. Chciałbym aby w przekazywanych rysunkach było WIPEOUT na 0 i nie zawsze pamiętam żeby to zmienić. Więc wczoraj wieczorem sprokurowałem sobie takiego oto lispa któy tworzy i odpala skrypt scr, który to skrypt załatwia jednorazowo ustawienie tej zmiennej. Do wskazania kartoteki posiłkowałem się kodem Lee Mac. Zabawka może posłużyć do kreowania skryptów które mogą robić jeszczde inne rzeczy hurtowo. Już chodzi mi po głowie jakiś edytorek skryptu operującego na pojedyńczym pliku i jego wielokrotne użycie na kolekcji plików. (vl-load-com) ;;-------------------=={ Directory Dialog }==-----------------;; ;; ;; ;; Displays a dialog prompting the user to select a folder ;; ;;------------------------------------------------------------;; ;; Author: Lee Mac, Copyright © 2011 - www.lee-mac.com ;; ;;------------------------------------------------------------;; ;; Arguments: ;; ;; msg - message to display at top of dialog ;; ;; dir - root directory (or nil) ;; ;; flag - bit coded flag specifying dialog display settings ;; ;;------------------------------------------------------------;; ;; Returns: Selected folder filepath, else nil ;; ;;------------------------------------------------------------;; (defun LM:DirectoryDialog ( msg dir flag / Shell Fold Self Path ) (vl-catch-all-apply (function (lambda ( / ac HWND ) (if (setq Shell (vla-getInterfaceObject (setq ac (vlax-get-acad-object)) "Shell.Application") HWND (vl-catch-all-apply 'vla-get-HWND (list ac)) Fold (vlax-invoke-method Shell 'BrowseForFolder (if (vl-catch-all-error-p HWND) 0 HWND) msg flag dir) ) (setq Self (vlax-get-property Fold 'Self) Path (vlax-get-property Self 'Path) Path (vl-string-right-trim "\\" (vl-string-translate "/" "\\" Path)) ) ) ) ) ) (if Self (vlax-release-object Self)) (if Fold (vlax-release-object Fold)) (if Shell (vlax-release-object Shell)) Path ) ;To właściwe działanie (defun C:WipeOutFrameOff ( / script dir filelist file) (setq dir (LM:DirectoryDialog "" "" 1)) (setq filelist (vl-directory-files dir "*.dwg")) (setq script (open (strcat dir "//script.scr") "w")) (foreach file filelist ; tu możemy sobie wpisać co tam chcemy zrobić na pliku (progn (write-line "_open" script) (write-line (strcat dir "\\" file) script) (write-line "_zoom _e _zoom 0.8x" script) (write-line "(setvar \"WIPEOUTFRAME\" 0)" script) (write-line "_qsave" script) (write-line "_close" script) ) ) (close script) ; no i na koniec odpalamy skrypt (command "_.script" (strcat dir "\\script")) ) (prompt "\nWipeOutFrameOff loaded. Type WipeOutFrameOff to run it.") (princ) Edited May 5, 2020 by perlon Quote Link to comment Share on other sites More sharing options...
perlon Posted May 5, 2020 Author Report Share Posted May 5, 2020 (edited) Godzinę temu, Parikon napisał: Być może można dodać przy uruchamianiu ZwCAD event otwierania dokumentu. I po jego zaistnieniu wywoływać zmianę zmiennej? Sprawdź, być może taki event jest możliwy do wywołania. http://docs.autodesk.com/ACD/2010/ENU/AutoCAD .NET Developer's Guide/index.html The following events are available for DocumentCollection objects: DocumentActivated Triggered when a document window is activated. Dobry sposób jeżeli przy starcie ZwCAD'a ładuję jakąś aplikację .NET'ową. W zasadzie funkcjonalnie jest tożsame z ustawieniem w ZWCAD2020.lsp Dodatkowo można by było jeszcze założyć trigger na odtworzenie poprzedniego stanu tej zmiennej przy zamknięciu pliku. Edited May 5, 2020 by perlon Quote Link to comment Share on other sites More sharing options...
perlon Posted May 5, 2020 Author Report Share Posted May 5, 2020 1 godzinę temu, dmatusz3 napisał: Oto plik dwg z ustawioną wartością zmiennej WIPEOUTFFRAME ustawioną na 0. wipe_out_frame.dwg 92 kB · 0 downloads Proszę o informację jaka jest wartość zmiennej u Pana po otworzeniu tego pliku. Jest oczywiście na 0 Quote Link to comment Share on other sites More sharing options...
perlon Posted May 5, 2020 Author Report Share Posted May 5, 2020 2 godziny temu, Adam Klaczek napisał: W ZWCAD również można wyłączyć ramki zasłony z poziomu polecenia: Samo polecenie WIPEOUT -> Ramki -> Tak/Nie Nie daje trzeciej możliwości a mianowicie wartość 2 pokazuje ramki co pozwala je "chwycić" ale ich nie ma na wydruku Quote Link to comment Share on other sites More sharing options...
kojacek Posted May 5, 2020 Report Share Posted May 5, 2020 Ładowanie ustawień zmiennych z pliku na żądanie: https://kojacek.wordpress.com/2015/11/24/setvar-z-pliku/ Quote Link to comment Share on other sites More sharing options...
perlon Posted May 6, 2020 Author Report Share Posted May 6, 2020 (edited) Wydaje się, że link we wpisie na blogu jest nieużywalny z poniższego powodu: https://www.wirtualnemedia.pl/artykul/onet-zamyka-serwis-republika-www-ale-nie-rezygnuje-z-uslug-hostingowych Edited May 6, 2020 by perlon Quote Link to comment Share on other sites More sharing options...
kojacek Posted May 6, 2020 Report Share Posted May 6, 2020 Link jest już poprawiony Quote Link to comment Share on other sites More sharing options...
Parikon Posted May 12, 2020 Report Share Posted May 12, 2020 (edited) using zza = ZwSoft.ZwCAD.ApplicationServices; namespace startowa { public class Start : zzr.IExtensionApplication { public void Initialize() { AddDocEvent(); WywolajPrzyStarcie(); } public void Terminate() { // zdarzenia zamknięcia ZwCAD } private void AddDocEvent() { zza.Application.DocumentManager.DocumentCreated += DocumentManager_DocumentCreated; } private void DocumentManager_DocumentCreated(object sender, zza.DocumentCollectionEventArgs e) { WywolajPrzyStarcie(); } private void WywolajPrzyStarcie() { //tutaj ustawiamy zmienne systemowe dla documentu po otwarciu } } } Czy taki kod zda egzamin? Czy coś trzeba by dodać? Jak myślicie? Zamiast zmiennych systemowych chciałbym wstawiać własne linie, warstwy wcześniej zdefiniowane w bazie danych do nowych- pustych rysunków jak i otwieranych rysunków z zawartością. Edited May 12, 2020 by Parikon Quote Link to comment Share on other sites More sharing options...
perlon Posted May 12, 2020 Author Report Share Posted May 12, 2020 (edited) Jak dla mnie wygląda OK. Jedyne co jeżeli AddDocEvent posiada tylko jedno przypisanie delegaty to można śmiało to przenieść do Initialize(). Trzeba jeszcze pamiętać, że jeżeli wstawimy ładowanie biblioteki .net do autostartu ZwCAD'a to metoda Initialize wykona się zanim będzie stworzony pusty dokument dwg, a tym samym WywolajPrzyStarcie() może próbować operować na obiekcie dokumentu który nie istnieje. Trzeb tam dodać stosowne bezpieczniki. Tak przy okazji. Czy ktoś sprawdzał jakie reguły rządzą uruchamianiem metody initialize() klasy z interfejsem IExtensionApplication jeżeli takich klas jest więcej niż jedna w module. Jak dla mnie jest to losowe i jest uruchamiana tylko z jednej klasy. Pozostałe klasą są ignorowane. Ponadto zauważyłem, że jeżeli jakiś moduł jest automatycznie ładowany jako zależność modułu nadrzędnego to klasy IExtensionApplication są również ignorowane. Edited May 12, 2020 by perlon Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.