Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Blockreferenzen und deren Attribute

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:  Blockreferenzen und deren Attribute (4051 mal gelesen)
Boortsneggor
Mitglied
Ingenieur


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

Beiträge: 49
Registriert: 27.12.2011

Win7 Prof, Visual Studio 2010/2012,
ObjectARX 2008/2012/2013, ACAD
2008/2012/2013

erstellt am: 27. Dez. 2011 22:36    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 bin gerade dabei, ein kleines Interface für AUTOCAD mittels ObjectARX und C# zu erstellen. Es soll bestimmte Blöcke in die Zeichnung einfügen und Blockreferenzen davon erstellen und bearbeiten. Die Blöcke beinhalten verschiedene Textattribute, wobei nur zwei davon sichtbar sind. Meine erste Frage wäre, ob es eine Eigenschaft der Attributreferenzen gibt, die das Attribut nur in der Zeichnung als unsichtbar markiert? Wenn ich die Option "visible" auf "true" setze, dann wird das jeweilige Attribut in der Zeichnung unsichtbar, und kann auch im Attribut-Editor vom AUTOCAD nicht mehr gesehen werden.
Und mein zweites Problem: Ich habe eine Funktion integriert, die es ermöglicht, dass alle Positionen der sichtbaren Attribute bestimmter Blöcke um einen festgelegten Wert verschoben werden. Dies funktioniert bei manchen Blöcke gut und bei anderen verändert sich die Position nicht. Ich kann aber auch keine Fehlermeldung oder ähnliches abfangen. Die Blöcke unterscheiden sich auch lediglich in der Anordnung der sichtbaren Attribute. Ansonsten sind sämtliche Eigenschaften gleich. Wie kann es dann sein, dass ich bei den Blockreferenzen des einen Blockes die Attributpositionen verändern kann, und bei den anderen nicht?? Ich habe auch schon mehrere Eigenschaften der Attributreferenzen verglichen und konnte keine Unterschiede feststellen. Die Eigenschaft "lockposition" steht auf "false"! Gibt es eventuell eine Möglichkeit, die Eigenschaften des einen Blockes auf den anderen zu übertragen, oder könnte es an einer Eigenschaft der Blöcke bzw. Blockreferenzen liegen? Ich bin echt am verzweifeln und hoffe, dass mir hier vielleicht einer weiterhelfen kann!

Vielen Dank im Voraus!

grüße

------------------
Robert Menger

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2014
Plateia, Canalis
Visual Basic

erstellt am: 27. Dez. 2011 23:25    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 Boortsneggor 10 Unities + Antwort hilfreich

Zunächst mal: Herzlich Willkommen im Forum 

Zu Deiner ersten Frage: Schau Dir mal die Eigenschaft Invisible an
Allerdings gibt es da noch viel mehr Abhängigkeiten bei den Attributen.

Den zweiten Teil habe ich nicht so ganz verstanden, was Du machen möchtest (Absätze würden das Lesen auch vereinfachen) und was Du schon gemacht hast (Codesegmente wären hilfreich).

Vielfach liegt es schon an der Unterscheidung von Block und Blockreferenz oder einfacher / dynamischer Block.
Je nach Zielsetzung.

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

Boortsneggor
Mitglied
Ingenieur


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

Beiträge: 49
Registriert: 27.12.2011

Win7 Prof, Visual Studio 2010/2012,
ObjectARX 2008/2012/2013, ACAD
2008/2012/2013

erstellt am: 01. Jan. 2012 18:17    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 KlaK,

erstmal natürlich ein frohes neues Jahr! Vielen Dank für deine Antwort. Du hast natürlich recht, mein Eintrag war sehr chaotisch.
Ich versuch es mal mit etwas mehr Struktur  .

Kannst du mir sagen, was die Eigenschaft "visible" von "invisible" bei den Attributreferenzen unterscheidet?

Zu meinem anderen Problem. Ich habe zwei verschiedene Typen von Blöcken in meinen Zeichnungen. Beide sind bis auf die Anordnung zweier Textattribute identisch.
Nun habe ich in meiner Zeichnung von beiden Blöcken mehrere Blockreferenzen, die ich mit meinem Interface bearbeiten möchte.
Ich habe jetzt eine Funktion geschrieben, die die sichtbaren Textattribute der Blockreferenzen alle um einen festgelegten Wert verschiebt.

       

