perlon Opublikowano 4 Maja 2020 Zgłoś Opublikowano 4 Maja 2020 (edytowane) 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 Edytowane 4 Maja 2020 przez perlon Cytuj
Adam Klaczek Opublikowano 4 Maja 2020 Zgłoś Opublikowano 4 Maja 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ą. Cytuj
dmatusz3 Opublikowano 4 Maja 2020 Zgłoś Opublikowano 4 Maja 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 Cytuj
perlon Opublikowano 4 Maja 2020 Autor Zgłoś Opublikowano 4 Maja 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. Cytuj
perlon Opublikowano 5 Maja 2020 Autor Zgłoś Opublikowano 5 Maja 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. Cytuj
Adam Klaczek Opublikowano 5 Maja 2020 Zgłoś Opublikowano 5 Maja 2020 W ZWCAD również można wyłączyć ramki zasłony z poziomu polecenia: Cytuj
dmatusz3 Opublikowano 5 Maja 2020 Zgłoś Opublikowano 5 Maja 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. Cytuj
Parikon Opublikowano 5 Maja 2020 Zgłoś Opublikowano 5 Maja 2020 (edytowane) 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. Edytowane 5 Maja 2020 przez Parikon Cytuj
perlon Opublikowano 5 Maja 2020 Autor Zgłoś Opublikowano 5 Maja 2020 (edytowane) 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) Edytowane 5 Maja 2020 przez perlon Cytuj
perlon Opublikowano 5 Maja 2020 Autor Zgłoś Opublikowano 5 Maja 2020 (edytowane) 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. Edytowane 5 Maja 2020 przez perlon Cytuj
perlon Opublikowano 5 Maja 2020 Autor Zgłoś Opublikowano 5 Maja 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 Cytuj
perlon Opublikowano 5 Maja 2020 Autor Zgłoś Opublikowano 5 Maja 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 Cytuj
kojacek Opublikowano 5 Maja 2020 Zgłoś Opublikowano 5 Maja 2020 Ładowanie ustawień zmiennych z pliku na żądanie: https://kojacek.wordpress.com/2015/11/24/setvar-z-pliku/ Cytuj
perlon Opublikowano 6 Maja 2020 Autor Zgłoś Opublikowano 6 Maja 2020 (edytowane) 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 Edytowane 6 Maja 2020 przez perlon Cytuj
Parikon Opublikowano 12 Maja 2020 Zgłoś Opublikowano 12 Maja 2020 (edytowane) 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ą. Edytowane 12 Maja 2020 przez Parikon Cytuj
perlon Opublikowano 12 Maja 2020 Autor Zgłoś Opublikowano 12 Maja 2020 (edytowane) 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. Edytowane 12 Maja 2020 przez perlon Cytuj
Rekomendowane odpowiedzi
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ą.