Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  AutoCAD ObjectARX und .NET
  C#.net Objekte als gewählt markieren

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:  C#.net Objekte als gewählt markieren (2307 mal gelesen)
fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 07. Mai. 2009 15:13    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 möchte mir mit C#.NET einen eigenen Filterbefehl schreiben (um z.B.: Objekte in der Zeichnung nicht nach layer, farbe usw. sondern nach EED-Inhalten zu markieren)

In etwas so: markiere mir alle Blöcke, die in den EEDs den Lieferanten 'XYZ' und die Bestellserie 'ZYX' haben. Danach soll der Benutzer mit Standard Autocad Befehlen (Schieben, Löschen was auch immer) diese Selektion verwenden können. Wie halt der klassische Filterbefehl

Wie ich die Objekte suche, und die EEDs auslese, ist bekannt. (auchd er EED AUfbau ist natürlich bekannt) Nur wie markiere ich diese für eine Objektwahl? In Lisp wäre das wohl (sssetfirst)

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

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 07. Mai. 2009 16:27    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

na das ist ja einfach !!

Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
ed.SetImpliedSelection(auswahlsatz);

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

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 07. Mai. 2009 17:54    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

So nun bin schon weiter

Code:
[CommandMethod("ASW", CommandFlags.NoPaperSpace | CommandFlags.Transparent)]
        public void ASW()
        {
            Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
            PromptSelectionResult selset = ed.SelectAll();
            ed.SetImpliedSelection( selset.Value);
        }


Ich weiss, der Codeschnipsel ist absolut brutal ohne irgendwelchen Fehlerabfragen, aber es geht nur ums Prinzip.

Der Befehl ASW selektiert nun einfach alles in der zeichnung, soweit so gut.
Aber wie funktioniert es, wenn der Befehl Transparent innerhalb eines anderen Autocadbefehls aufgerufen wird. Wie übergeb ich die Selection an den vorher aufgerufenen Befehl

Ich denke ich muss irgendwie abfragen, ob ich Transparent aufgerufen wurde, und dann die Selection zurückgeben ??

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

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 30. Jun. 2009 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

Da ich jetzt nach einer kurzen Pause, wieder mein Projekt "kaufmännischer Auswahldialog" aufgenommen und auch fertiggestellt habe.

Hier mein Lösung

Ich verwende einfach keine CommandMethod, sondern eine Lispausdruck

Code:

[CommandMethod("C:ASW1",CommandFlags.Defun)]
public SelectionSet ArtikelAuswahl1(ResultBuffer args)
{
           
      frmAuswahl tFormular = new frmAuswahl();
      tFormular.ShowDialog();
     

      ObjectId[] tObjectIdArray = Formular.iSelecetedObjects.ToArray();
       Editor.SetImpliedSelection(tObjectIdArray);
       SelectionSet tSelSet = SelectionSet.FromObjectIds(tObjectIdArray);

       return tSelSet;
}



Das hat den Vorteil, dass der Befehl C:ASW einerseits als Konsolenbefehl,m aber auch andererseits als Transparenter Befehl funktioniert. Dabei wird auch beim Setzten des ImpliedSelection auch keine Ausnahme verursacht.

Anbei ein Scrrenshot. Mit meinem Auswahldialog kann man nun Büromöbel je nach kaufmännischen Daten und eingeplanter Abteilung (hier Ordner genannt) selektieren.

[Diese Nachricht wurde von fuchsi am 30. Jun. 2009 editiert.]

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


Ex-Mitglied

erstellt am: 30. Jun. 2009 15:46    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Hi,

lerne ich jetzt gerade was oder ist's nur ein gedanklicher Fehler?

Wenn Du eine Lisp-Funktion deklarierst, ist da die Deklaration nicht

Code:
[LispFunction("C:ASW1")]
public SelectionSet ArtikelAuswahl1(ResultBuffer args)

statt ...CommandMethod...?

In jedem Fall aber Üs fürs selbst herausfinden und dann bereitstellen! Danke 

Heisst das auch, dass Du im Lisp jetzt das Implied-SelectionSet wirklich während des transparenten Aufrufs verändern kannst? Da bist Du aber mächtig tief eingedrungen, Hochachtung!

- alfred -

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

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 30. Jun. 2009 15:56    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


Code:
[CommandMethod("C:ASW1",CommandFlags.Defun)]
public SelectionSet ArtikelAuswahl1(ResultBuffer args)


Code:
[LispFunction("C:ASW1")]
public SelectionSet ArtikelAuswahl1(ResultBuffer args)

Dürfte wohl das selbe sein. Ich bin nur darauf gestossen, da ich in meiner Verzweiflung alle Commandflags durchprobiert habe.  

Der Vorteil der Methode SetImliedSelection ist, dass diese Methode sauschnell ist.
Bei einer Zeichnung mit 1500 Möbel dauert diese Methode ca. 1 Sekunde, um diese 1500 Möbel auszuwählen.

Die Methode, die wir per PM disskutiert haben
Call tAcadDocCOM.SendCommand("(ssadd (handent """ & Hex(tObjID.Handle.Value) & """))" & vbCr)
dauert dagegen in der selben Zeichnung ca. 15-20Sekunden.

[Diese Nachricht wurde von fuchsi am 30. Jun. 2009 editiert.]

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


Ex-Mitglied

erstellt am: 30. Jun. 2009 16:04    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat

Großartig, dann hab ich nur einen Schritt zu wenig weit gedacht. Einen Weg über Lisp hätten wir ja schon gehabt, nur dass ich eben nicht jedes Element einzeln mit SendCommand gewählt hätte , aber dass grundsätzlich das ImpliedSelectionSet sich über eine definierte LispFunktion modifizieren läßt und dieses auch in der laufenden Funktion dann als 'selektiert wahrnimmt', das ist schon brauchbar.

THX for the info, - alfred -

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

fuchsi
Mitglied
Programmierer c#.net Datawarehouse


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

Beiträge: 1201
Registriert: 14.10.2003

AutoCad Version 2012 deu/enu
<P>Windows 7 64bit

erstellt am: 30. Jun. 2009 16:09    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

Zitat:
Original erstellt von a.n.:
, aber dass grundsätzlich das ImpliedSelectionSet sich über eine definierte LispFunktion modifizieren läßt und dieses auch in der laufenden Funktion dann als 'selektiert wahrnimmt', das ist schon brauchbar.

Vorsicht. Das ImpliedSelectionSet kann man zwar in der laufenden Funktion setzten, es wird jedoch erst beim Verlassen der Funktion grafisch dargestellt.
Ich habe mir damit geholfen, dass ich während der Funktion, die Elemnte lediglich Highlighte/Unhighlighte, und erst am Funktionsschluss den ImpliedSelectionSet setzte.

In einem transparenten Befehl geht auch das nicht (ImpliedSelectionSet ), in einem transparenten Lisp jedoch sehr wohl.


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