| |
| Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für BricsCAD |
Autor
|
Thema: Schraffuren erstellen per .Net (1044 mal gelesen)
|
jootto Mitglied
Beiträge: 4 Registriert: 13.09.2016
|
erstellt am: 06. Nov. 2016 12:06 <-- editieren / zitieren --> Unities abgeben:
Hallo, in meiner Anwendung müssen ca. 25000 Polylinien gezeichnet werden und mit einer Schraffur versehen werden. Dies dauert im Moment 1-2s. Das Problem ist, dass die Schraffuren oberhalb der Polylinien gezeichnet werden. Möchte ich diese nun in den Hintergrund bringen dauert es ca. 50s. Mein Ziel ist es, die Geometrien jedes mal beim Starten der Anwendung zu zeichnen, wodurch die 50s nicht vertretbar sind. Hier ist der Code mit dem ich im Moment die Hatches in den Hintergrund bringe Das Object Hatches ist hierbei eine ObjectIDCollection in der alle bisher gezeichneten Hatches eingetragen sind).
Code: private static void SetHatchesToBackground() { Database database = HostApplicationServices.WorkingDatabase; _AcDb.TransactionManager manager = database.TransactionManager; using (Transaction action = manager.StartTransaction()) { BlockTable blockTable = action.GetObject(database.BlockTableId, OpenMode.ForRead) as BlockTable; if (blockTable == null) throw new System.NullReferenceException("blockTable == null"); BlockTableRecord blockTableRecord = action.GetObject(blockTable[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord; if (blockTableRecord == null) throw new System.NullReferenceException("block TableRecord == null"); DrawOrderTable dot = action.GetObject(blockTableRecord.DrawOrderTableId, OpenMode.ForWrite) as DrawOrderTable; dot.MoveToBottom(Hatches); action.Commit(); } Hatches.Clear(); }
Habt Ihr Tipps oder kennt ihr einen schnelleren Weg? Schönen Sonntag, jootto
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Ehrenmitglied V.I.P. h.c. CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 ACAD; defun-tools
|
erstellt am: 07. Nov. 2016 10:00 <-- editieren / zitieren --> Unities abgeben: Nur für jootto
Hallo jooto, wie ermittelst du die Hatches? Wie oft wird diese Routine aufgerufen? Wirklich Zeit kostet das Commit() - weshalb man das wirklich nur einmal aufrufen sollte. Und wenn das einmalige Commit() 50sec dauert, dann hast du keine Möglichkeiten, den Vorgang zu beschleunigen. Grüße! Holger ------------------ Holger Brischke CAD on demand GmbH Individuelle Lösungen von Heute auf Morgen.
defun-tools Das Download-Portal für AutoCAD-Zusatzprogramme!
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
jootto Mitglied
Beiträge: 4 Registriert: 13.09.2016
|
erstellt am: 12. Nov. 2016 21:13 <-- editieren / zitieren --> Unities abgeben:
|
CADwiesel Moderator CAD4FM UG
Beiträge: 1968 Registriert: 05.09.2000 AutoCAD, Bricscad Wir machen das Mögliche unmöglich
|
erstellt am: 14. Nov. 2016 10:21 <-- editieren / zitieren --> Unities abgeben: Nur für jootto
25000 Schraffuren hab' ich noch nie probiert, nicht mal annnähernd diese Menge. Wie lange dauert es, wenn du die AutoCAD eigene Draworder Funktionalität dafür verwenden würdest? In Lisp wäre das ein Command Aufruf: eg: (command"_draworder"(ssget"_X" '((0 . "HATCH")))"" "_B") ------------------ Gruß CADwiesel Besucht uns im CHAT
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |