Domyślne wartości zmiennych systemowych


Recommended Posts

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 by perlon
Link to comment
Share on other sites

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)

 

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

Link to comment
Share on other sites

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.

 

Link to comment
Share on other sites

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 by Parikon
Link to comment
Share on other sites

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 by perlon
Link to comment
Share on other sites

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 by perlon
Link to comment
Share on other sites

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 

Link to comment
Share on other sites

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 by Parikon
Link to comment
Share on other sites

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