Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  XRecords und XData

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:  XRecords und XData (2005 mal gelesen)
Benny4
Mitglied
Softwareentwickler


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

Beiträge: 178
Registriert: 16.02.2006

AutoCAD 2008
WIN XP Pro SP2

erstellt am: 03. Dez. 2008 15:37    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

Hi,

hab mich jetzt längers mit diesen XRecords und XData beschäftigt. Meines Wissenes kann man mit denen beliebigen AutoCAD Objekten zusätzliche Eigenschaften verpassen. Dies möchte ich jetzt einem Volumenkörper machen, kriege es aber leider nicht hin.

Arbeite mit VB.NET und alle Beispiele die ich bisher gefunden habe, auch in der Hilfe, waren in C#. Hat jemand ein kleines Beispiel für mich, wäre super!

Danke schon mal

------------------
Grüsse Benny

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


Ex-Mitglied

erstellt am: 03. Dez. 2008 16:00    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

zeig mal den Codeteil her, den Du bis jetzt hast und ich bearbeite diesen

- alfred -

Benny4
Mitglied
Softwareentwickler


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

Beiträge: 178
Registriert: 16.02.2006

AutoCAD 2008
WIN XP Pro SP2

erstellt am: 03. Dez. 2008 17:47    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

Hi,

hab da noch gar nichts, weil gar nichts geklappt hat. Erstelle einen Solid und an dem möchte ich Eigenschaften anhängen. Den Solid mache so:

Code:

<CommandMethod("cs")> _
    Public Sub createSolid()
        Dim db As Database = Application.DocumentManager.MdiActiveDocument.Database
        Dim tm As Autodesk.AutoCAD.DatabaseServices.TransactionManager = db.TransactionManager
        'start a transaction
        Dim ta As Transaction = tm.StartTransaction()
        Dim mySolid As Solid3d = New Solid3d()
        Dim solidID As ObjectId

        Try
            mySolid.CreateBox(600, 560, 720)
            Dim bt As BlockTable = tm.GetObject(db.BlockTableId, OpenMode.ForRead, False)
            Dim btr As BlockTableRecord = tm.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForWrite, False)
            solidID = btr.AppendEntity(mySolid)
            tm.AddNewlyCreatedDBObject(mySolid, True)
            ta.Commit()

        Catch ex As Exception
            MsgBox("Unbehandelter Fehler: " + ex.Message.ToString)
        Finally
            ta.Dispose()
        End Try
    End Sub


Und daran möchte ich jetzt Eigenschaften heften, nur wie?
Und dann gleich noch 2 Fragen:
1. Eigentlich möchte ich einen Quader erstellen der die ganzen Grips zum ziehen in der Länge, Breite Höhe hat. Mein Solid lässt sich überhaupt nicht ziehen
2. Wie kann ich auf das Ändern meiner selbst definierten Eigenschaften reagieren? Das heißt wenn der Benutzer in den Eigenschaften von ACAD eine solche ändert, soll irgendwas passieren.


Vielen Dank für deine Geduld die Mühe!

------------------
Grüsse Benny

[Diese Nachricht wurde von Benny4 am 03. Dez. 2008 editiert.]

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


Ex-Mitglied

erstellt am: 03. Dez. 2008 17:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Benny,

Basiscode ist zu wenig, als dass ich da jetzt aus dem Bauch heraus blind schreibe (sitze gerade auf einem Arbeitsplatz, wo keine Entwicklungsumgebung vorhanden ist, sorry) ==> das wir ein wenig dauern, denn zum Speichern von EED-Daten gehört von EED_RegAppTable-Eintrag bis hin zum eigentlichen EED-Daten an Objekt dranhängen mehr dazu, als dass ich das blind (fehlerfrei) könnte. (etwas Geduld oder wer anderer hilft inzwischen).

Das Definieren von eigenen Grips an einem Element wird Dir mit VB.NET nicht gelingen ==> ObjectARX PLUS eigene Modellieren, weil Du einem Objekt Änderungen antun willst, die das AutoCAD-Objekt selbst nicht kann (zumindest laut Deiner Beschreibung)

Auf das Ändern von Eigenschaften kannst Du mit Event ObjectModified überwachen und darauf reagieren.

- alfred -

Benny4
Mitglied
Softwareentwickler


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

Beiträge: 178
Registriert: 16.02.2006

