Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Blocktabelleneinträge

Antwort erstellen  Neues Thema erstellen
CAD.de Login | Logout | Profil | Profil bearbeiten | Registrieren | Voreinstellungen | Hilfe | Suchen

Anzeige:

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen nächster neuer Beitrag | nächster älterer Beitrag
  
Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte
Autor Thema:  Blocktabelleneinträge (725 mal gelesen)
AndreasM2000
Mitglied
CAD-Projektleiter, Zeichner, Programmierer


Sehen Sie sich das Profil von AndreasM2000 an!   Senden Sie eine Private Message an AndreasM2000  Schreiben Sie einen Gästebucheintrag für AndreasM2000

Beiträge: 21
Registriert: 24.11.2013

https://autocaddotnetsamples.wordpress.com/

erstellt am: 23. Aug. 2015 10:19    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

Hallo,
ich versuche externe (dwg)Blockdateien einzulesen, um sie später zu benutzen. In der Historie dieses Forums habe ich auch ein Beispiel gefunden, dass erstmal gut funktioniert:

            string acDwg = "C:\\Temp\\Blume.dwg";
            Document doc = Application.DocumentManager.MdiActiveDocument;
            Editor ed = doc.Editor;
            Transaction tr = doc.TransactionManager.StartTransaction();
            try
            {
                string dwgName = HostApplicationServices.Current.FindFile(acDwg, Application.DocumentManager.MdiActiveDocument.Database, FindFileHint.Default);
                Database db = new Database(false, false);
                db.ReadDwgFile(dwgName, System.IO.FileShare.Read, true, "");
                ObjectId BlkId;
                BlkId = doc.Database.Insert(dwgName, db, false);
                BlockTable bt = (BlockTable)tr.GetObject(doc.Database.BlockTableId, OpenMode.ForRead, true);
                BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                //btr.Name = "Blume";
                BlockReference bref = new BlockReference(new Autodesk.AutoCAD.Geometry.Point3d(10, 10, 0), BlkId);
                btr.AppendEntity(bref);
                tr.AddNewlyCreatedDBObject(bref, true);
                tr.Commit();
            }

2 Dinge möchte ich aber ändern. Zum einen wird der Block ohne Namen in die Blocktabelle geschrieben. Ich habe versucht, in an die BlockTableRecord zu hängen. Bekomme aber eine Fehlermeldung (invalidInput). Aber genau hier müsste es eigentlich gemacht werden, denke ich.
Zum anderen möchte ich nicht gleich den Block (als Blockreference) in die Zeichnung einfügen. Der Eintrag in die Blocktabelle, wird aber erst sichtbar, wenn vorher eine Blockreference erzeugt und dann der BlockTableRecord zugewiesen wird. Wie könnte ich das umgehen?

Gruß Andreas

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Ingenieur Studio HOLLAUS
Mitglied
CAD / CAFM / GIS Beratung-Programmierung-Schulung


Sehen Sie sich das Profil von Ingenieur Studio HOLLAUS an!   Senden Sie eine Private Message an Ingenieur Studio HOLLAUS  Schreiben Sie einen Gästebucheintrag für Ingenieur Studio HOLLAUS

Beiträge: 1049
Registriert: 06.11.2008

Autocad 2 bis Autocad 2020 (+Map3D, +Civil3D, +Infraworks)
RKV .... CAFM+mehr
HMap ... Vermessung und Verkehr
OoC .... Raumplanung
CBox ... Tools für AutoCAD und BricsCAD (kostenfrei)

erstellt am: 27. Aug. 2015 10:16    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für AndreasM2000 10 Unities + Antwort hilfreich

Dieses Beispiel zeigt, wie von einer DWG eine Blockdefinition in die aktuelle DWG holt:
http://adndevblog.typepad.com/autocad/2012/05/insert-block-from-a-different-dwg-using-net-.html
Hoffe dieses hilft, WBLOCKCLONEOBJECTS ist jedenfalls notwendig, um Geometrie zwischen verschiedenen DWG's zu transportieren.

------------------


www.cars4fun.at

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

AndreasM2000
Mitglied
CAD-Projektleiter, Zeichner, Programmierer


Sehen Sie sich das Profil von AndreasM2000 an!   Senden Sie eine Private Message an AndreasM2000  Schreiben Sie einen Gästebucheintrag für AndreasM2000

Beiträge: 21
Registriert: 24.11.2013

https://autocaddotnetsamples.wordpress.com/

erstellt am: 02. Sep. 2015 16:35    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities

vielen Dank für das Beispiel. Ich habe dann mit den beiden Beispielen solange experimentiert bis ich jetzt den Fehler gefunden habe und die beiden gewünschten Dinge umgesetzt bekomme. Mein entscheidender Fehler im obigen Script war hier:

BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                //btr.Name = "Blume";
Hier versuche ich nicht, wie ich annahm, einen Verweis auf mein (Blume) BlockRecord zu setzen, sondern hier wird ein Verweis auf das ModelSpace-Blockrecord gesetzt. Eine Namenszuweisung wird dann natürlich abgewiesen.
Hier jetzt mein Code, für den, den es interessiert. Es wird eine externe dwg eingelesen, ein Blockname gesetzt und keine Blockreferenz in die Zeichnung (ModelSpace) eingefügt. Aufbauend auf dieser Prinziplösung will ich dann die einzulesenden dwg-Dateien, deren Blocknamevergabe und das Einfügen in die Zeichnung dynamisieren.


            string dwgName = "C:\\Temp\\Blume.dwg";
            Document doc = Application.DocumentManager.MdiActiveDocument;
           
            Transaction acTrans = doc.TransactionManager.StartTransaction();
            try
            {
                Database db = new Database(false, false);
                db.ReadDwgFile(dwgName, System.IO.FileShare.Read, true, "");
                ObjectId BlkId;
                BlkId = doc.Database.Insert(dwgName, db, false);
                BlockTable bt = (BlockTable)acTrans.GetObject(doc.Database.BlockTableId, OpenMode.ForRead, true);
                BlockTableRecord btr_WBlock = (BlockTableRecord)acTrans.GetObject(BlkId, OpenMode.ForWrite);
                btr_WBlock.Name = "Blume";
                acTrans.Commit();
            }
Gruss Andreas

Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP

Anzeige.:

Anzeige: (Infos zum Werbeplatz >>)

Darstellung des Themas zum Ausdrucken. Bitte dann die Druckfunktion des Browsers verwenden. | Suche nach Beiträgen

nächster neuerer Beitrag | nächster älterer Beitrag
Antwort erstellen


Diesen Beitrag mit Lesezeichen versehen ... | Nach anderen Beiträgen suchen | CAD.de-Newsletter

Administrative Optionen: Beitrag schliessen | Archivieren/Bewegen | Beitrag melden!

Fragen und Anregungen: Kritik-Forum | Neues aus der Community: Community-Forum

(c)2023 CAD.de | Impressum | Datenschutz