All Activity

This stream auto-updates     

  1. Yesterday
  2. Last week
  3. 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
  4. Wygląda na to, że nie trzeba dodawać, usuwać i przesuwać. Wystarczy dodać do bazy, otworzyć do zapisu i będzie OK. Twój kod przerobiłbym tak: 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; public Matrix3d transformation; public Jig(Entity txt, Point3d point) : base() { entity = txt; basePoint = point; } 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; SaveToDatabase(tx1); Document doc = Application.DocumentManager.MdiActiveDocument; using (var tr = doc.TransactionManager.StartTransaction()) { var txt = tr.GetObject(tx1.Id, OpenMode.ForWrite) as DBText; var jig = new Jig(txt, new Point3d(0, 0, 0)); Application.DocumentManager.MdiActiveDocument.Editor.Drag(jig); txt.TransformBy(jig.transformation); tr.Commit(); } } 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(); } } } } Choć zaznaczam, że wcale nie czuję się tu jakoś bardzo kompetentny.
  5. Dziękuję bardzo za pomoc, po aktualizacji problem naprawiony, temat do zamknięcia.
  6. W celu naprawienia problemu, proszę w pierwszej kolejności spróbować zaktualizować ZWCAD'a. Z tego co widzę jest to wersja ZWCAD 2017 z października 2016r. Przesyłam link do najnowszej wersji oprogramowania: https://www.zwcad.pl/zwcad-plus-2017/zwcad-2017-sp-3-2-i-3-3.html Wystarczy odinstalować starszą wersję i zainstalować nowszą. W nowszej wersji 2017 poprawiono między innymi drukowanie.
  7. Witam, użytkuję ZWcad w wersji 2016.10.24(10726)_x64, a mój problem jest następujący w momencie próby wydruku do pdf lub uruchomienia funkcji publikuj za każdym razem ZWcad powiększa obszar wydruku, tzn. w modelu mam ustawiony obszar wydruku np 594x840 wszystko co potrzebuję do wydruku mieści się w tym obszarze, dla ułatwienia rysuję sobie ramkę o wymiarach 594x840 ale w pełni świadomy że nie chcę jej drukować a tylko ułatwia mi ustawienie obszaru wydruku, natomiast przy próbie wydruku zarówno przy użyciu DWG to PDF, publikuj, PDFCreator czy innych programów do tworzenia PDF zawsze zwiększa mi kartkę o 1 mm nie wiem czemu i później po publikacji, wydruku do PDF mam kartkę o wymiarach 594.1x841 zamiast 594x840. We wszystkich ustawieniach jest podany margines 0 ale to nie pomaga. Czy istnieje jakieś rozwiązanie takiego problemu? Poniżej przykład widoku w w arkuszu i po publikacji do PDF. Widok w modelu: Widok po publikacji:
  8. 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?
  9. Earlier
  10. W tym artykule też zawarliśmy trochę informacji o obsłudze pików PDF w naszym programie CAD.
  11. Adam Klaczek

    Czy można wstawić plik PDF

    Tak - wczytując konwerter PDF: https://www.zwcad.pl/zwcad-plus-2017/kilka-nowosci-i-ulepszen-zwcad/556-wczytanie-plik-pdf-do-edycji.html
  12. Prywatnie mam ZWCAD nie pamiętam czy 2017 czy 2016. W pracy mam ZWCAD Architekture 2018. Czy w tym porogamie można wczytać PDF?
  13. Od ZWCAD 2017 można było wczytać PDF wektorowy i wykonać konwersję na obiektu CAD. W ZWCAD 2019 dodatkowo wprowadzono możliwość podkładania PDFów (tak jak rastry), a w 2020 dodano manager PDF.
  14. Dzięki. W jakiej wersji zostało to wprowadzone?
  15. Adam Klaczek

    Czy można wstawić plik PDF

    Jeszcze osnapy w tym samym PDFie:
  16. Adam Klaczek

    Czy można wstawić plik PDF

    Dzień dobry, Tak - w wersji STD jest podkład PDF, który działa, jak Pan napisał, ale również umożliwia sterowanie warstwami PDFa: Natomiast w wersji PRO, poza podkładem, jest możliwość importu PDF, który konwertuje wektorowy PDF do obiektów CAD:
  17. Witam. Czy można wstawić do rysunku plik PDF. U konkurencji podobno można i jeżeli to wydruk z dwg, to program widzi obiekty i punkty charakterystyczne.
  18. Jarek

    Warstwa z mapy

    Nie prościej dołączyć plik jako xref?
  19. dmatusz3

    Warstwa z mapy

    Może polecenie _LAYMRG ? https://www.zwcad.pl/help/zwcad-help/laymrg.html
  20. Łukasz86

    Warstwa z mapy

    Czy mógłby ktoś podpowiedzieć w jaki sposób z wczytanej mapy drogi w dxf z wielu warstw stworzyć jedną warstwę jako podkład mapowy do dalszej pracy?
  21. Oto skrypt do zmiany stylu multilini https://cad.szansa.net.pl/Skrypty_wsparcie_uzytkownikow/zmiana_stylu_istniejacej_multilinii.lsp Znalezione na forum autocada link tutaj Po wczytaniu dostępne będzie polecenie CMLS Po uruchomieniu i wskazaniu multilinii pojawi się okno z prośbą o wskazanie nowego stylu.
  22. To jakiś psychiatryk, nie da się odbić lustrzanie multilini bo się krzaczy.
  23. Tak, ta multilinia działa ale pozostaje jeszcze problem jak zmienić rodzaj multilinii bez kasowania i rysowania jej od nowa.
  24. Proszę spróbować wczytać styl multilinii styl-mline.mln i zobaczyć czy jest dobrze na wydruku. Natomiast ZWCAD nie pozwala na uruchamianie plików *.fas i *.vlx z powodu ograniczeń patentowych. Teoretycznie możemy zmienić nieco nagłówek pliku vlx od @kojacek i zmienić rozszerzenie pliku na obsługiwane przez ZWCAD. Pytanie tylko czy autor skryptu zgadza się na taką operację?
  25. https://kojacek.wordpress.com/2017/09/22/edycja-multilinii/
  26. Jak rysować poli lub multilinią żeby przesłaniała ona wszystko co jest niżej ale żeby była tylko krawędź a wypełnienie było tylko przekrywające, bez koloru. Z tego co mi się wydaje to się nie da bo zawsze jest problem. Jak rysuję polilinią to nie da się ustawić w ogóle osobno wypełnienia a osobno obrysu. Jak rysuję multilinią to jest trochę lepiej bo daje się ustawić inny obrys i inne tło ale tło nigdy nie jest bezbarwne tylko musi być jakiś kolor. Poza tym, najważniejsze, jak do cholery podmienić istniejącą multilinię na inną wcześniej zdefiniowaną bez rysowania jej od nowa ?
  1. Load more activity