Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Block einfügen mit Beschriftungsmaßstab

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:  Block einfügen mit Beschriftungsmaßstab (2051 mal gelesen)
SchwedeNK
Mitglied
Holztechniker


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

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 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 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


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

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 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

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/3243300

Hat 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


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

Beiträge: 218
Registriert: 24.08.2005

erstellt am: 11. Feb. 2013 17:00    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 SchwedeNK 10 Unities + Antwort hilfreich

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 ansehenTeamleitung, Gruppenleitung
SchwedeNK
Mitglied
Holztechniker


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

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 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,

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 >>)

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