| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte | | | | PNY wird von NVIDIA zum Händler des Jahres gewählt – zum dritten Mal in Folge, eine Pressemitteilung
|
Autor
|
Thema: Civil3d: Breakline Add/Delete (940 mal gelesen)
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009
|
erstellt am: 17. Okt. 2015 17:05 <-- editieren / zitieren --> Unities abgeben:
Hallo! Mich beschäftigt das Thema "Add Breaklines" in Civil. Hier besteht manuell die Möglichkeit Polylinien aller Art bzw. Featurelines zuzufügen. Zu allererst ist meine Frage, Zum Auslesen der Definition verwende ich zunächst SurfaceDefinitionBreaklines Lese ich diese aus, bekomme ich alle Breaklines, die zugefügt wurden. Könnte man diese Definitions auch wieder auflösen bzw. in gleichnamige Breaklinesets neue Polys oder fl hinzufügen. Oder gibt es einen Weg an die Entities der Breaklines (nämlich der Poly-Entity) heranzukommen. Irgendwo ist mir da etwas von COM-objekten herumgeschwirrt, womit ich gar nix anfangen konnte siehe Code aus dem Netz hier: Code: public static ObjectIdCollection GetBreaklineEntityIds(TinSurface surf, SurfaceOperationAddBreakline brklineOp) { string name = brklineOp.Description; ObjectIdCollection result = new ObjectIdCollection(); object tinsurf = surf.AcadObject; object brklines = (object)tinsurf.GetType().InvokeMember("Breaklines", System.Reflection.BindingFlags.GetProperty, null, tinsurf, null); object[] args = new object[1]; for (int j = 0; j < (int)brklines.GetType().InvokeMember("Count", System.Reflection.BindingFlags.GetProperty, null, brklines, null); j++) { args[0] = j; object brklin = brklines.GetType().InvokeMember("Item", System.Reflection.BindingFlags.InvokeMethod, null, brklines, args); string desc = (string)brklin.GetType().InvokeMember("Description", System.Reflection.BindingFlags.GetProperty, null, brklin, null); if (desc == name) { object[] ents = (object[])brklin.GetType().InvokeMember("BreaklineEntities", System.Reflection.BindingFlags.GetProperty, null, brklin, null); for (int i = 0; i < ents.GetLength(0); i++) { ObjectId id = Autodesk.Aec.DatabaseServices.DBObject.FromAcadObject(ents[i]); result.Add(id); } } } return result; }
------------------ Gruss Dirk Blog | Adolf Spende | Infra-Feed | ÅF AB
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 17. Okt. 2015 17:14 <-- editieren / zitieren --> Unities abgeben:
|
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009
|
erstellt am: 17. Okt. 2015 20:38 <-- editieren / zitieren --> Unities abgeben:
Der Blogg liefert eigentlich schon die Lösung, damit können alle BreaklineSets (alle Breaklines, in einem gewählten TinSurface) gelöscht werden. Meine überlegungen gehen weiter, ich möchte die Breaklines gleich beim Anlegen anhand der Beschreibung klassifizieren. Gibt es vielleicht eine Möglichkeit, entspr. der Beschreibung, in einen bestehenden Breaklineset, neue Breaklines (inform von Polylinien oder Featurelines) zuzufügen ? Bei der Methode oSurface.BreaklinesDefinition.AddStandardBreaklines(new ObjectIdCollection(lines), 10, 5, 5, 0); werden immer nur neue Sets angelegt ------------------ Gruss Dirk Blog | Adolf Spende | Infra-Feed | ÅF AB
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
cadplayer Ehrenmitglied CADniker
Beiträge: 1833 Registriert: 28.04.2009 Windows 10 64bit system Autocad Civil3d 2020 ENGLISH Visual Studio 2019 OpenDCL.Runtime.9<P>
|
erstellt am: 18. Okt. 2015 11:36 <-- editieren / zitieren --> Unities abgeben:
BreaklineSet mit eigens bestimmter Beschreibung anzulegen, funktioniert wahrscheinlich nur mit dem COM-API ?! .NET sind keine Beschreibungen zulässig, weil ich da nur eine Property Description für SurfaceBreakline finden kann. Habe ich etwas übersehen oder gibt es eine Möglichkeit mit .NET auch auf das COM-API zuzugreifen ? Hier die Code, den ich mir für das Civil-API wünschen würde. Code: ' Create the polyline basis for the breakline. Dim o3DPoly as Acad3DPolyline Dim dPoints(0 To 8) As Double dPoints(0) = 1200: dPoints(1) = 1200: dPoints(2) = 150 dPoints(3) = 2000: dPoints(4) = 3000: dPoints(5) = 120 dPoints(6) = 3000: dPoints(7) = 2000: dPoints(8) = 100 Set o3DPoly = oAeccDocument.Database.ModelSpace _ .Add3DPoly(dPoints) o3DPoly.Closed = False Dim oBreakline As AeccSurfaceBreakline Dim vBLines As Variant ' This has to be an array, even if we only have one entity. Dim oEntityArray(0) As AcadEntity Set oEntityArray(0) = oAeccDocument.Database.ModelSpace _ .Add3DPoly(dPoints) Set oBreakline = oTinSurface.Breaklines.AddStandardBreakline _ (oEntityArray, "Sample Standard Break" , 1#)
Die Methode bietet nur das Civil-API
Code: Tinsurface.BreaklinesDefinition.AddStandardBreaklines(ObjIdColl, 10, 5, 5, 0);
[Diese Nachricht wurde von cadplayer am 18. Okt. 2015 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|