Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  Doppelklick auf Attributref

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:  Doppelklick auf Attributref (1386 mal gelesen)
Theo37
Mitglied
Techniker


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

Beiträge: 423
Registriert: 08.10.2008

ACAD 2019
WIN 7 64bit
Intel Xenon CPU E5-1620 3.60GHz
16GB RAM

erstellt am: 18. Nov. 2010 09: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 an Alle,

ich habe mir ein kleines Program (VB2008, Basic) geschrieben,
mit dem ich unseren Firmen-Plankopf als Block in die Zeichnung einfüge.
Dann gibt es ein Windowsforms mit dem ich die ganzen Eintragungen
in den Plankopf als Attributte in den Block speichere.
Funktioniert wunderbar. Dank Jig (Danke nochmal an Alfred)
jetzt sogar mit Vorschau.
Jetzt wäre es aber noch gut wenn bei einem Doppelklick
des Users auf den Plankopf nicht der normale Attributseditor aufginge sondern wieder mein Windosforms von vorhin. Das wäre gut, weil im Plankopf nicht alle Eingaben frei wählbar sein sollen. Wenn der User einen anderen Block mit Attributen wählt, dann soll natürlich weiterhin der normale Attributseditor aufgehen und das gewählte Attribut anzeigen. An dieser Aufgabe bin ich schon in VBA gescheitert.
Gibt es in VB.NET eine saubere Lösung?
Ich kenn mich in ACAD ganz gut aus. Meine Programier-Kentnisse sind eher gering.
Bin für jeden Lösungsvorschlag dankbar.

Gruß, Theo

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


Ex-Mitglied

erstellt am: 18. Nov. 2010 09:36    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

folgende Variante fällt mir ein:
a) in der CUI die Doppelklickaktion umbauen auf einen eigenen Befehl
b) im eigenen Befehl prüfen, ob es der 'berüchtigte' Block ist, der doppel-geklickt wurde, dann eigenes Programm, sonst _EATTEDIT per SendCommand starten

HTH, - alfred -

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

Theo37
Mitglied
Techniker


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

Beiträge: 423
Registriert: 08.10.2008

erstellt am: 18. Nov. 2010 10:11    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 Alfred,

das ist genau meine Vorgehensweise. klappt auch. Hat aber einen großen Nachteil. Wenn ich dann _eattedit mit sendcommand starte, dann wird diesem zwar automatisch der geklickte Block übergeben. Aber nicht der Punkt, bzw. das Attribut. So daß _eattedit dann einfach mit dem ersten Attribut des Blocks startet, was bei vielen Attributen leicht zu Fehlern führt. Ich müsste es irgendwie schaffen auch das geklickte Attribut an _eattedit zu übergeben. Unten ein paar Programzeilen dazu:
Sub Blockdoppelklick ()
.
.
.
Entity = ThisDrawing.PickfirstSelectionSet.Item(0)
        Entity.GetXData("", xtypeOut, xdataOut)
        If xdataOut(0) <> "TheosBezeichnung" Then
            ThisDrawing.SendCommand("_eattedit")
            Exit Sub
        End If
.
.
.

Gruß, Theo

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


Ex-Mitglied

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

Hi,

