Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Griffe aktivieren

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:  Griffe aktivieren (1337 mal gelesen)
Boehri
Mitglied



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

Beiträge: 80
Registriert: 07.04.2008

erstellt am: 09. Mrz. 2011 10:53    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,

Bei der Ausleihe von Zeichnungen an andere Firmen füge ich allen Objekten(Entitys) XData`s hinzu. Beim Einlesen der geänderten Zeichnung lese ich diese XData wieder aus und lasse mit nur die Objekte anzeigen die keine Xdatas enthalten. Ich möchte nun in diesen Objekten die Griffe aktivieren ( Wie in der Schnellauswahl von ACAD).

nachfolgend mein Code

Code:
  For Each acObjId In acBlkTblRec
                    If acBlkTblRec.XrefStatus = XrefStatus.NotAnXref Then
                        If (acObjId.IsValid) AndAlso (Not acObjId.IsErased) Then
                            ent = CType(acTrans.GetObject(acObjId, OpenMode.ForWrite), Entity)

                            If Not ent.XData = Nothing Then
                                Dim rb As ResultBuffer = ent.XData

                                dgv.Rows.Add()
                                Dim i As Array = Split(ent.GetType.ToString, ".")
                                dgv.Rows(nCnt).Cells(0).Value = Split(ent.GetType.ToString, ".")(i.Length - 1)
                                Dim strKoordinaten As String
                                strKoordinaten = Split(ent.GeometricExtents.MinPoint.ToString, ")")(0)
                                strKoordinaten = Split(strKoordinaten, "(")(1)
                                dgv.Rows(nCnt).Cells(1).Value = strKoordinaten
                                If Not ent.Layer.StartsWith("Neu") Then
                                    CreateLayer(ent.Layer, ent.ColorIndex)
                                    ent.Layer = "Neu" & "-" & ent.Layer
                                End If
                                nCnt = nCnt + 1
                            End If

                            nCnt1 = nCnt1 + 1

                        End If
                    End If

                Next



Wie stelle ich das am besten an?

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


Ex-Mitglied

erstellt am: 09. Mrz. 2011 20:38    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

ich leg mal dieses Beispiel bei, hier darfst Du zuerst Objekte auswählen, diese werden in einem Array von ObjectID's gesammelt, nachfolgend wird dieses Array zu einer 'ImpliedSelection' gemacht, damit bekommst Du die Griffe.

Hoffe das hilft so!

- alfred -

Code:
<Autodesk.AutoCAD.Runtime.CommandMethod("CADde_getObjectsGriped")> _
Public Shared Sub CADde_getObjectsGriped()
  Dim tAcadDoc As ApplicationServices.Document = ApplicationServices.Application.DocumentManager.MdiActiveDocument
  Dim tAcadDocED As EditorInput.Editor = tAcadDoc.Editor
  Try
    'zuerst selektieren wir (nur fürs Beispiel) die Elemente, die
    '  nachfolgend gegript werden sollen
    Dim tSelRes As EditorInput.PromptSelectionResult = tAcadDocED.GetSelection(New EditorInput.PromptSelectionOptions())
    If (tSelRes.Status = EditorInput.PromptStatus.OK) AndAlso (tSelRes.Value.Count > 0) Then

      'dann speichern wir die Elemente als Array
      Dim tObjectIDs() As DatabaseServices.ObjectId = tSelRes.Value.GetObjectIds
      'jetzt übergeben wird diese dem Editor
      tAcadDocED.SetImpliedSelection(tObjectIDs)

    Else
      Debug.Print("nix gewählt")
    End If

  Catch ex As Exception
    Call MsgBox("Unbekannter Fehler aufgetreten" & vbNewLine & ex.Message)
  End Try
End Sub



------------------
www.hollaus.at

Boehri
Mitglied



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

Beiträge: 80
Registriert: 07.04.2008

erstellt am: 10. Mrz. 2011 14: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

Hallo Alfred,

wie immer schnelle Antwort und sehr hilfreich.
Danke!

Eine ergänzende Frage:
Mein Vorhaben ist alle Objekte in der Zeichnung zu identifizieren die eine ext. Firma geändert hat. Bisher hat diese es immer mit Revisionswolken gemacht. Dies war nicht immer sehr übersichtlich.
Mein Weg über xData ist da nur ein halber, denn es werden nur Objekte selektiert, die neu erstellt wurden. Es werden jedoch keine Objekte selektiert die nur geändert wurden ( z.B. kopieren, schieben etc.).
Gibt es eine Methode wie man modifizierte Objekte erkennen kann?

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


Ex-Mitglied

erstellt am: 10. Mrz. 2011 14:43    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

>> Gibt es eine Methode wie man modifizierte Objekte erkennen kann?

Allgemein und fertig ==> NEIN.

Und leider gibt es auch in AutoCAD nichts vorgesehenes dafür, auf das man sich stützen könnte. Denn zu viele Befehle in AutoCAD können Dein Ansinnen zunichte machen.

Es gäbe jetzt schon ein paar Möglichkeiten, die mir dazu einfallen würden, jedoch alles mit Vorsicht zu genießen!

a) Deine Partnerbüros sind bereit, eine App von Dir zu installieren, dann kannst Du deren Commands oder Events wie ObjectCreated oder ObjectModified überwachen und den neu erzeugten oder modifizierten Elementen einen Stempel aufdrücken.

b) Du behältst die Zeichnung, die weitergeleitet wurde und vergleichst diese dann mit der Zeichnung, die Du zurückbekommst. Dabei darfst Du nichtmal über Handle vergleichen, denn es können Befehle wie _RECOVER oder _WBLOCK oder _INSERT auch die Handles vernichten.
In diesem Fall musst Du einen Comparer schreiben, der möglichst effizient Elemente vergleichen kann; der muss wissen, wie mit einer Linie, wie mit einem Kreis, wie mit Blöcken und deren Attributen umzugehen ist. Natürlich sind auch übergeordnete Einstellungen wie Bemaßungsstil, Maßstabslisten etc zu vergleichen ==> keine leichte Aufgabe

Jedenfalls viel Erfolg, ist keine leichte, aber sicher eine spannende Aufgabe. 

- alfred -

------------------
www.hollaus.at

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