perlon

Użytkownik forum
  • Postów

    425
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    33

Treść opublikowana przez perlon

  1. 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
  2. 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
  3. 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.
  4. 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)
  5. 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.
  6. 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.
  7. 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
  8. Prawdę mówiąc nie wiem czy po instalacji ZwCAD'a czy pakietu SDK ale u mnie na liście jak widać na zrzucie taka biblioteka typów jest. Plik to C:\Program Files\Common Files\ZWSoft Shared\zwcad18.tlb W VisualStudio można ręcznie dodać do listy bibliotekę typów przyciskiem Browse. Może coś w ten deseń. Ja tego ręcznie u siebie nie robiłem. Było z dobrodziejstwem inwentarza.
  9. Na podstawie Kean Walmsley blog using System; using System.Windows.Forms; using System.Runtime.InteropServices; using ZWCAD; namespace CadExecute { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { const string progID = "ZWCAD.application"; IZcadApplication zcApp = null; try { zcApp = (IZcadApplication)Marshal.GetActiveObject(progID); } catch { try { Type acType = Type.GetTypeFromProgID(progID); zcApp = (IZcadApplication)Activator.CreateInstance(acType, true); } catch { MessageBox.Show("Cannot create object of type \"" + progID + "\""); } } if (zcApp != null) { zcApp.Visible = true; zcApp.ActiveDocument.SendCommand("_CIRCLE 0,0 10 "); } } } } Przestrzeń nazw ZWCAD trzeba dodać przez referencję COM -> OLE Automation i ZWCAD 2020 Type Library
  10. perlon

    Jak wprowadzic jednostke kWh

    Myślę że całkiem rozsądnym kierunkiem będą snippety
  11. Taki oto błąd w oknie Attach External Reference. Jeżeli chcę osadzić referencję w konkretnej skali a nie wskazywać tego podczas osadzania to odznaczam Specify on screen. Mam możliwość ustalenia Uniform scale. Jeżeli nie jest zaznaczona ta opcja to w każdym z kierunków mogę wpisać skalę również mniejszą od 1 np 0.1 albo 0.01 albo nawet 1/500. Ale jeżeli zaznaczę opcję Uniform scale to w jedynym aktywnym polu nie mogę wprowadzić ani kropki ani znaku dzielenia. Ciekawostką jest że przed wyrównaniem skali wpiszę 0.1 to po zaznaczeniu to 0.1 pozostaje. W ogóle ta edycja jest dziwna bo jeżeli wpiszę np 11 to uda mi się wstawić kropkę między jedynki a potem kasując pierwszą jedynkę zostaje ona zamieniona na 0 i mam 0,1 Ale chyba jednak nie o to chodzi. Wydaje się że następuje niekontrolowane przenoszenie kursora na początek ciągu po rozpoznaniu w polu edycyjnym innego znaku niż cyfra. VERNUM = "2020.01.07(53615)_x64" (read only)
  12. Może regenall załatwi sprawę.
  13. Myślę Martin, że tu chodzi o coś innego a mianowicie, żeby drukarka pdf pomimo ustawienia bardzo dużego formatu ostatecznie "wyprodukowała" arkusz dopasowany wymiarami do faktycznie umieszczonych na nim obiektów. Faktycznie plotery mają taką opcję która odcina z rolki arkusz zaraz za ostatnim wydrukowanym elementem nie zważając że format arkusza był ustawiony np na 2,3 czy 10m. Jest to cecha sterownika drukarki.
  14. Na reaktorze kontynuacja wymiarów również działa.
  15. Można to załatwić reaktorem. Jedno z rozwiązań sprzed wielu lat autorstwa Andrzeja Gumuły z forum.cad.pl, które zaadoptowane do własnych potrzeb sam używam. Szablony i skrypty startowe ZWPack jest to opisane jak również patenty na ustawienia startowe rysunku. Połączenie skryptów startowych i reaktorów na komendach da oczekiwany rezultat. To byłoby interesujące.
  16. Niepotrzebnie w przypadku ESC rzucałem wyjątkiem który nie przechodził przez Resolve() z kontenera DI. Brak punkty koty przekazałem przez property i teraz jest już OK. Poprawka już zpushowana. No dopóki czegoś w ZWSOFT'cie nie poprawią to bez language packa EN działać nie będzie 😞
  17. Wracając do tematu wątku. Środowisko : maszyna wirtualna z Windows7 64bit i zainstalowanym ZwCAD2020SP1 PL 64bit. Przeprowadziłem następującą sekwencję działań: 1. Uruchomienie wersji PL. Autofac zgłasza brak zarejestrowanych typów. Nakładka nie działa prawidłowo. 2. Instalacja ZwCAD2020SP1 EN bez uruchomienia po instalacji. Uruchomienie wersji PL. Autofac wywala błąd. 3. Uruchomienie wersji EN a następnie jej zamknięcie. Uruchomienie wersji PL. Nakładka uruchamia się prawidłowo UWAGA. Instalacja wersji EN po wersji PL jest tak naprawdę instalacją Language Pack'a EN Przynajmniej tak to wygląda na liście zainstalowanych programów. 4. Restart maszyny wirtualnej. Uruchomienie wersji PL. Nakładka działa prawidłowo. 5. Odinstalowanie wersji EN z usunięciem user data. Uruchomienie wersji PL. Autofac wywala błąd. 6. Instalacja wersji EN bez uruchomienia po instalacji. Uruchomienie wersji PL. Autofac wywala błąd. 7. Uruchomienie i wyłączenie wersji EN. Uruchomienie wersji PL. Nakładka działa prawidłowo. 8. Odinstalowanie wersji EN z zachowaniem user data. Uruchomienie wersji PL. Autofac wywala błąd. Wnioski. Do prawidłowego działania nakładki (Autofac'a) wymagane jest zainstalowanie wersji EN i jednokrotne jej uruchomienie. Po tej operacji również po restarcie maszyny nakładka na wersji PL uruchamia się prawidłowo aż do czasu odinstalowania wersji EN. Zachowanie lub nie user data nie ma w tym przypadku znaczenia. Coś z tym można zrobić?
  18. Jeszcze uwaga dotycząca procesu kompilacji. Ponieważ projekt CADKit jest niezależny od CADKitBasic i CADKitElevationMarks choć jest główną biblioteką która ma wczytywać pozostałe nie może być projektem głównym. Tzn może być ale jego kompilacja nie spowoduje kompilacji dwóch pozostały bibliotek. Więc ich nie będzie i przy starcie nie zostaną załadowane. Żeby to obejść dopisałem w post-buildzie pozostałych projektów : copy $(TargetPath) $(SolutionDir)\CADKit\bin\$(ConfigurationName) co każdorazowo po kompilacji projektu skopiuje dll'kę do katalogu CADKit/bin/$(ConfigurationName). No ale F5 wywołuje kompilację głównego projektu i tylko jego zależności. Tak więc wymagany jest F6 (Build solution) a potem F5 (Start debugging). Obejściem problemu może być uczynienie głównym projektem testów jednostkowych. Jest to projekt do którego są podpięte jako zależności wszystkie pozostałe projekty i jego kompilacja wywoła kompilację wszystkich pozostałych a więc skopiowanie gotowych dll do katalogu CADKit/bin/$(ConfigurationName). Pozostaje tylko odpalić F5 ustawić Start external program. (Chyba to powinienem opisać w Readme na GITHubie ). Tak na marginesie testy jednostkowe też leżą i kwiczą. Jak widać projekt ma jeszcze mnóstwo mankamentów, niedoróbek i wymaga licznych refaktoryzacji. Jeżeli dojrzeje być może znajdzie swoje miejsce w dziale" Nakładki na ZWCAD i ZWCAD+". Dlatego wszelka pomoc jest bardzo mile widziana z zastrzeżeniem że zawsze to będzie Open Source.
  19. Znalazłem sposób na monitorowanie zmiany interfejsu więc się dzielę moim rozwiązaniem dla potomności co pozwoli zamknąć ten wątek: 1. Trzeba zasubskrybować się do handlera ApplicationServices.SystemVariableChangedEventHandler 2. W obsłudze zdarzenia trzeba sprawdzić, zmiana której zmiennej systemowej wywołała to zdarzenie. Jeżeli zdarzenie wywołała zmienna COLORSCHEME należy odczytać z rejestru systemowego wartość COLORSCHEME klucza Software\ZWSOFT\ZWCAD\2020\en-US\Profiles\Default\Config (dla wersji EN, dla PL trzeba odczytać z gałęzi pl-PL) Dzięki Adam Klaczek. Twoja podpowiedź była bardzo pomocna. podpięcie do handlera i metoda podpinana do handlera Application.SystemVariableChanged += OnSystemVariableChanged private void OnSystemVariableChanged(object _sender, SystemVariableChangedEventArgs _arg) { if (_arg.Name == "COLORSCHEME") { // tu pobieram z kontenera dependece injection instancję serwisu obsługującego schemat kolorów interfejsu ZwCAD'a // i odpalam własne zdarzenie rozgłaszające, że została dokonana zmiana kolorów using(var scope = DI.Container.BeginLifetimeScope()) { var service = DI.Container.Resolve<IInterfaceSchemeService>(); ChangeInterfaceScheme?.Invoke(_sender, new ChangeInterfaceSchemeEventArgs(service)); } } } w której odpalam już własne zdarzenie ChangeInterfaceScheme (skoro nie dokopałem się do takiego zdarzenia dostarczanego przez ZwSOFT to sobie zrobiłem własne 😁 ) public event EventHandler<ChangeInterfaceSchemeEventArgs> ChangeInterfaceScheme; public class ChangeInterfaceSchemeEventArgs : EventArgs { public IInterfaceSchemeService Service { private set; get; } public ChangeInterfaceSchemeEventArgs(IInterfaceSchemeService _service) { Service = _service; } } W mojej konkretnej implementacji do zdarzenia mogą być podpinane metody przyjmujące w argumencie serwis IInterfaceSchemeService który zajmuje się dostarczaniem kolorów do kontrolek interfejsu użytkownika. Jest to instancja mojej własnej klasy którą pozyskuję z kontenera zależności Autofac. Handler ChangeInterfaceScheme jest właściwością mojej klasy statycznej AppSettings która jest dostępna w całej aplikacji i trzyma róże globalne ustawienia. Klasyczny singleton. Dlatego do tego handlera mogę podpiąć w dowolnym miejscu aplikacji dowolną obsługę zdarzenia zmiany interfejsu uzyskując dostęp do serwisu podającego na tacy jakie kolory mają mieć aktualnie kontrolki. Wystarczy zmienić właściwości kontrolek WindowsForms, HTML, WPF czy czego tam się nie używa. Jeszcze tylko specyfikacja IInterfaceSchemeService public interface IInterfaceSchemeService { InterfaceScheme GetScheme(); Color GetBackColor(); Color GetForeColor(); } Na koniec należy dodać, że mój serwis InterfaceSchemeService posiada statyczną właściwość ColorScheme którą mogę odczytać w dowolnym miejscu aplikacji w szczególności przy starcie aplikacji i dzięki temu moja nakładka od razu może startować ze zgodnymi kolorami. Pełna implementacja z zastosowaniem jest dostępna w moim szarpowaniu opisanym w tym wątku gdzie znajduje się link do GITHub'a z kompletnymi źródłami.
  20. Co do samej nakładki ja to nazwałem na własny użytek jako wprawki w szarpowaniu CAD'a. Każdy, kto coś niecoś kodził czy to w LISP'ie czy VBA czy C# napisał kody do wstawiania jakichś obiektów. Parafrazując starą reklamę : "Wszyscy mają koty wysokościowe, mam i ja". Nie jest to żaden wyczyn ani nie jest to odkrywcze. Raczej powód do ćwiczeń i okazja do zastosowania kilku wzorców projektowych ogólnego przeznaczenia jak factory pattern, dependence injection, klas abstrakcyjnych etc. Przy okazji starałem się rozwiązać temat zmiany schematu kolorów interfejsu ciemny/jasny czy synchronizacji CANONSCALE. Jest też zawarta propozycja automatycznego ładowania kolejnych modułów jeżeli tylko istnieją i spełniają odpowiednie warunki oraz uruchomienie jednego okna PALETTESET z dynamicznie dodawanymi zakładkami reprezentującymi kolejne biblioteki z ich funkcjonalnościami. Dodatkowo jeszcze samo okno jest budowane za pomocą wzorca MVP (Model-View-Presenter). To co jest w tej chwili nie ma zbyt wiele użytecznej funkcjonalności, ale posiada infrastrukturę do łatwego rozbudowania. Przykładowo żeby dołożyć dodatkowe koty wysokościowe wystarczy tylko zdefiniować jedną klasę dziedziczącą po klasie Mark, dodać ją do serwisu MarkServis i jest dodatkowy przycisk w oknie. Można to sobie obejrzeć w kodzie zapraszam na GITHuba. Jeżeli jest ktoś zainteresowany takimi ćwiczeniami z szarpowania a przy okazji chciałby tworzyć jakąś funkcjonalność w ramach Open Source to zapraszam do grona "developerów" 😎 Acha. Jeszcze dodam, że podjąłem (jak na razie nieudaną) próbę stworzenia biblikoteki/klasy Proxy na różne platformy CAD która by przesłoniła te platformy uniezależniając samą nakładkę od tego gdzie jest uruchamiana. Chodzi o to żeby była jedna biblioteka CADKitZwCAD.dll z odwołaniem do ZwDatabaseMgd.dll, ZwManaged.dll, a pozostałe moduły odwoływały by się poprzez Proxy do mechanizmów ZwCAD'a. Na chwilę obecną działa to na zasadzie kompilacji warunkowej na podstawie zdefiniowanego symbolu "preprocesora".
  21. Fakt. Zapomniałem dołączyć loadera lispowego. Jest w załączeniu. Podstawową biblioteką jest CADKitZwCAD.dll. W niej jest "autostart" który ładuje pozostałe biblioteki, które są w tej samej lokalizacji i zaczynają się od CADKit... (vl-load-com) (cond ((= (getvar "PRODUCT") "ZWCAD") (vl-cmdf "netload" "CADKitZwCAD.dll")) ((= (getvar "PRODUCT") "AutoCAD") (vl-cmdf "netload" "CADKitAutoCAD.dll")) (T (progn (princ "\nNieznana platforma CAD. CADKit nie może być wczytany.") ) ) ) (princ) Z grubsza funkcjonalność pokazana jest na filmie. Tak na marginesie. Gdzieś jest instrukcja jak wstawić do posta film z youtuba? https://youtu.be/Pwgb96g_7Oc
  22. Dzień dobry. Nie bardzo wiedziałem gdzie to umieścić więc trafia do wsparcia programistycznego. Popełniłem kawałek aplikacji, w której wykorzystuję kontener wstrzykiwania zależności Autofac. Powiedzmy, że aplikacja już działa, więc postanowiłem ją dać kolegom w biurze do testowania. No i spotkał mnie taki zonk: wersja ZwCAD 2020 SP2 PL i komunikat : An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = ElevationMarksPresenter (ReflectionActivator), Services = [CADKit.Contracts.IPresenter, CADKitElevationMarks.Contracts.Presenters.IElevationMarksPresenter], Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime, Sharing = Shared, Ownership = OwnedByLifetimeScope ---> An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = MarkService (ReflectionActivator), Services = [CADKitElevationMarks.Contract.Services.IMarkService], Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime, Sharing = Shared, Ownership = OwnedByLifetimeScope ---> An error occurred during the activation of a particular registration. See the inner exception for details. Registration: Activator = MarkIconService (ReflectionActivator), Services = [CADKitElevationMarks.Contracts.Services.IMarkIconService], Lifetime = Autofac.Core.Lifetime.CurrentScopeLifetime, Sharing = Shared, Ownership = OwnedByLifetimeScope ---> An exception was thrown while invoking the constructor 'Void .ctor()' on type 'MarkIconService'. ---> Odwołanie do obiektu nie zostało ustawione na wystąpienie obiektu. (See inner exception for details.) (See inner exception for details.) (See inner exception for details.) (See inner exception for details.) Ewidentnie kontener nie poradził sobie z rejestracją typów choć dziwne jest to że część typów załadował i obsługuje a część tych ładowanych z jednej tylko DLL'ki już nie. Po kilku testach na czystej maszynie wirtualnej z Windows 7 zainstalowałem równolegle z PL wersję EN. Na swoim kompie używam wyłącznie wersji EN. No i o dziwo poszło zarówno na EN jak i na PL. Jest dobrze. Więc odinstalowałem wersję EN no i niestety komunikat powrócił 😞. Jest coś w wersji EN czego brakuje w wersji PL co powoduje, że moja nakładka się buntuje. Może ktoś pomóc w temacie? Załączam na razie same skompilowane biblioteki DLL. W najbliższym czasie w osobnym wątku skrobnę parę słów na temat i załączę kompletne kody, ale tak na szybko chciałem wrzucić problem który mnie dotknął i nie jest on związany ściśle z kodem aplikacji w C# pod ZwCAD'a. Jeszcze zrzuty które pokazują że jest coś nie tak: Autofac.dll CADKitBasicZwCAD.dll CADKitElevationMarksZwCAD.dll CADKitZwCAD.dll
  23. Eksport layout jest fajny. Docina polilinie na krawędzi rzutni, koło zamienia na łuk itp ale ma również drobne mankamenty np.nie docina hatchy, text multiline jest w nowym rysunku w całości a nie tylko w widocznej części, podobnie teksty jednowierszowe. Mam świadomość, że z tekstami to może być decyzja strategiczna ale hatche powinien docinać. Generalnie dobra robota i nie trzeba korzystać z zewnętrznych narzędzi. Co do eksportu do dgn to wydaje się, zamiast osobnego polecenia exptort coś tam powinien format zapisu rysunku być dostępny bezpośrednio w oknie SaveAs i Open. Nie widzę powodu dla którego mnoży się komendy zamiast zaszyć to w listę dostępnych formatów. Podobnie STL nie można by zrobić typu w oknie SaveAs zamiast komendy STLOUT?
  24. Kontekst powyższego jest nieco szerszy, ale nie chciałem zbyt komplikować kodu. W szczególności chciałem wstawiać do rysunku blok z atrybutem lub opcjonalnie encje w grupie mając w jig'u obraz takiego bloku/grupy. W ogólnym przypadku chciałem coś innego mieć na podglądzie a co innego ostatecznie wstawiać do rysunku. Stąd poszukiwania prawidłowej reprezentacji graficznej bez faktycznego wstawiania do bazy rysunku. Wygląda jednak, że chyba się nie da uzyskać 100% reprezentacji graficznej obiektu bez jego wstawienia do bazy. Ostatecznie chyba przeniosę zapis do rysunku do wnętrza klasy Jig public Jig(Entity txt, Point3d point) : base() { entity = txt; basePoint = point; Prepare(); } private void Prepare() { var doc = Application.DocumentManager.MdiActiveDocument; using (var tr = doc.TransactionManager.StartTransaction()) { var btr = tr.GetObject(doc.Database.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord; btr.AppendEntity(entity); tr.AddNewlyCreatedDBObject(entity, true); entity.Erase(); tr.Commit(); } } co uprości nieco wywołanie [CommandMethod("JIG")] public void Jig() { try { var tx1 = new DBText(); tx1.SetDatabaseDefaults(); tx1.Height = 2; tx1.Position = new Point3d(0, 0, 0); tx1.TextString = "Tekst"; tx1.VerticalMode = TextVerticalMode.TextVerticalMid; var jig = new Jig(tx1, new Point3d(0, 0, 0)); var result = Application.DocumentManager.MdiActiveDocument.Editor.Drag(jig); if(result.Status == PromptStatus.OK) { SaveToDatabase(jig.GetEntity()); } } catch(Exception ex) { Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(ex.Message); } } Powyższe trzeba jeszcze uzupełnić o kontrolę czy obiekt aktualnie jest w bazie czy nie i jeden lub dwa try catch'e i da to kod całkiem uniwersalny