kurz in LISP die Vorgehensweise (weil's weniger Zeilen sind), wie _EATTEDIT bedient werden kann, damit das richtige Attribut im Dialog aktiviert ist:

Befehl: (setq myATT (nentsel))        ==> da zeigst Du mal ein Attribut Deines Blocks

dann:
Befehl: _EATTEDIT
Wählen Sie einen Block: !myATT

Rückschluß daraus: übergibst Du dem Befehlsaufruf das Attributsobjekt, dann bekommst Du das richtige Attribut. Probiers mal.
In dotNET musst Du jetzt 'nur noch' herausfinden, welches Attribut des Blocks unter dem zuletzt geklickten Punkt liegt.

- alfred -

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

Theo37
Mitglied
Techniker


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

Beiträge: 423
Registriert: 08.10.2008

erstellt am: 18. Nov. 2010 11: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 Alfred,

da hab ich schon viel darüber nach gedacht.
Aber _eattedit fragt nach gar keinem Attribut, wenn vorher schon ein Block ausgewählt war. Da vor pickfirst ausschalten und danach wieder ein? Oder Pickfirst-Auswahlsatz löschen, geht das?

Wie krieg ich den zuletzt geklickten Punkt heraus?

Danke Theo

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


Ex-Mitglied

erstellt am: 18. Nov. 2010 11:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

>> Wie krieg ich den zuletzt geklickten Punkt heraus?

ich fürchte, Du musst Dir aus der aktuellen Cursorposition den Punkt ausrechnen.
Es gäbe zwar die Variable LASTPOINT, die stellt aber nicht den Punkt des Doppelklicks, sondern den letzten Konstruktionspunkt dar.

Pickfistselection vorher kübeln wird notwendig sein, sonst verlangt der Befehl _EATTEDIT keine Objektwahl mehr.

- alfred -

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

Theo37
Mitglied
Techniker


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

Beiträge: 423
Registriert: 08.10.2008

erstellt am: 18. Nov. 2010 14: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 fürchte, Du musst Dir aus der aktuellen Cursorposition den Punkt ausrechnen."

Hallo Alfred,
kannst Du mir dabei helfen. ich finde da keinen Ansatz der irgendwie erfolg versprechend wäre.
Gruß, Theo

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

Theo37
Mitglied
Techniker


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

Beiträge: 423
Registriert: 08.10.2008

ACAD 2019
WIN 7 64bit
Intel Xenon CPU E5-1620 3.60GHz
16GB RAM

erstellt am: 18. Nov. 2010 15:35    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,

ein ganz anderer Ansatz des Problemes wäre der Code unten.
Damit funktioniert es. Könntest Du mir das bitte nach VB.Net übersetzen. Dort ist es leider nicht so einfach wie in VBA.

Thisdrawing
Private Sub AcadDocument_BeginDoubleClick(ByVal PickPoint As Variant)

    ThisDrawing.SetVariable "LastPoint", PickPoint
End Sub


Mein anderer Code würde dann lauten:

<Autodesk.AutoCAD.Runtime.CommandMethod("Blockdoppelklick", Autodesk.AutoCAD.Runtime.CommandFlags.UsePickSet)> _
Public Sub Blockdoppelklick()

        Dim Point As Object
        Dim Pointcommand As String
        Dim xtypeOut As Object
        Dim xdataOut As Object
        Dim Entity As AcadEntity
        Dim Attris As Object

        On Error Resume Next
        Entity = ThisDrawing.PickfirstSelectionSet.Item(0)
        Entity.GetXData("", xtypeOut, xdataOut)
        If xdataOut(0) <> "HermannsBezeichnung" Then
            ThisDrawing.PickfirstSelectionSet.Clear()
            ThisDrawing.SendCommand("_eattedit ")
            Point = ThisDrawing.GetVariable("LastPoint")
            Pointcommand = Point(0).ToString & "," & Point(1).ToString & "," & Point(2).ToString
            ThisDrawing.SendCommand(Pointcommand & " ")
            Exit Sub
        End If
        Baseblock = Entity
.
.
.

Danke Theo

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


Ex-Mitglied

erstellt am: 19. Nov. 2010 10:25    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

ich bin nicht überzeugt, dass es gut ist, wenn jeder Doppelklick von Deiner App abgefangen wird. Die Variable umsetzen ist zwar nicht AutoCAD-konform (ist die nicht eigentlich ReadOnly?), aber wenn es geht. 

Das Schreiben eines Document-bezogenen Eventhandlers geht nicht so in 2min, da brauchst Du das Handling aller Documents.XXX dazu (öffnen, schließen, aktivieren, minimieren, ...). Es gibt eben kein 'ThisDrawing'-Objekt, das immer die Events aus der aktuellen DWG holt (egal, welche DWG gerade aktuell ist bzw. gemacht wurde). Hoffe, am Wochenende.

- alfred -

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

Theo37
Mitglied
Techniker


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

Beiträge: 423
Registriert: 08.10.2008

erstellt am: 19. Nov. 2010 11:52    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,

Lastpoint zu überschreiben ist sicher keine so gute Idee.
Was könnte ich sonst verwenden um den Punkt zu retten?

ThisDrawing.SummaryInfo.SetCustomByKey("Klickunkt", PunktalsString)
Würde auch gehen.

Wäre echt gut wenn Du am WE Zeit für eine kurze Erklärung finden würdest. Ich hätte gern alles auf VB.Net, weil ja VBA bald nicht mehr unterstützt wird.

Gruß, Theo

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


Ex-Mitglied

erstellt am: 23. Nov. 2010 00:33    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

Zeit ist momentan nicht, mit Kommentar im Code ist jetzt einfach nicht. Es würde ohne Kommentar wohl nicht gut gehen, Du solltest ja verstehen, wie Du mein Beispiel in Deinen Code einbaust. Wenn Du es selbst probieren willst: hauptsächliche Hürde ist der Ersatz des im VBA gültigen 'ThisDrawing'-Objekts, das im Gegensatz zu ARX/dotNET immer das gerade aktuelle DWG zeigt bzw. daran gebundene Events auch nach Wechsel/Öffen/Aktivieren eines DWG's eben immer auf das DWG im Vordergrund wirkt.

Du findest aber Beispiele für Eventhandling, grad rausgesucht, im ObjectARX-Kit unter samples\dotNet\EventsWatcher

HTH, - alfred -

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


Ex-Mitglied

erstellt am: 23. Nov. 2010 22:01    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat


DocEvents.zip

 
Hi,

so, anbei ein kleines Projekt, das Beispiel für Applikations-Events und ThisDrawing-Ersatz (plus -events) zeigt.

- alfred -

PS: ich mach das hier freiwillig, kostenlosen Code wünschen ist OK, 'Erinnerung' per PM hilft da nicht, wenn sich's nicht ausgeht, dann geht sich's nicht aus!  

PPS: Du solltest Dir aber auch für Dein Projekt Gedanken machen, was passiert, wenn ein Anwender nicht mit Doppelklick die Attribute bearbeitet, sondern einfach durch Änderung der Attribute im Eigenschaftsfenster. Da kommt dann kein DoubleClick.

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

Theo37
Mitglied
Techniker


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

Beiträge: 423
Registriert: 08.10.2008

erstellt am: 24. Nov. 2010 09: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 Alfred,

meinen Respekt für das was Du kannst und was Du hier kostenlos machst.
Ich weiß das durchaus zu schätzen.
Danke für Dein Projekt, schau ich mir jetzt gleich mal an.
Das mit der rechten Maustaste ist wirklich ein Problem.
Wenn man z.B. den Befehl einfach mit der rechten Maustaste wiederholt dann geht der ganz normale Attributseditor auf. Ich denke ich kann nicht alle Möglichkeiten abfangen. Ich will meine Leute hier auch nicht zu sehr bevormunden, sondern nur Hilfen geben "das Richtige" einzugeben. Und der Doppelklick ist schon mal ein guter Anfang.

Gruß, Theo

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