| | | Gut zu wissen: Hilfreiche Tipps und Tricks aus der Praxis prägnant, und auf den Punkt gebracht für Autodesk Produkte |
Autor
|
Thema: Block einfügen mit Beschriftungsmaßstab (2051 mal gelesen)
|
SchwedeNK Mitglied Holztechniker
Beiträge: 43 Registriert: 19.05.2011 AutoCAD 2009 - 2018 Visual Studio Express 2010 / 2012 /2015 Windows 10 64 Bit Windows 8.1 Pro 64 Bit
|
erstellt am: 08. Dez. 2012 13:18 <-- editieren / zitieren --> Unities abgeben:
Hallo zusammen, ich bin dabei mir einen Code zu schreiben, der einen dynamischen Block als .dwg in meine aktuelle Zeichnung einfügt. Problem: Der dynamische Block soll nur bei einem bestimmten Beschriftungs-Maßstab zu sehen sein. Füge ich diese .dwg manuell über "Block einfügen" ein, funktioniert alles wunderbar. Wenn ich die .dwg allerdings über den Code einfüge, ist der Block nicht annotativ. Kann mir jemand einen Tipp geben woran es liegt? anbei der Code-Schnipsel für das Einfügen des Blockes. Code: Dim Titelpunkt As New Point3d(minpt.X, minpt.Y, 0) 'Punkte vorher deklariert Dim fname As String = "Detailbox" 'Blockname Dim fstring As String = "E:\AutoCAD\VBA\Programme\" 'Pfad Dim blktbrecMod As BlockTableRecord = trans.GetObject(blktb(BlockTableRecord.ModelSpace), OpenMode.ForWrite) 'Modelbereich Dim bt As BlockTable = DirectCast(trans.GetObject(db.BlockTableId, OpenMode.ForRead), BlockTable) Dim btr As BlockTableRecord Dim blkid As ObjectId If Not bt.Has(fname) Then btr = trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite) Dim Bdb As Database = New Database(False, True) Using Bdb Bdb.ReadDwgFile(fstring + fname + ".dwg", System.IO.FileShare.Read, False, "") blkid = db.Insert(fname, Bdb, True) End Using End If btr = DirectCast(trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite), BlockTableRecord) If String.IsNullOrEmpty(btr.Name) Then btr.UpgradeOpen() btr.Name = fname btr.DowngradeOpen() End If Dim blk As New BlockReference(Titelpunkt, blkid) blktbrecMod.AppendEntity(blk) trans.AddNewlyCreatedDBObject(blk, True)
Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
SchwedeNK Mitglied Holztechniker
Beiträge: 43 Registriert: 19.05.2011 AutoCAD 2009 - 2018 Visual Studio Express 2010 / 2012 /2015 Windows 10 64 Bit Windows 8.1 Pro 64 Bit
|
erstellt am: 09. Feb. 2013 16:40 <-- editieren / zitieren --> Unities abgeben:
Ich bin mir nicht sicher ob es ein unlösbares Problem ist oder ob ich mich vielleicht zu ungenau ausgedrückt habe. Habe nach langer Recherche im Netz nicht zu diesem Thema gefunden, oder aber ungelöste Fragen. http://forums.autodesk.com/t5/NET/Annotative-block-insert-and-annotative-scale-of-modelspace/td-p/3243300Hat es wirklich etwas mit diesem Textcode zu tun?
Code:
If acBlkRef.Annotative = AnnotativeStates.True Then Dim ocm As ObjectContextManager = acCurDb.ObjectContextManager Dim occ As ObjectContextCollection = ocm.GetContextCollection("ACDB_ANNOTATIONSCALES") Internal.ObjectContexts.AddContext(acBlkRef, occ.CurrentContext) End If
Ich kann mir den Zusammenhang absolut nicht erklären und hoffe auf eure Hilfe... Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
Andreas Widmann Mitglied ATHENA Support/Training
Beiträge: 218 Registriert: 24.08.2005
|
erstellt am: 11. Feb. 2013 17:00 <-- editieren / zitieren --> Unities abgeben: Nur für SchwedeNK
Hallo Schwede, ich denke nicht dass es unlösbar ist. Im ACAD sieht es so aus als wäre die Maßstabsliste eine Eigenschaft des Blocks. Aber wenn ich den Codeschnipsel ansehe kommt mir der Gedanke: Was wenn jeder Maßstab der Zeichnung eine Auflistung der anzuzeigenden Objekte ist? Dann ergibt der Code für mich mehr Sinn - Prüfe auf Beschriftung Ja/nein - ContextManager der Zeichnung abrufen (noch nie damit gearbeitet) - Collection der Maßsstäbe abrufen - Der Auflistung des aktuellen Maßstabs den Block hinzufügen ... Alles aber nur geraten und interpretiert ------------------ Gruß Andreas ------------------------------------------------------------------------------------------------------------------------------------ Die Antwort ist 42! Die Antwort ist 42! Die Antwort ist 42! ...wenn ich nur die Frage wüsste... [Diese Nachricht wurde von Andreas Widmann am 11. Feb. 2013 editiert.] [Diese Nachricht wurde von Andreas Widmann am 11. Feb. 2013 editiert.] Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Bauleiter / Projektleiter für Industrie- und Sondergerüstbau (w/m/d) | Seit der Gründung 1976 hat sich aus dem ehemals klassischen Gerüstbauer MECKETH ein innovativer und überregional operierender Spezialist für vielseitige technische Sonderlösungen in allen Bereichen der Gerüst- und Höhentechnik entwickelt. Um auch künftig der Dynamik des Marktes gewachsen zu sein, suchen wir ab sofort für unsere Zentrale in Paderborn eine/n erfahrene/n Bauleiter/Projektleiter für Industrie- und Sondergerüstbau (m/w/d).... | Anzeige ansehen | Teamleitung, Gruppenleitung |
|
SchwedeNK Mitglied Holztechniker
Beiträge: 43 Registriert: 19.05.2011 AutoCAD 2009 - 2018 Visual Studio Express 2010 / 2012 /2015 Windows 10 64 Bit Windows 8.1 Pro 64 Bit
|
erstellt am: 04. Apr. 2013 09:24 <-- editieren / zitieren --> Unities abgeben:
Hallo, Danke für den Tipp Andreas, habe es soweit hinbekommen, dass der Block als Beschriftungsobjekt eingefügt wird. Hier der Code: Code:
Dim DwgNmAnsTit As String = "N:\Konstruktion\AutoCAD\Block_Layout\Beschriftung\Symbol_Ansichtstitel.dwg" Dim blkNmAnsTit As String = "Symbol_Ansichtstitel" Dim insPtAnsTit As Point3d Dim curdb As Database = doc.Database Dim loc As DocumentLock = doc.LockDocument() Using loc Dim trans As Transaction = doc.TransactionManager.StartTransaction Using trans Try Dim blkid As ObjectId Dim bt As BlockTable = CType(trans.GetObject(curdb.BlockTableId, OpenMode.ForRead, False), BlockTable) Dim btr As BlockTableRecord Dim dbBl As Database = New Database(False, True) Using dbBl dbBl.ReadDwgFile(DwgNmAnsTit, System.IO.FileShare.Read, False, "") blkid = curdb.Insert(blkNmAnsTit, dbBl, True) If dbBl.AnnotativeDwg Then Using btrAnnotative As BlockTableRecord = DirectCast(trans.GetObject(blkid, OpenMode.ForWrite), BlockTableRecord) btrAnnotative.Annotative = AnnotativeStates.[True] End Using End If Dim btrec As BlockTableRecord = CType(trans.GetObject(blkid, OpenMode.ForRead, False), BlockTableRecord) Dim bref As BlockReference = New BlockReference(insPtAnsTit, blkid) Dim ocm As ObjectContextManager = curdb.ObjectContextManager Dim occ As ObjectContextCollection = ocm.GetContextCollection("ACDB_ANNOTATIONSCALES") ObjectContexts.AddContext(bref, occ.CurrentContext) Dim mat As Matrix3d = Matrix3d.Identity bref.TransformBy(mat) btr.AppendEntity(bref) trans.AddNewlyCreatedDBObject(bref, True) End Using ed.UpdateScreen() trans.Commit()
Jetzt habe ich aber das Problem, dass ich jedesmal einen neuen Maßstab zur Liste hinzufüge. Ich möchte jedoch einen bereits in der Liste vorhandenen Maßstab für den Block festlegen. Kann mir da noch jemand einen Tipp geben? Wäre sehr dankbar für jede Hilfe!! Eine Antwort auf diesen Beitrag verfassen (mit Zitat/Zitat des Beitrags) IP |
| Anzeige.:
Anzeige: (Infos zum Werbeplatz >>)
|