AutoCAD 2008
WIN XP Pro SP2

erstellt am: 03. Dez. 2008 18: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

Hi,

Geduld habe ich, das ist kein Problem, lass dich bloss nicht stressen von mir... 

Naja das mit Objekt kann AutoCAD eigentlich schon. Denn wenn ich manuell mit der Funktion Quader einen SOlid zeichne, dann sind diese Objektgriffe ja dran. Ich möchte nicht nur einen blöden Solid sondern eben einen Quader zeichnen.

------------------
Grüsse Benny

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


Ex-Mitglied

erstellt am: 03. Dez. 2008 18:10    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Benny,

dann lass es mich genauer definieren: Du kannst mit VB.NET einem Objekt nicht mehr Griffe zur Bearbeitung zukommen lassen, als es von sich aus in AutoCAD hat.

Wenn Du mit '_extrude' ein Solid anders erzeugst (als der Befehl '_quader'), daher das Resultat ein anders ist und daher wiederum andere Griffe zur Verfügung stehen, dann kannst Du diese natürlich verwenden, aber eben nur diese.

Vielleicht kommen wir schneller weiter, wenn Du mir Deine Aufgabe beschreibst, denn obiges Problem (Vermeidung, dass Quader verwendet wird statt Polylinie und Extrude, dann kann eventuell auch anders unterbunden werden, aber die ganze Aufgabe wäre mal interessant.

- alfred -

Benny4
Mitglied
Softwareentwickler


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

Beiträge: 178
Registriert: 16.02.2006

AutoCAD 2008
WIN XP Pro SP2

erstellt am: 03. Dez. 2008 18: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

Hi,

also ist es mit .NET einfach nicht möglich einen Quader zu erzeugen, ok.

Bleibt nur noch das Problem mit den XRecords. Habe keine bestimmte Aufgabe, möchte einfach die Möglichkeiten von .NET in AutoCAD erforschen. Und diese XRecords finde ich recht gut und möchte einfach wissen wie ich die am Beispiel eines Solids anwenden kann.

------------------
Grüsse Benny

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


Ex-Mitglied

erstellt am: 03. Dez. 2008 18:20    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

sorry ==> mit DotNET ist es schon möglich, einen Quader zu erzeugen, aber nicht einen 'eigenen Quader', der mehr Griffpunkt und/oder andere Funktionen hinter den Griffpunkten hat als eben der AutoCAD-Quader.

- alfred -

Benny4
Mitglied
Softwareentwickler


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

Beiträge: 178
Registriert: 16.02.2006

AutoCAD 2008
WIN XP Pro SP2

erstellt am: 03. Dez. 2008 18: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

Hi,

nein möchte auch keinen eigenen Quader machen sondern einen Quader von AutoCAD.

------------------
Grüsse Benny

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


Ex-Mitglied

erstellt am: 03. Dez. 2008 18:27    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

ich glaube doch, mich daran zu erinnern, dass es

a) in den Beispieldateien von ObjectARX auch Beispiele zur Verwendung von BRep-API gibt

b) es von Autodesk ein Video im Internet gibt, dass die Verwendung der BRep-API mit vs.net zeigt

(nachdem ich aber eben nicht auf meinem Platz sitze, kann ich Dir die Links auch nicht so leicht heraussuchen, sollten aber zu 'ergooglen' sein)

- alfred -

Jonapap
Mitglied



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

Beiträge: 206
Registriert: 18.08.2006

erstellt am: 08. Dez. 2008 18:30    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 Benny4 10 Unities + Antwort hilfreich

Hallo Benny,

hier der Code um Acad-Objekten XDaten anzuhängen:

Code:

    ''' <summary> Schreibt X-Daten in Autocad-Objekte.</summary>
    ''' <remarks></remarks>
    Class XData
        '  Mit (entget(car(entsel))'("*")) erhält man die X-Daten aller Applicationen

        ''' <summary> Schreibt vorgegebene X-Daten in ein durch seine Objekt-ID vorgegebenes Objekt.</summary>
        ''' <param name="ObjId">Objekt-ID des Objektes, dass die X-Daten enthalten soll.</param>
        ''' <param name="Appname">Applicationsname der X-Daten.</param>
        ''' <param name="DataVal">Eigentliche Daten die dem Objekt zugeordnet werden sollen.</param>
        ''' <returns>Gibt den Erfolgsstatus dieser Operation zurück.</returns>
        ''' <remarks>Bevor X-Daten geschrieben werden können muss evtl. der Applicationsname noch mit AddRegAppTableRecord registriert werden.
        ''' Weil bei jedem Aufruf dieser Funktion AddRegAppTableRecord gestartet wird ist die Performance bei vielen Objekten evtl.
        ''' schlechter, da dieser Aufruf eigentlich nur einmal für jeden Anwendungsnamen gestartet werden muss.</remarks>
        Public Shared Function AddXData(ByVal ObjId As ObjectId, ByVal Appname As String, ByVal DataVal As String) As Boolean
            Dim db As Database = Application.DocumentManager.MdiActiveDocument.Database
            Dim myT As Transaction = db.TransactionManager.StartTransaction()
            Try
                Dim obj As DBObject = myT.GetObject(ObjId, OpenMode.ForWrite)
                AddRegAppTableRecord(Appname)
                Dim rb As New ResultBuffer(New TypedValue(1001, Appname), New TypedValue(1000, DataVal))
                obj.XData = rb
                myT.Commit()
            Finally
                myT.Dispose()
            End Try
        End Function

        ''' <summary> Wenn der Applicationsname der X-Daten noch nicht existiert wird er hier in die Datenbank eingetragen.</summary>
        ''' <param name="regAppName">Applicationsnamen der X-Daten.</param>
        ''' <remarks>Der Applikationsname muss und darf nur einmal pro Zeichnung eingetragen werden.</remarks>
        Public Shared Sub AddRegAppTableRecord(ByVal regAppName As String)
            Dim db As Database = Application.DocumentManager.MdiActiveDocument.Database
            Dim myT As Transaction = db.TransactionManager.StartTransaction()
            Try
                Dim rat As RegAppTable = CType(myT.GetObject(db.RegAppTableId, OpenMode.ForRead, False), RegAppTable)
                If Not rat.Has(regAppName) Then
                    rat.UpgradeOpen()
                    Dim ratr As New RegAppTableRecord
                    ratr.Name = regAppName
                    rat.Add(ratr)
                    myT.AddNewlyCreatedDBObject(ratr, True)
                End If
                myT.Commit()
            Finally
                myT.Dispose()
            End Try
        End Sub

    End Class


Ich würde diesen Code nicht versuchen, in deinen einzubauen, sondern die Klasse so wie sie ist benutzen. Das macht deinen Code deutlich lesbarer und man kann die Klasse auch aus anderen Prozeduren heraus nutzen.

------------------
Gruß
Markus

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

Benny4
Mitglied
Softwareentwickler


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

Beiträge: 178
Registriert: 16.02.2006

AutoCAD 2008
WIN XP Pro SP2

erstellt am: 09. Dez. 2008 09:41    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

Hi Markus,

vielen Dank schon mal,werde das sobald als möglich ausprobieren.

Eine Frage noch dazu: Soweit ich informiert bin, kann ich XDatan nur begrenzt einsetzen. Wieviele XDaten kann ich denn pro AutoCAD-Objekt speichern?

Oder: Wie kann ich XRecords an AutoCAD-Objekten speichern? Die sind meines Wissens unbegrenzt!?

------------------
Grüsse Benny

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


Ex-Mitglied

erstellt am: 09. Dez. 2008 09:48    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi Benny

XData ist begrenzt auf 16kB je Objekt
XRecords nicht (nur durch Zeichnungsgröße, die Du bereit bist, zu investieren)

[EDIT]auch für XRecords hast Du Beispiele in ObjectARX-Lib[/EDIT]

- alfred -

[Diese Nachricht wurde von a.n. am 09. Dez. 2008 editiert.]

MichaelKlein
Mitglied



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

Beiträge: 17
Registriert: 28.11.2008

Mein System: AutoCAD 2008 / ObjectARX / VisualStudio 2008 Standard

erstellt am: 24. Apr. 2009 08:22    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 Benny4 10 Unities + Antwort hilfreich

Hallo,

die Grips bekommst du wenn du VOR dem

mySolid.CreateBox(600, 560, 720)

die Zeile

mySolid.RecordHistory = true

einfügst.

Aber wahrscheinlich hast du das schon selbst herausgefunden.

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