Code:
public void MoveAttribute(string attribute, double x, double y, double z)
        {
            AttributeReference attrRef;
            Transaction tr = this.StartTrans();
            Point3d choords = new Point3d();

            try
            {

                foreach (ObjectId id in blR.AttributeCollection)
                {
                    attrRef = tr.GetObject(id, OpenMode.ForRead) as AttributeReference;
                    if (attrRef.Tag == attribute)
                    {
                        try
                        {
                            //doc.Editor.WriteMessage("\n KKS: "+attrRef.TextString+" verifiable: ");
                            attrRef.UpgradeOpen();
                            Point3d oc = attrRef.Position;
                            choords = new Point3d(oc.X + x, oc.Y + y, oc.Z + z);
                            attrRef.Position = choords;
                            attrRef.DowngradeOpen();
                            //doc.Editor.WriteMessage("\n Neue Position: "+attrRef.Position);
                           

                        }catch(Autodesk.AutoCAD.Runtime.Exception e){

                            doc.Editor.WriteMessage("\n Fehler: "+e.Message);
                        }

                    }

                }

            }
            catch (Autodesk.AutoCAD.Runtime.Exception e)
            {

                doc.Editor.WriteMessage("\n" + e.Message);
            }
            finally
            {
                this.StopTrans(tr);
            }

        }



Diese Funktion funktioniert leider nur bei der einen Art der Blöcke. Bei den Blockreferenzen des anderen Blockes kann ich die Position der Attribute nicht verändern. Wie gesagt, die Blöcke bzw. Blockreferenzen unterscheiden sich in Ihren Eigenschaften nicht (zumindest sollten sie das...).
Welche Eigenschaft der Blöcke, Blockreferenzen oder Attribute könnte das Setzen der Position verhindern ( die Positionen der Attributreferenzen sind nicht gesperrt)??

Gibt es eine Möglichkeit alle Eigenschaften eines Blockes auf einen anderen zu übertragen?

Ich glaube, mein Problem ist recht schwierig zu erklären, ich hoffe, es war diesmal etwas verständlicher und über einen Lösungsweg wäre ich sehr dankbar!

grüße robert

------------------
Robert Menger

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 04. Jan. 2012 09:14    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 Boortsneggor 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Boortsneggor:
... Kannst du mir sagen, was die Eigenschaft "visible" von "invisible" bei den Attributreferenzen unterscheidet? ...

Hallo Robert,

Alle Entities haben die Eigenschaft Visible - Damit kann man zum Beispiel die Zeichnungsobjekte unabhängig der Layersteuerung Ein- bzw. Ausblenden. Diese Eigenschaft steht dem Anwender nicht (auch nicht im Eigenschaftenfenster) zur Verfügung.
Die Attribute haben die Eigenschaft Invisible - Diese ist gleichzusetzen mit den Attributeigenschaften Rückwärts oder Auf dem Kopf. Man kann also ein Attribut so einstellen, dass es nicht angezeigt wird. Diese Eigenschaft steht dem Anwender zur Verfügung.

Klar soweit?

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

Boortsneggor
Mitglied
Ingenieur


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

Beiträge: 49
Registriert: 27.12.2011

Win7 Prof, Visual Studio 2010/2012,
ObjectARX 2008/2012/2013, ACAD
2008/2012/2013

erstellt am: 04. Jan. 2012 14:31    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 Holger,

vielen Dank, das hilft mir. Zu meinem Problem mit der Attributpositionierung hat keiner eine Idee??

grüße robert

------------------
Robert Menger

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

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 04. Jan. 2012 15:10    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 Boortsneggor 10 Unities + Antwort hilfreich

Auch dieses Problem wurde oben schon knapp angesprochen, da du dich in der Objektstruktur aber nicht
bis ins Details auskennst und wir nicht sehen können was du siehst .. kann man sehr schlecht helfen  

Poste eine Beispiel DWG mit einer Blockreferenz bei der es nicht funktioniert, wenn noch
eine andere  Blockreferenz dabei ist mit der es klappt wäre dies auch nicht schlimm.
(Beschreiben was wir in der DWG sehen sollten wäre dazu auch noch nett)

Cad.de-Upload => *.DWG in *.txt umbenennen da 'DWG' hier kein zulässiges Upload-Format ist.
Oder irgendwo anders hoch laden und hier verlinken geht natürlich auch.

Auch nicht schlecht zu erfahren wäre sicher wie du das "verschieben" realisiert hast  

Gebe mehr Infos und dir wird sicher weiter geholfen  

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

[Diese Nachricht wurde von cadffm am 04. Jan. 2012 editiert.]

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

