| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Unterschied Line vs Line3d (700 mal gelesen)
|
KevinK Mitglied
Beiträge: 12 Registriert: 05.09.2012
|
erstellt am: 10. Okt. 2012 10:45 <-- editieren / zitieren --> Unities abgeben:
Hallo Zusammen, ich habe folgenden Code:
Code:
Database db = HostApplicationServices.WorkingDatabase; Transaction tr = db.TransactionManager.StartTransaction(); BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead); BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite); Point3d _upperLeft = new Point3d(0.0, 0.0, 0.0); Point3d _upperRight = new Point3d(0.0, 50.0, 0.0); Line mRect = new Line(_upperLeft, _upperRight); btr.AppendEntity(mRect); tr.AddNewlyCreatedDBObject(mRect, true); tr.Commit(); tr.Dispose();
Wenn ich nun dasselbe mit Line3d machen wollte, wie würde das dann aussehen? Line hat den Typ Entity. Line3d den Typ Line3d. Worin besteht hier der Unterschied? Weiterhin worin liegt der Unterschied zwischen dem obigen Code und folgenden?
Code:
Database db = Application.DocumentManager.MdiActiveDocument.Database; Transaction trans = db.TransactionManager.StartTransaction(); BlockTableRecord mSpace = (BlockTableRecord)trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);Point3d _Startpoint = new Point3d(0.0, 0.0, 0.0); Point3d _Endpoint = new Point3d(5.0, 5.0, 5.0); Line linie1 = new Line(_Startpoint,_Endpoint); mSpace.AppendEntity(linie1); trans.AddNewlyCreatedDBObject(linie1,true); trans.Commit(); trans.Dispose();
Hab das noch nicht ganz begriffen.
Vielen Dank. Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 10. Okt. 2012 20:42 <-- editieren / zitieren --> Unities abgeben: Nur für KevinK
Hallo, Line3d erbt nicht von Entity, folglich kannst du kein grafisches Element davon erzeugen. Ein anderes Beispiel ist auch das Curve-Object. Unterschiede: Das erste öffnet immer den Modellbereich und fügt dort das Entity hinzu, das andere den Blocktablerecord des aktuellen Modell-oder Papierbereich. 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 |
KevinK Mitglied
Beiträge: 12 Registriert: 05.09.2012
|
erstellt am: 11. Okt. 2012 17:26 <-- editieren / zitieren --> Unities abgeben:
Für welche Zwecke verwende ich z.B. dann Line3d. Noch eine Frage: Ich habe jetzt eine Abfrage erstellt, die alle ObjectIds ausliest. Wenn ich nun eine leere Zeichnung nehme und die Abfrage ausführe, erhalte ich eine ID von einem nicht gezeichneten Objekt. Um welches Objekt handelt es sich da? Vielen Dank! Grüße Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 11. Okt. 2012 17:31 <-- editieren / zitieren --> Unities abgeben: Nur für KevinK
Zitat: Original erstellt von KevinK: Für welche Zwecke verwende ich z.B. dann Line3d.
keine Ahnung. Mit diesem Objekt habe ich noch nichts gemacht.
Zitat: Original erstellt von KevinK: Ich habe jetzt eine Abfrage erstellt, die alle ObjectIds ausliest. Wenn ich nun eine leere Zeichnung nehme und die Abfrage ausführe, erhalte ich eine ID von einem nicht gezeichneten Objekt.Um welches Objekt handelt es sich da?
ohne zu wissen, wie du die ID's ausliest, kann man dazu nichts sagen. Schau dir doch aber das Objekt an (öffnen zu lesen), dann solltest du doch zumindest mal den Typen des und die Eigenschaften des Objektes in Erfahrung bringen können und daraus dann Rückschlüsse ziehen können? 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 |
KevinK Mitglied
Beiträge: 12 Registriert: 05.09.2012
|
erstellt am: 11. Okt. 2012 18:15 <-- editieren / zitieren --> Unities abgeben:
ausgelesen habe ich es so:
Code:
PromptSelectionResult pen; pen = ed.SelectAll(); int i = new int(); i = pen.Value.Count; ObjectId[] ps = new ObjectId[i]; ps = pen.Value.GetObjectIds(); BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead); BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite); for (int j = 0; j < i; j++) { ed.WriteMessage(ps[j].ToString()); object neu; neu = tr.GetObject(ps[j], OpenMode.ForRead); ed.WriteMessage(neu.GetType().ToString()); }
das Ergebniss ist: (8796087825312)Autodesk.AutoCAD.DatabaseServices.Viewport Layer? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
KevinK Mitglied
Beiträge: 12 Registriert: 05.09.2012
|
erstellt am: 11. Okt. 2012 19:09 <-- editieren / zitieren --> Unities abgeben:
Mein ganzer Code sieht jetzt folgendermaßen aus. Code:
namespace ACADnet { public class select { [CommandMethod("sel")] public void Command1_Method() { Database db = HostApplicationServices.WorkingDatabase; Editor ed = MgdAcApplication.DocumentManager.MdiActiveDocument.Editor; try { using (Transaction tr = db.TransactionManager.StartTransaction()) { PromptSelectionResult pen; pen = ed.SelectAll(); int i = new int(); i = pen.Value.Count; ObjectId[] ps = new ObjectId[i]; ps = pen.Value.GetObjectIds(); BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead); BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite); for (int j = 0; j < i; j++) { ed.WriteMessage(ps[j].ToString()); object neu; neu = tr.GetObject(ps[j], OpenMode.ForRead); if (neu.GetType() == typeof(Line)) { Line mline = new Line(); ed.WriteMessage("ist eine Linie"); }
ed.WriteMessage(neu.GetType().ToString()); } tr.Commit(); } } catch (System.Exception ex) { Debug.WriteLine(ex.ToString()); ed.WriteMessage(ex.ToString()); } } } }
Bei der If-Abfrage möchte ich jetzt alle Linien die vorhanden sind ansprechen. Also sowas in der Art: mLine = tr.GetObject(ps[j], OpenMode.ForRead); Wie kann ich jetzt die Objekte, die eine Linie sind auch als Linie ansprechen? Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Brischke Moderator CAD on demand GmbH
Beiträge: 4171 Registriert: 17.05.2001 AutoCAD 20XX, defun-tools
|
erstellt am: 11. Okt. 2012 22:25 <-- editieren / zitieren --> Unities abgeben: Nur für KevinK
Hallo, wie mir scheint, bist du anscheinend vollkommen autodidaktisch unterwegs. Deine Frage wie man nun ein Objekt gezielt als Line anspricht kann ich dir zwar beantworten, würde aber dann auch nur weitere Fragen provozieren. Folglich müsste ich sehr weit ausholen, was aber zum einen über das Forum nur sehr schwer möglich ist, und zum anderen die Forenhilfe übersteigt. Dieses Grundwissen ist für die Forenkommunikation notwendig und kann im Forum auch nicht vermittelt werden. Das soll jetzt bitte nicht falsch verstanden werden, ich bin gerne bereit zu helfen. Ich möchte aber in aller erster Linie nicht einfach nur Lösungen in einem Programmierforum posten, sondern auch das Verständnis, weshalb die Lösung so ist, erreichen. Speziell bei diesem Thema triffst du den Kern der objektorientierten Programmierung: die Vererbung. In meinen Schulungen wende ich dafür einen ganzen Tag auf. Ich denke, nun wird klar, welchen Umfang meine Antwort haben müßte. 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 |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|