perlon

Użytkownik forum
  • Postów

    425
  • Dołączył

  • Ostatnia wizyta

  • Wygrane w rankingu

    33

Treść opublikowana przez perlon

  1. Witam. Chciałbym zaprezentować przykładowy kod do wstawiania obiektów do rysunku z podglądem tego co zostanie wstawione. Rozwiązanie oparte o klasę JigDraw. Starałem się maksymalnie skrócić kod usuwając bloki try catch oraz wstawiając tylko jedną entycję. Z powodzeniem można go jednak przerobić zastępując Typ Entity typem IEnumerable<Entity> i wstawiać całe zespoły obiektów. Mam jednak pewną zagwostkę dla pary klas jak w temacie. Poniżej kod wstawiający obiekt klasy DBText z justifikacją LeftCenter uzyskaną za pomocą: tx1.VerticalMode = TextVerticalMode.TextVerticalMid; Najpierw efekt którego nie chcę: Kompletny kod który to realizuje: using ZwSoft.ZwCAD.DatabaseServices; using ZwSoft.ZwCAD.EditorInput; using ZwSoft.ZwCAD.Geometry; using ZwSoft.ZwCAD.GraphicsInterface; using ZwSoft.ZwCAD.ApplicationServices; using ZwSoft.ZwCAD.Runtime; namespace JigTest { public class Jig : DrawJig { private readonly Point3d basePoint; private readonly Entity entity; private Point3d currentPoint; private Matrix3d transformation; public Jig(Entity txt, Point3d point) : base() { entity = txt; basePoint = point; } public Entity GetEntity() { var result = entity.Clone() as DBText; result.TransformBy(transformation); return result; } protected override SamplerStatus Sampler(JigPrompts prompts) { JigPromptPointOptions jigOpt = new JigPromptPointOptions("Wskaż punkt wstawienia:") { UserInputControls = UserInputControls.Accept3dCoordinates, BasePoint = basePoint }; PromptPointResult res = prompts.AcquirePoint(jigOpt); currentPoint = res.Value; return SamplerStatus.OK; } protected override bool WorldDraw(WorldDraw draw) { transformation = Matrix3d.Displacement(basePoint.GetVectorTo(currentPoint)); var geometry = draw.Geometry; if (geometry != null) { geometry.PushModelTransform(transformation); geometry.Draw(entity); } return true; } } public class JigCommands { [CommandMethod("JIG")] public void Jig() { try { var tx1 = new DBText(); tx1.SetDatabaseDefaults(); tx1.TextStyle = Application.DocumentManager.MdiActiveDocument.Database.Textstyle; 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)); Application.DocumentManager.MdiActiveDocument.Editor.Drag(jig); var ent = jig.GetEntity(); SaveToDatabase(ent); } catch(Exception ex) { Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(ex.Message); } } public static void SaveToDatabase(Entity ent) { Document doc = Application.DocumentManager.MdiActiveDocument; using (var tr = doc.TransactionManager.StartTransaction()) { var btr = tr.GetObject(doc.Database.CurrentSpaceId, OpenMode.ForWrite) as BlockTableRecord; btr.AppendEntity(ent); tr.AddNewlyCreatedDBObject(ent, true); tr.Commit(); } } } } Jak widać obiekt DBText przed wstawieniem do bazy rysunku ignoruje ustawienie TextVerticalMode. W trakcje wybory miejsca wstawienia ma osadzenie domyślne LeftBottom. Po zapisaniu encji do bazy rysunku dopasowanie jest respektowane i obiekt jest wyświetlany prawidłowo LeftCenter. Rozwiązaniem jest przed przekazaniem do klasy Jig obiektu uprzednio zapisanego do bazy a następnie usunięcie go z bazy przed wywołaniem metody Drag() [CommandMethod("JIG")] public void Jig() { try { var tx1 = new DBText(); tx1.SetDatabaseDefaults(); tx1.TextStyle = Application.DocumentManager.MdiActiveDocument.Database.Textstyle; tx1.Height = 2; tx1.Position = new Point3d(0, 0, 0); tx1.TextString = "Tekst"; tx1.VerticalMode = TextVerticalMode.TextVerticalMid; SaveToDatabase(tx1); var jig = new Jig(tx1, new Point3d(0, 0, 0)); EraseFromDatabase(tx1); Application.DocumentManager.MdiActiveDocument.Editor.Drag(jig); var ent = jig.GetEntity(); SaveToDatabase(ent); } catch(Exception ex) { Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage(ex.Message); } } public static void EraseFromDatabase(Entity ent) { Document doc = Application.DocumentManager.MdiActiveDocument; using (var tr = doc.TransactionManager.StartTransaction()) { ent.ObjectId.GetObject(OpenMode.ForWrite).Erase(true); tr.Commit(); } } Efekt jest prawidłowy ale metoda wydaje się być nieco na około. Na koniec pytanie: Czy jest jakiś elegancji sposób aby metoda geometry.Draw(entity) wołana w metodzie WorlDraw klasy Jig respektowała właściwości obiekty typu DBText zanim ten obiekt zostanie utrwalony w bazie rysunku?
  2. Faktycznie zmianą tego klucza można sterować jaki interfejs się załaduje przy starcie. Zmiana w trakcie działania nie przynosi efektu tzn. przy zamknięciu i tak do rejestru jest zapisywana ponownie wartość zgodna z chwilą zamknięcia. Tak więc tą metodą można sterować stylem gdy ZwCAD nie jest uruchomiony. Ale odczytać jak najbardziej można. Dzięki za podpowiedź. Natomiast otwartym pozostaje pytaniem o zdarzenie które jest uruchamiane w momencie zmiany w opcjach okna Options->Display->Color scheme.
  3. No niestety. Chodzi mi o zmianę stylu interfejsu ciemny/jasny a nie zmianę koloru tła obszaru roboczego. Doprecyzuję cel. Chodzi o automatyzowanie dostosowania ładowanych pasków narzędzi do aktualnego stylu. Czy maja być ładowane ikony dostosowane do jasnego czy ciemnego tła.
  4. Witam. Czy mógłby ktoś podpowiedzieć jakie zdarzenie należy zasubskrybować, żeby śledzić zmianę schematu kolorów Dark/Light? Czy jest może jakaś zmienna systemowa albo jakaś propertka którą można sprawdzić aktualny schemat kolorów ZwCAD'a, no i czy można taką zmianę sprowokować programowo?
  5. Można też użyć Ctrl+C Ctrl+V z pomocą trybu Object snap tracking (F11)
  6. Można również bez filtra zaznaczyć wszystkie okręgi, zmienić im średnicę na oczekiwaną, a potem lisp'em do kasowania duplikatów usunąć nadmiarowe.
  7. Kol. Kojacek prezentował kilka lispów dot. wymiarów. Między innymi https://kojacek.wordpress.com/2019/02/17/o-dimscale/comment-page-1/?unapproved=652&amp;moderation-hash=f14d723e1826eb2f92424a6b02c589ef#comment-652 gdzie używa funkcji getpropertyvalue. Zresztą do odczytu różnych właściwości. Konkretnie chodziło o właściwość DimScale ze stylu wymiarowania odczytywana w taki sposób : (getpropertyvalue (tblobjname "DIMSTYLE" (cdr (assoc 3 (entget Ent)))) "DimScale" ) Próbowałem do zastosować w ZwCAD'zie. Zamieniłem tą linijkę na odczyt kodu DXF (cdr (assoc 40 (entget (tblobjname "DIMSTYLE" (cdr (assoc 3 (entget Ent))))))) Wydaje się jednak, że getpropertyvalue jest bardziej eleganckie i lepiej się to czyta. Ustawianie właściwości za pomocą setpropertyvalu jest również szybsze niż sklejanie kodów DXF w entmod'zie. Można też stosować (vlax-get-property ...) i (vlax-put-property ...) ale w tym konkretnym przypadku vlax-get-property nie zwracała w ogóle właściwości DimScale stylu wymiarowania. Na marginesie funkcja vlax-dump-object wywołana dla wymiaru zwraca taką listę: ; Property values: ; AltRoundDistance = 0.0 ; AltSuppressLeadingZeros = 0 ; AltSuppressTrailingZeros = 0 [...] ; DimLineInside = 0 ; DimTxtDirection = ; Document (RO) = #<VLA-OBJECT IZcadDocument 1cbd6b48> ; EntityName (RO) = "AcDbRotatedDimension" ; EntityTransparency = [...] ; TrueColor = #<VLA-OBJECT IZcadZcCmColor 1cbc86c0> ; UnitsFormat = 2 ; VerticalTextPosition = 1 ; Visible = -1 W szczególności właściwość DimTxtDirection jest na liście, ale nie da się jej odczytać funkcją vlax-get-property podobnie jak jeszcze kilka innych. Tak jakby była definicja ale nie było gettera i settera dostępowego.
  8. Potrzeba tej funkcji znów powróciła. Czy ZwSoft wypowiedział się w tej kwestii?
  9. Fajnie, tylko co zobaczy na rysunku odbiorca twojego DWG'a, jeżeli masz w umowie przekazanie wersji edytowalnej? Dorzucasz TTF'a?
  10. Tu jest opisana procedura dla AC2010 i wyższych http://help.autodesk.com/view/INSTALL_LICENSE/2016/PLK/?guid=GUID-47C8BDE2-F44C-4F29-9CA3-9A3AD4424CF1
  11. Też mi się kołacze po głowie taka procedura. Chodzi o to że jak się zabierało "żeton" z komputera to był on wgrywany na pendrajwa i było ustalone z góry na jakie konkretnie stanowisko ma być wgrana ta licencja. Prawdopodobnie na pendrajwa był uprzednio wczytywany request code nowego stanowiska i na ten request code była eksportowana licencja. Stąd to bieganie z USB między stanowiskami. Chyba nie ma możliwości wyeksportowania licencji tak w ciemno, a potem entliczek pentliczek na który komputer wypadnie na tego bęc. Myślałem że kol.Parikon przetestował ten backup windowsa, a to chyba była tylko pewna koncepcja 😞 Wracając do tematu wątku. Wygląda na to, że wieczystość zależy od licencjodawcy i może ulec ograniczeniu. Przy obecnym systemie softkey i bez aktywnej postawy ZwSOFT nie da się przenieść lub zabezpieczyć licencji software'wej . Innymi słowy dopóki licencjodawca będzie utrzymywał serwery licencji dopóty licencja jest wieczysta. Ale może się to zmienić. Autodesk od dawna wytyczał kierunki i kształtował trendy. Niestety nie wszystkie pomysły są godne naśladowania i oby inni producenci CAD nie czerpali z wzorca w tym zakresie. AC2010 jest out of support więc operacja jest ryzykowna. Bez potwierdzenia z Autodesku (sic! jak to uzyskać skoro 2010 jest już out of support) ja osobiście tak dla testów bym nie próbował. Wkurzająca jest ta nierównowaga sprzedawca<->klient 😠
  12. Możesz potwierdzić, że AC i/lub ZC na softkeyach zadziałają na innej bazie sprzętowej z odtworzonego backupu całego systemu? Ja takiej operacji nie robiłem, a jestem ciekaw czy softkeye są generowanie wyłącznie na podstawie numeru windowsa i nie sprawdzają bazy sprzętowej.
  13. Proszę nie inputować. To nie mój pomysł ani realizacja.
  14. Nigdy takiej operacji nie testowałem. Czyżby to co opisałeś mogło służyć do replikowania posiadanych licencji softwerowych? Nie tak dawno zarekomendowałem w biurze całkowite ostateczne wycofanie się z assistance nielicznych już produktów autodeskowych. Obecna polityka cenowa Autodesku wg mnie jest nie do udźwignięcia przez nawet średnie biuro projektowe.
  15. No zgadza się. Dlatego pkt.3 z interpretacji cytowanej 4 posty wyżej mówi o nie powstawaniu dodatkowych obowiązków po stronie licencjodawcy. Takim obowiązkiem jest utrzymywanie serwerów licencji (specjalizowanej instalacji do przenoszenia fotelika z samochodu do samochodu). Jeżeli w wyniku udzielenia licencji, licencjodawca w celu realizacji umowy jest zobowiązany utrzymywać serwery licencji to taka licencja może zostać wypowiedziana z zachowaniem okresów wypowiedzenia. Oznacza to, że nie jest faktycznie wieczysta niewypowiadalna a jedynie bezterminowa z możliwością wypowiedzenia. Dlatego w biurze mamy wszystkie licencje ZwCAD'a zabezpieczone kluczem sprzętowym. Hmmm.... Nie sprawdzałem, czy aktywacja licencji działa w trybie off-line 😕 To i tak dobrze że nie każą odinstalowywać tych starych autocadów a jedynie napisali że wyłączają serwery licencji. Należało by tu przytoczyć przykład nakładek branżowych z dołożonym interpreterem LISP'a pozwalającym uruchomić je na AutoCAD LT (LT-extender). Po zadymie sądowej z TM-CAD Engineering użytkownicy takich nakładek mieli do wyboru albo przesiąść się na pełną wersję AC albo zrezygnować z nakładki choć na samą nakładkę mieli ważną licencję. Autodesk kupił producenta extendera i automatycznie wypowiedział wszystkie licencje z nakazem odinstalowania extendera - znaczy się zabrał isofixy z fotelika 😞 Co ci po foteliku jak nie można go przymocować. Gdyby ktoś miał fotelik w samochodzie na podstawie licencji na użytkowanie, to po wypowiedzeniu licencji należałoby zaprzestać korzystania z tego fotelika po upływie wypowiedzenia.
  16. Druga interpretacja przemawia do mnie bardziej, ponieważ spełnienie tych trzech warunków powoduje, że zakup licencji nosi cechy transakcji kupna-sprzedaży, która z natury jest nieodwołalna (oczywiście z nielicznymi wyjątkami będącymi przedmiotem analizy sądowej) i nie wymaga dodatkowych klauzul.
  17. Źródło : Czy istnieje licencja wieczysta na korzystanie z utworu? Oczywiście jest to interpretacja. Niestety ani w licencji Autodesk'u ani ZwSOFT'u klauzuli niewypowiadalnosci nie ma 😞 I jeszcze jeden link Niewypowiadalna licencja na czas nieokreślony
  18. Masz może do porównania wyniki na starszym silniku?
  19. Niestety chyba należy wieczystość rozumieć tak, że zainstalowany i aktywowany program może działać w nieskończoność. W tym sensie umowa nie jest ograniczona w czasie. Natomiast licencja nie mówiła nic o wieczystości działania serwerów do aktywacji licencji. Wyłączenie serwerów licencji nie ogranicza działania aktywnych stanowisk. Tak czy siak Autodesk wykorzystuje tą metodę na sukcesywne rugowanie starych wersji z obiegu. Nie da się zagwarantować, że w przyszłości firmy opierające licencjonowanie na softkey'ach nie pójdą w ślady Autodesku. W tym kontekście licencja oparta o klucz sprzętowy jest "bardziej wieczysta" niż "wieczysty" softkey 😉
  20. No dobra, ale jak szybki. Gdzieś jest jakieś zestawionko?
  21. Było to już sygnalizowane. Przydała by się opcja izolowania zaznaczonych obiektów przy wywołaniu obrotu za pomocą SHIFT+SKM. Jak się wywoła 3dOrbit z ikony to obiekty są izolowane. Przyspiesza to nieco działanie te funkcji. Przy SHIFT+SKM niestety przy obracaniu są widoczne wszystkie obiekty i przy dużej ich ilości trochę może się mulić.
  22. Witam. Kiedy kody aktywacyjne do wersji 2020 będą możliwe do pobrania z https://licencja.zwcad.pl
  23. Mam wrażenie, że położenie okna Command jest zapisywane jeżeli wyjście z programu jest z zapisem pliku. Jeżeli odrzuci się zapis pliku aktualna pozycja tego okna nie jest zapamiętywana.
  24. Mam te wszystkie opcje zaznaczone. Jak otwieram plik bezpośrednio to komunikat się pojawia i w 2019 i w 2020. Jak otwieram plik z podpiętą referencją to w 2019 ta operacja przebiega normalnie czyli jest komunikat, wciskam Yes/No i idzie dalej. W 2020 komunikatu nie ma tylko zwcad zamarza. Jak do czystego pliku podpinam referencję to obie wersie zamarzają nie pokazując żadnego komunikatu. Tylko systemowy że aplikacja ZwCAD przestała odpowiadać.