KlaK
Ehrenmitglied V.I.P. h.c.
Dipl. Ing. Vermessung, CAD- und Netz-Admin



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

Beiträge: 2624
Registriert: 02.05.2006

AutoCAD LandDesktop R2 bis 2004
Civil 3D 2005 - 2014
Plateia, Canalis
Visual Basic

erstellt am: 04. Jan. 2012 16:15    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 Boortsneggor 10 Unities + Antwort hilfreich

Holger, vielen Dank für die Erklärung. Habe zur Zeit noch Urlaub und nicht alle Unterlagen parat.

@Boortsneggor: Wie cadffm schon schrieb, ein paar Informationen fehlen noch, z.B. wie Du die Objekt-ID (Handle) holst.
Ein oft begangener Fehler ist, dass über Attribut(I) darauf zugegriffen wird und nicht erst kontrolliert wird, ob der TagString mit dem gewünschten Wert übereinstimmt (aber vielleicht ist das in C# identisch mit Deinem attrRef.Tag .

In Deinem Code findet man z.B. keinen Hinweis auf die Definition und Zuweisung von blR.AttributeCollection (Public?)

Sollte es bis dahin nicht schon gelöst sein, nächste Woche mehr ...

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

Boortsneggor
Mitglied
Ingenieur


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

Beiträge: 49
Registriert: 27.12.2011

Win7 Prof, Visual Studio 2010/2012,
ObjectARX 2008/2012/2013, ACAD
2008/2012/2013

erstellt am: 04. Jan. 2012 17:23    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 muss vielleicht noch etwas über meine Rahmenbedingungen erklären. Ich habe teilweise Zeichnungen, die die "UR-Blöcke" und diverse Blockreferenzen davon bereits enthalten.

Um zu den BlockReferenzen weitere Attribute hinzuzufügen, habe ich in den dwg-Files der ursprünglichen Blöcke die Attribute eingebaut um diese neuen Blöcke mit identischem Namen in die Zeichnungen einzufügen. Dann kann ich jeder BlockReferenzen meine neuen Attribute zuweisen. Das funktioniert soweit alles auch prima.

Nun möchte ich ebenso die Position mancher Attribute setzen, und das funktioniert aus irgendwelchen Gründen nur bei BlockReferenzen des einen Blockes. Da muss beim ersten Einfügen der Blöcke irgendwas verändert wurden sein.

Ich habe nun rausgefunden, dass meine Funktion einwandfrei funktioniert, wenn ich die Blockreferenzen mit meinen neu eingesetzten Blöcken synchronisiere (ATTSYNC bzw. BATTMAN).

Das Problem ist bei der ganzen Sache, dass die sichtbaren Attribute der BlockReferenzen Textformatierungen haben, die vom ursprünglichen Block abweichen können, die aber nicht verändert werden sollen. Bei der Synchronisation passiert leider genau das.

Jetzt habe ich entweder die Möglichkeit, die veränderte Option zu finden um ohne SyncAtt auszukommen, oder irgendwie die Textformatierungen der BlockReferenzen zu übertragen.

Noch etwas zu meinem Code. Ich habe mir eine Klasse speziell für meine Blöcke geschrieben, der ich eine BlockReference übergebe. Diese übernimmt das ganze Attribute-Handling.
In einer anderen Klasse filtere ich mir die richtigen Blöcke aus der BlockTable raus, installiere meine AdamBlock-Klasse und übergebe die bLr. Hier mal das Beispiel für die Positionsgeschichte:

Code:
using (tr)
                {
                    try
                    {

                        bT = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
                        bTr = tr.GetObject(bT[BlockTableRecord.ModelSpace], OpenMode.ForRead) as BlockTableRecord;

                        foreach (ObjectId id in bTr)
                        {
                            DBObject dbo = tr.GetObject(id, OpenMode.ForRead) as DBObject;
                            bLr = dbo as BlockReference;

                            if (zz && ez && horz)
                            {
                                if (bLr != null && bLr.Name.Contains("ADAM"))
                                {
                                    AdamBlock block = new AdamBlock(bLr);
                                    block.MoveAttribute("ZEILE_1", x, y, z);
                                    block.MoveAttribute("ZEILE_2", x, y, z);
                                }


Die einzelnen Attribute kann ich mittels Tag der AttributeReference-Class rausfiltern. Soweit sollte auch alles sauber sein.

Vielleicht kann man mein Problem jetzt noch ein bisschen besser nachvollziehen. Das Wichtigste sind die sichtbaren Attribute, die für das Auge unverändert bleiben müssen!

Vielen Dank schon mal für eure Hilfe!

grüße robert

------------------
Robert Menger

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 04. Jan. 2012 17:39    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 Boortsneggor 10 Unities + Antwort hilfreich

Hallo Robert,

hast du das AUTOCAD-Magazin abonniert? Falls dem so ist, kannst du dich wahrscheinlich auf das nächste Heft freuen.
Es ist geplant, dass nun auch .Net-Tools (inkl. Quellcode) veröffentlicht werden, und nicht nur wie bisher Lisp-Programme. Das erste Tool ist dann ein C#.Net-Programm, mit welchem Attribute hinzugefügt werden, ohne dass hinterher das Attsync erforderlich ist, um eben die Nebeneffekte dieses Befehls zu umgehen.

Da mit der Veröffentlichung die Rechte an den Verlag übergehen, kann ich hier nicht den Code posten.

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

Boortsneggor
Mitglied
Ingenieur


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

Beiträge: 49
Registriert: 27.12.2011

Win7 Prof, Visual Studio 2010/2012,
ObjectARX 2008/2012/2013, ACAD
2008/2012/2013

erstellt am: 04. Jan. 2012 19:26    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 Holger,

danke für den Tip. Die Zeitung habe ich nicht abonniert. Die Sache mit dem Hinzufügen eines Attributes ohne attsync habe ich bereits gelöst. Es geht lediglich um die restlichen Eigenschaften bzw. die Textformate und Positionen der sichtbaren Attribute...

grüße robert

------------------
Robert Menger

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

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 05. Jan. 2012 09:55    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 Boortsneggor 10 Unities + Antwort hilfreich

Ein letzter Versuch um dich mit DEINEM Problem voran zu bringen:
Wenn du das Problem nicht erkennst und hilfe willst dann poste wie bereits erwähnt eine Datei mit eine Blockreferenz.

Mein wilder Tip: Du bearbeitest die Blockreferenz gar nicht weil du sie herausfilterst als "nicht ADAM" 

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

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

Boortsneggor
Mitglied
Ingenieur


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

Beiträge: 49
Registriert: 27.12.2011

Win7 Prof, Visual Studio 2010/2012,
ObjectARX 2008/2012/2013, ACAD
2008/2012/2013

erstellt am: 05. Jan. 2012 13:20    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


adamBlocks.zip

 
Du hast recht, vielleicht hilft das. Ich habe jetzt mal den alten Block, so wie er in den Zeichnungen bereits vorhanden sein sollte und meinen neuen Block als dwg-File drangehangen.
Wie gesagt, die Blöcke sollten bis auf ein Attribut identisch sein, sind es aber scheinbar nicht, wo liegt der Unterschied???

Zu deiner "wilden Vermutung": Ich habe in meinem Interface schon mehrere Funktionen, die die BlockReferenzen bearbeiten. Die Funktionieren auch alle. Hier noch mal verbal der Weg, wie ich an meine BlockReferenzen komme:

1.BlockTableRecord aus der BlockTable im Modelspace holen
2.BlockTableRecord mit Schleife durchlaufen und jedes enthaltene Objekt als DBObject holen
3.DBObject auf BlockReferenz fasten
4.Abfrage ob BlockReferenz leer (wenn es sich nicht um eine BlockReferenz handelt) und ob der Name der BlockReferenz "ADAM" enthält

-> Wenn das zutrifft, habe ich meine BlockReferenzen...

Das ist nach meinen Recherchen ein gängiger Weg, aber ich lasse mich auch gern eines besseren belehren  ...

Wie bekomme ich denn eigentlich Zugriff auf meine Ur-Blöcke?

Vielen Dank für eure Hilfe!

grüße robert

------------------
Robert Menger

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

cadffm
Ehrenmitglied V.I.P. h.c.
良い精神



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

Beiträge: 21533
Registriert: 03.06.2002

System: F1
und Google

erstellt am: 05. Jan. 2012 14: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 Nur für Boortsneggor 10 Unities + Antwort hilfreich

Ok, auch wenn das weder ein Block noch eine Blockreferenz war im Anhang, hier vermutlich die "Lösung" :

Du mußt dich mit dem Aufbau von Textobjekten befassen, dein Programm versagt sicher
immer bei den Attributen welche zB. RECHTS ausgerichtet sind, bei LINKS ausgerichteten
wird es hingegen funktionieren, richtig ? - prüfe das mal bitte !

(wobei auch diese Eigenschaft sich bei altem und neuem Block zum Teil unterscheidet)


Soo, nun habe ich auch noch mal in der Hilfe nachgeschaut ob ich ein Wort finde
mit dem du vielleicht was anfangen kannst und hoffe es ist dieses hier: object.TextAlignmentPoint (immer genutzt wenn ein Textobjekt NICHT Ausrichtung LINKS hat)

(sorry, ich kenne mich mit .net und vba 0.01 aus - mir sind nur die DXF-Gruppencodes geläufig. Hoffe die Vokabel bringt dich jetzt weiter  )

------------------
CAD.de System-Angaben  -  CAD on demand  -  User:FAQ(Acad)

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 05. Jan. 2012 14: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 Nur für Boortsneggor 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Boortsneggor:
...Hier noch mal verbal der Weg, wie ich an meine BlockReferenzen komme:

1.BlockTableRecord aus der BlockTable im Modelspace holen
2.BlockTableRecord mit Schleife durchlaufen und jedes enthaltene Objekt als DBObject holen
3.DBObject auf BlockReferenz fasten
4.Abfrage ob BlockReferenz leer (wenn es sich nicht um eine BlockReferenz handelt) und ob der Name der BlockReferenz "ADAM" enthält

-> Wenn das zutrifft, habe ich meine BlockReferenzen...
...


ähmm - das geht aber auch einfacher:
Du kannst doch die Referenzen direkt beim BlockTableRecord abfragen.

Code:

public static ObjectIdCollection GetBlockReferences(BlockTable _bt, Transaction _tr, String _Name)
        {
            ObjectIdCollection _result = null;
            BlockTableRecord _btr = null;
            try
            {
                _btr = (BlockTableRecord)_tr.GetObject(_bt[_Name], OpenMode.ForRead);
                _result = _btr.GetBlockReferenceIds(true, false);
                _btr.Close();
            }
            catch { }
            return _result;
        }


Wie du den Code anwendest, ist dir sicher klar.
(Die Zeichnung habe ich mir noch nicht angesehen).

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

Boortsneggor
Mitglied
Ingenieur


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

Beiträge: 49
Registriert: 27.12.2011

Win7 Prof, Visual Studio 2010/2012,
ObjectARX 2008/2012/2013, ACAD
2008/2012/2013

erstellt am: 06. Jan. 2012 16:04    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 cadffm,

deine Vermutung hat sich bestätigt! Ich muss vorher abfragen, ob es sich um eine Standard-Links-Ausrichtung oder um eine abweichende Textausrichtung handelt.

Code:
attrRef.IsDefaultAlignment

Bei abweichenden Textausrichtung kann ich die Position mit

Code:
attrRef.AlingmentPoint

verändern.
Das sich die Blöcke in der Ausrichtung unterscheiden wusste ich ja, aber ich hätte nie vermutet, dass das was mit der Positionsmanipulation zu tun haben könnte! ;)

Zitat:
Du mußt dich mit dem Aufbau von Textobjekten befassen

Da ich, denke ich mal, noch mehr mit meinen Textattributen anstellen muss, hättest du vielleicht nen Tipp, wo ich dahingehend gute Informationen herbekomme? Ich glaube Literatur zu diesem Thema ist recht rar.

Zitat:
Ok, auch wenn das weder ein Block noch eine Blockreferenz war im Anhang

Noch eine kleine Anmerkung zu deine "Spitze" am Anfang. Ich finde so etwas verwirrt immer ein wenig, wenn man es nicht sofort aufklärt. Die dwg-files waren lediglich die Dateien, die ich als quasi "UR-Blöcke" in die Zeichnungen einfüge. Davon werden dann die Blockreferenzen abgeleitet. Soweit mein Wissensstand. Wenn ich da etwas falsch verstanden habe, würde ich mich freuen, wenn du mich aufklären würdest.

Aber nichts desto trotz habe ich dank deiner Hilfe mein Problem gelöst! Vielen Dank dafür!

@Holger: Wann erscheint das AUTOCAR Magazin denn immer?

grüße robert

------------------
Robert Menger

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

Brischke
Moderator
CAD on demand GmbH




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

Beiträge: 4171
Registriert: 17.05.2001

AutoCAD 20XX, defun-tools

erstellt am: 06. Jan. 2012 16:20    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 Boortsneggor 10 Unities + Antwort hilfreich

Zitat:
Original erstellt von Boortsneggor:
... @Holger: Wann erscheint das AUTOCAR Magazin denn immer? ...

http://www.autocad-magazin.de

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

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