Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Catiabaum automatisch neu zu ordnen.

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
Autor Thema:  Catiabaum automatisch neu zu ordnen. (11052 mal gelesen)
K.Siebert
Mitglied
Tech Zeichner


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

Beiträge: 415
Registriert: 19.05.2007

Win XP
Catia V5 R19
Catia V5 R24

erstellt am: 23. Mai. 2012 14: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 Cad gemeine,

Ich bin gerade am überlegen, den Catiabaum automatisch per *.CADSkript neu alphabetisch neu zu ordnen.
Da ich ein eigenes kleines Tool gebaut habe (Excel mit UserForm), wo auch der Catiabaum ausgelesen wird. In dieser UserForm kann ich schon Sortieren einmal absteigend und wieder so wie der Baum in Catia ist.

Deswegen bin ich darauf gekommen dieses auch nach Catia zu übertragen wenn gewünscht.
ABER wie fange ich an?

Mein erster Gedanke war:

-> Von Excel Info holen welches Teil z.b. in Zelle A1 steht.
-> In Catia Suchen Selektieren
-> Mit Ausschneiden und wieder einfügen den Baum neu zu Sortieren ( mit der entsprechenden richtigen eingestellten Catia Option)

Und jetzt das ganze wieder mit der Zelle A2
usw. ....

oder habe ich da einen Falschen (Schlechten) Gedankengang.
Würde es anders besser Laufen????

Danke schon mal für jede Antwort.

------------------
Sei Schlau bleib Dumm !!?!!

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 23. Mai. 2012 14: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 Nur für K.Siebert 10 Unities + Antwort hilfreich

Servus
Das Problem dabei ist, dass dabei vorhanden Verlinkungen zerschossen werden.

Gruß
Bernd

PS: Hier findest du so eine Bastellösung

------------------
Warum einfach, wenn es auch kompliziert geht.

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

K.Siebert
Mitglied
Tech Zeichner


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

Beiträge: 415
Registriert: 19.05.2007

Win XP
Catia V5 R19
Catia V5 R24

erstellt am: 23. Mai. 2012 15: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


Exemplarname.CATScript.txt

 
Hallo,
und danke genau dieses ist was ich gesucht habe!!!!

Was mir noch aufgefallen ist, der Partname sollte mit dem Exemplarnamen vorher abgeglichen werden.

------------------
Sei Schlau bleib Dumm !!?!!

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

MarkS.
Mitglied
NC-Programmierer/Anwendungsentwickler


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

Beiträge: 30
Registriert: 23.05.2012

Windows 7 SP1 64Bit
AMD Opteron 6134
ATI FirePro V8800
32 GB
Catia V5 R19/R20/R21
VB.NET 2010
Delphi 7

erstellt am: 23. Mai. 2012 17: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 K.Siebert 10 Unities + Antwort hilfreich

Ich stand mal vor einem ähnlichem Problem. Dabei ging es um das Ordnen der Elemente in einem Geoset. Ich habe mir ein Anwendung mit Deplhi erstellt, welche sich quasi das Fenster "Reorder Children" greift und steuert. Bei dem "Graph Tree Reordering" wäre das genau das gleiche. Geht sehr schnell und die Links bleiben erhalten. Bei Bedarf kann ich die Lösung gerne mal raussuchen und weiter erläutern.

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 23. Mai. 2012 17:51    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 K.Siebert 10 Unities + Antwort hilfreich

Servus
Das hört sich gut an (geht wahrscheinlich über die Windows-API).
Ich hätte Interesse an dem Code.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

K.Siebert
Mitglied
Tech Zeichner


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

Beiträge: 415
Registriert: 19.05.2007

Win XP
Catia V5 R19
Catia V5 R24

erstellt am: 23. Mai. 2012 22: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

Hallo,
Ja bitte mach dir bitte diese mühe.

------------------
Sei Schlau bleib Dumm !!?!!

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

MarkS.
Mitglied
NC-Programmierer/Anwendungsentwickler


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

Beiträge: 30
Registriert: 23.05.2012

Windows 7 SP1 64Bit
AMD Opteron 6134
ATI FirePro V8800
32 GB
Catia V5 R19/R20/R21
VB.NET 2010
Delphi 7

erstellt am: 25. Mai. 2012 10: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 Nur für K.Siebert 10 Unities + Antwort hilfreich

Okay...kommt nächste Woche

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

MarkS.
Mitglied
NC-Programmierer/Anwendungsentwickler


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

Beiträge: 30
Registriert: 23.05.2012

Windows 7 SP1 64Bit
AMD Opteron 6134
ATI FirePro V8800
32 GB
Catia V5 R19/R20/R21
VB.NET 2010
Delphi 7

erstellt am: 31. Mai. 2012 17:58    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 K.Siebert 10 Unities + Antwort hilfreich


GraphTreeReordering001.GIF


GraphTreeReorderingApp001.zip

 
Hallo zusammen!

Ich habe den Code etwas abgeändert und auf den Strukturbaum angepasst. Quelle und Programm habe ich mit beigepackt, für alle, die sich ein damit auseinandersetzen wollen und oder auf ihre Bedürnisse anpassen möchten. Ich hoffe, anhand der Kommentare lassen sich viele Sachen nachvollziehen. Catia bitte auf die deutsche Umgebung umstellen, da sonst die Fenster und Steuerelemente nicht gefunden.

Verwendung
1. In Catia das Fenster zum Ordnen des Strukturbaums öffnen
2. Programm starten
3. Auf den Button "Connect" klicken
    Das Programm sollte sich nun alle Infos geholt haben und diese auch anzeigen
4. Auf den Button "Inverse Direction" klicken
    Das Programm ordnen den Baum nun neu an und stellt ihn quasi auf den Kopf.

Da alle Informationen vorhanden sind, kann man die Routine abändern und seine eigene Sortierung einbringen.


Ich wünsche viel Spaß dabei!


Gruß....Mark

Code:
var
  frmMain: TfrmMain;

  hWin,
  hListBox,
  hBtnUp,
  hBtnDown : Hwnd;

implementation

{$R *.dfm}
//******************************************************************************
//** EnumProc
//** Hier werden alle Childwindows durchlaufen. Wir greifen uns die nötigen
//** Steuerelemente(Buttons, Listbox) ab, die wir brauchen
//******************************************************************************

function EnumProc(wnd: HWND; Lines : TStrings) : BOOL; stdcall;
  var
  iLen      : integer;
  sClass,
  sText    : string;
  aDwordvar : DWORD;
  begin
    result := true;

    // Text
    iLen := SendMessage(wnd, WM_GETTEXTLENGTH, 0, 0);
    SetLength(sText, iLen+1);
    SendMessage(wnd, WM_GETTEXT, iLen+1, Integer(PChar(sText)));

    // Klasse
    SetLength(sClass, 256);
    iLen := GetClassName(wnd, PChar(sClass), Length(sClass));
    sClass := LeftStr(sClass,iLen);

    // Steuerzeichen in der Zeichenkette entfernen
    sText  := Trim(sText);
    sClass := Trim(sClass);

    // Handle, Text, Klassenname in Listview eintragen
    With frmMain.lstvWindows.Items.Add do
    begin
        Caption := inttostr(wnd);
        SubItems.Add(sText);
        SubItems.Add(sClass);
    end;

    // Merken der Handles für Button und ListBox
    if (sText = 'ListProd') and (sClass = 'ListBox') then hListBox := wnd
    else if (sText = 'Nach oben verschieben') and (sClass = 'Button') then hBtnUp := wnd
    else if (sText = 'Nach unten verschieben') and (sClass = 'Button') then hBtnDown := wnd;
end;


//******************************************************************************
//** Button Connect
//** Aufruf der Funktionen zur Fenstersuche und Strukturbaums
//**
//******************************************************************************

procedure TfrmMain.btnConnectClick(Sender: TObject);
begin
    // Handle des Hauptfenster
    hWin := FindWindow(nil,'Neuordnung des Grafikstrukturbaums');

    // Childwindows im Hauptfenster
    EnumChildWindows(hWin,@EnumProc, 0);

    // Anzahl der Produkte/Parts...
    edListCount.Text := IntToStr(SendMessage(hListBox,LB_GETCOUNT,0,0));

    // Übertragen der Listeneinträge(Produkte/Parts) in eigene ListBox
    GetProdList;
end;


//******************************************************************************
//** GetProdList
//** Funktion zum Übertragen der Listeneinträge(Produkte/Parts) in eigene ListBox
//**
//******************************************************************************
procedure TfrmMain.GetProdList;
var
    i : integer;
    s : string;
begin
    for i := 0 to strtoint(edListCount.Text) -1 do
    begin
        setlength(s,64);
        SetLength(s,SendMessage(hListBox,LB_GETTEXT,i,lParam(PChar(s))));
        lstProdList.Items.Add(s);
    end;
end;

//******************************************************************************
//** Button btnSelDown, btnSelUp, btnMoveDown, btnMoveUp
//** Steuerung der Buttons
//**
//******************************************************************************

procedure TfrmMain.btnSelDownClick(Sender: TObject);
begin
    SendMessage(hListBox,WM_KEYDOWN,VK_DOWN,0);
end;

procedure TfrmMain.btnMoveUpClick(Sender: TObject);
begin
    SendMessage(hBtnUp,BM_CLICK,0,0);
end;

procedure TfrmMain.btnMoveDownClick(Sender: TObject);
begin
    SendMessage(hBtnDown,BM_CLICK,0,0);
end;

procedure TfrmMain.btnSelUpClick(Sender: TObject);
begin
    SendMessage(hListBox,WM_KEYDOWN,VK_UP,0);
end;

//******************************************************************************
//** Button btnInverse
//** Einfaches Beispiel zum Invertieren des Strukturbaums
//**
//******************************************************************************

procedure TfrmMain.btnInverseClick(Sender: TObject);
var
    i,c : integer;
begin
    for i := strtoint(edListCount.Text)-1 downto 1 do
    begin
        for c := 1 to i do
        begin
            SendMessage(hBtnDown,BM_CLICK,0,0);
            //  Sleep(200);
        end;

        for c := 1 to i do
        begin
            SendMessage(hListBox,WM_KEYDOWN,VK_UP,0);
            //  Sleep(200);
        end;
    end;
end;

end.


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

isegrimm
Mitglied
Konstrukteur

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

Beiträge: 2
Registriert: 23.07.2013

erstellt am: 23. Jul. 2013 13: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 K.Siebert 10 Unities + Antwort hilfreich

Hallo Mark,

ich konstruiere in Catia Werkzeuge in einer flachen Baumstruktur.

Da ich nicht vorher weiss wann welches Teil angelegt wird ist der Baum durcheinander.

Die Nummer steht in den Eigenschaften unter "Teilenummer". Es ist eine 5-stellige Zahl.

Dein Delphiscript sortiert einen Baum invers. Das hat so gut bei mir funktioniert das ich Fragen wollte ob Du das umschreiben kannst.

Ich benötige eine aufsteigende Sortierung. Alle anderen Versuche sind gescheitert. Wenn ich ein Werkzeug sortiere kann das gut und gerne 2-3 Stunden dauern.

Für Deine Hilfe wäre ich Dir dankbar.

Mit freundlichen Grüßen

Gordon 

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

MarkS.
Mitglied
NC-Programmierer/Anwendungsentwickler


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

Beiträge: 30
Registriert: 23.05.2012

Windows 7 SP1 64Bit
AMD Opteron 6134
ATI FirePro V8800
32 GB
Catia V5 R19/R20/R21
VB.NET 2010
Delphi 7

erstellt am: 23. Jul. 2013 14: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 Nur für K.Siebert 10 Unities + Antwort hilfreich


GraphTreeReorderingApp002.zip

 
Hallo isegrimm,

habe das Prog kurz um ein paar Elemente erweitert. Neben der Listbox, welche die Struktur aus Catia anzeigt, zeigt ein zweite Listbox die gleichen Daten sortiert an. So läßt sich am einfachsten nachvollziehen, um wieviel Einheiten ein Element verschoben werden soll. Ohne kleine Pause verschluckt sich das Prog ab und zu mal, daher die Sleep-Aufrufe.

Damit auch nur nach Teilenummer sortiert wird, darf auch nur diese im Baum angezeigt werden. Dies kann unter "Options->Infrastruktur->Product Structure->Knotenanpassung" mit "#PN#" eingestellt werden.


Code:
procedure TfrmMain.btnSortClick(Sender: TObject);
var
    c, iDes, iSrc : integer;
begin
    // Alle Positionen bis auf die letzte durchlaufen (wenn die vorrigen stimmen, muss dies auch passen)
    for iDes := 0 to lstProdList.Count -2 do
    begin
        // iDes : Zielposition
        // iSrc : Ursprung
        iSrc :=  lstProdList.Items.IndexOf(lstSort.Items[iDes]);

        if iDes <> iSrc then
        begin
            for c := iDes to (iSrc-1) do
            begin
                SendMessage(hListBox,WM_KEYDOWN,VK_DOWN,0);
                Sleep(200)
            end;

            for c := iDes to (iSrc-1) do
            begin
                SendMessage(hBtnUp,BM_CLICK,0,0);
                Sleep(200)
            end;

            lstProdList.Items.Move(iSrc,iDes);
            Application.ProcessMessages;
            Sleep(200)
        end;
        // Cursor auf nächste Position setzen
        SendMessage(hListBox,WM_KEYDOWN,VK_DOWN,0);
        Sleep(200)
    end;

end;


Viele Grüße...Mark

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

isegrimm
Mitglied
Konstrukteur

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

Beiträge: 2
Registriert: 23.07.2013

erstellt am: 24. Jul. 2013 10: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 Nur für K.Siebert 10 Unities + Antwort hilfreich

Hallo Mark,

vielen vielen Dank.

Das ist der Hammer.

Genau das was ich gesucht habe.

Damit hast Du wohl richtig vielen Leuten geholfen die das Problem seit Jahren haben.

Das schönste ist das man in der Zeit was anderes machen kann. 

Grüße

Isegrimm

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

IAmTheFabian
Mitglied
Konstrukteur


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

Beiträge: 58
Registriert: 17.10.2013

CATIA V5 R19
Windows 7 Professionel
Intel Core 2
Duo8GB RAM
64Bit System

erstellt am: 19. Mai. 2014 11: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 Nur für K.Siebert 10 Unities + Antwort hilfreich

Kann man die Anwendung auch ohne Delphi erstellen? Mit einem VBA-Modul wird es wahrscheinlich nicht so leicht funktionieren oder?

------------------
Anfänger!

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

MarkS.
Mitglied
NC-Programmierer/Anwendungsentwickler


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

Beiträge: 30
Registriert: 23.05.2012

Windows 7 SP1 64Bit
AMD Opteron 6134
ATI FirePro V8800
32 GB
Catia V5 R19/R20/R21
VB.NET 2010
Delphi 7

erstellt am: 17. Jun. 2014 17:28    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 K.Siebert 10 Unities + Antwort hilfreich

Hallo,

sry...bin etwas spät dran. Generell hast Du eine gute Auswahl an Sprachen, welche Du verwenden kannst. Da ich selber sehr viel mit Delphi programmiert habe, viel es mir damit auch recht einfach. Über VBA wirst Du dies zwar auch realisieren können, jedoch kann dies ab und an schon Nerven kosten und instabil laufen. Momentan würde ich Dir VB empfehlen. Was hast Du denn in etwa vor?

Gruß...Mark

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

IAmTheFabian
Mitglied
Konstrukteur


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

Beiträge: 58
Registriert: 17.10.2013

CATIA V5 R19
Windows 7 Professionel
Intel Core 2
Duo8GB RAM
64Bit System

erstellt am: 30. Jun. 2014 12: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 K.Siebert 10 Unities + Antwort hilfreich

Ich würde gerne die Produktstruktur nach der Stücklistenposition sortieren. Also einfach die Zahlen sortieren.
Kann ich mir über die WinAPI die Listbox aus dem Fenster Graph Tree Reordering kopieren, sortieren und wieder einfügen? Habe noch nicht so viel Erfahrung mit der WinAPI.

------------------
Anfänger!

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 30. Jun. 2014 12:43    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 K.Siebert 10 Unities + Antwort hilfreich

Servus
IMHO ist es leider nicht so einfach. Der Grobablauf könnte sein:
- Baum auslesen
- Einträge sortieren
- Über die WinAPI die Tastendrücke im Fenster "Graph Tree Reordering" in der richtigen Reihenfolge nachbilden.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

K.Siebert
Mitglied
Tech Zeichner


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

Beiträge: 415
Registriert: 19.05.2007

Win XP
Catia V5 R19
Catia V5 R24

erstellt am: 01. Jul. 2014 21: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


Bedingungen.jpg

 
Hallo,
@IAmTheFabian du könntest das das Skript von dem Zweiten Post nehmen. (von bgrittmann) Bei diesem Skript wird von A-Z; 0-9 sortiert.

Es ist unbedingt darauf zu achten das du unter den Optionen folgenden Punkt Aktivist:


Ansonsten sind alle Bedingungen Kaputt


------------------
Sei Schlau bleib Dumm !!?!!

[Diese Nachricht wurde von K.Siebert am 01. Jul. 2014 editiert.]

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

IAmTheFabian
Mitglied
Konstrukteur


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

Beiträge: 58
Registriert: 17.10.2013

CATIA V5 R19
Windows 7 Professionel
Intel Core 2
Duo8GB RAM
64Bit System

erstellt am: 07. Jul. 2014 13:57    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 K.Siebert 10 Unities + Antwort hilfreich

Ich glaube da gehen aber Links zu publizierten Elementen verloren. Ich teste das mal und gebe Feedback.

------------------
Anfänger!

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

IAmTheFabian
Mitglied
Konstrukteur


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

Beiträge: 58
Registriert: 17.10.2013

CATIA V5 R19
Windows 7 Professionel
Intel Core 2
Duo8GB RAM
64Bit System

erstellt am: 08. Jul. 2014 06: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 K.Siebert 10 Unities + Antwort hilfreich


Unbenannt.PNG

 
Siehe da!

------------------
Anfänger!

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 08. Jul. 2014 20:42    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 K.Siebert 10 Unities + Antwort hilfreich

Servus
Genau das wurde schon im 2. Beitrag angesprochen. Deshalb geht es IMHO nur über die WindowsAPI (einfach MarkS. Code in VB umschreiben)

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

imation1999
Mitglied
dipl.-ing. Maschinenbau


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

Beiträge: 276
Registriert: 02.08.2011

Dell Precision T3500
Intel® Xeon® Quad Core
NVIDIA Quadro® 5000
Win7 x64 Ultimate
CATIA V5 R20 SP2

erstellt am: 08. Feb. 2015 16: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 K.Siebert 10 Unities + Antwort hilfreich


Treereordering.gif

 
Hallo Zusammen,

ich möchte ein ähnliches Makro, wie von MarkS (Graph Tree Reordering) aber in VBA6 (Hilfe von WinAPI) schreiben.

Dritte Element aus der ListBox selektieren (es funktioniert gut, wird das dritte Element selektiert):

Code:
SendMessage ListBox_hWnd, LB_SETCURSEL, 2, 0

dann auf "Move Down" klicken:

Code:
SendMessage MoveDown_hWnd, BM_CLICK, 0, 0)

Trotzdem geht immer nur das erste Element aus der ListBox nach unten.

Was mache ich falsch?
Danke im Voraus

[Diese Nachricht wurde von imation1999 am 08. Feb. 2015 editiert.]

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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 08. Feb. 2015 22:29    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 K.Siebert 10 Unities + Antwort hilfreich

Sieht so aus, als wäre der Index der Listbox = 0.

Was sagt GetCurSel/lRet?

dim lRet as long
lRet = SendMessage (ListBox_hWnd, LB_GETCURSEL, 0&, 0&)

Just a thought,
Joe

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

imation1999
Mitglied
dipl.-ing. Maschinenbau


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

Beiträge: 276
Registriert: 02.08.2011

Dell Precision T3500
Intel® Xeon® Quad Core
NVIDIA Quadro® 5000
Win7 x64 Ultimate
CATIA V5 R20 SP2

erstellt am: 09. Feb. 2015 12:03    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 K.Siebert 10 Unities + Antwort hilfreich

lRet = 2, also es sollte eigentlich richtig sein.

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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 13. Feb. 2015 00:38    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 K.Siebert 10 Unities + Antwort hilfreich

Hallo imation,

die Dame möchte offenbar noch einen 'Klick' auf das Listenelement.
Wenn Du diesen Klick händisch setzt, funktioniert's.

Probier mal Folgendes:

In ein Modul:

Code:

'varianten von SendMessage
Public Declare Function SendMessageLong Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, wParam As Long, lParam As Any) As Long
Public Declare Function SendMessageAny Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, wParam As Any, lParam As Any) As Long
Public Declare Function SendMessageByNum Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Public Declare Function SendMessageString Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long

'über findwindow und enumchildwindows ermittelt
Public hWndListBox As Long 'hwnd der Catia List Box
Public hWndLBUpArrow As Long 'hwnd des Catia Up Arrows
Public hWndLBDownArrow As Long 'hwnd des Catia Down Arrows

'Hilfsfunktionen
' Combines two integers into a long integer
Public Function MAKELONG(wLow As Long, wHigh As Long) As Long
  MAKELONG = LOWORD(wLow) Or (&H10000 * LOWORD(wHigh))
End Function

' Combines two integers into a long integer
Public Function MAKELPARAM(wLow As Long, wHigh As Long) As Long
  MAKELPARAM = MAKELONG(wLow, wHigh)
End Function

'messages
Public Const LB_GETITEMRECT = &H198 'holt die lage eines listenelements
Public Const WM_LBUTTONDOWN = &H201 'left button down
Public Const WM_LBUTTONUP = &H202 'left button up

Public Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type
'----------------------------------------------------------------------------------------------------------------------------------------



In die routine zum bewegen der catia-elemente einfügen
Code:

Dim rc As RECT 'rechteck des Listenelementes
  Dim iOldPos As Integer 'ist-position des elementes
 
 
      SendMessageAny hWndListBox, LB_GETITEMRECT, ByVal CLng(iOldPos), rc
     
      SendMessageByNum hWndListBox, WM_LBUTTONDOWN, 0&, MAKELPARAM((rc.Right - rc.Left) \ 2, rc.Top + (rc.Bottom - rc.Top) \ 2)
      SendMessageByNum hWndListBox, WM_LBUTTONUP, 0&, MAKELPARAM((rc.Right - rc.Left) \ 2, rc.Top + (rc.Bottom - rc.Top) \ 2)

  'rauf
  SendMessageByNum hWndLBUpArrow, BM_CLICK, 0&, 0&
 
  'oder runter
  'SendMessageByNum hWndLBDownArrow, BM_CLICK, 0&, 0&


An dem Sortier-Algorithmus bin ich noch dran.
Ich meld' mich, sobald ich da was hab.

Tschau,
Joe

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

imation1999
Mitglied
dipl.-ing. Maschinenbau


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

Beiträge: 276
Registriert: 02.08.2011

Dell Precision T3500
Intel® Xeon® Quad Core
NVIDIA Quadro® 5000
Win7 x64 Ultimate
CATIA V5 R20 SP2

erstellt am: 13. Feb. 2015 12:19    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 K.Siebert 10 Unities + Antwort hilfreich

Hallo Joe,

vielen Dank für Deine Mühe. Ich habe schon alles gemacht.
Nach der "LB_SETCURSEL" schicke ich noch ein "VK_SPACE", dann läuft alles problemlos.
Sortierung: Ich füll die ListBox-Elemente in ein Array ein, es lässt sich gut sortieren.

[Diese Nachricht wurde von imation1999 am 13. Feb. 2015 editiert.]

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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 13. Feb. 2015 14:57    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 K.Siebert 10 Unities + Antwort hilfreich

Das geht auch!

Bei der Sortierung will ich etwas flexibler sein,
d.h. im allgemeinen alphabetisch, aber mit Ausnahmen.
Ich bin soweit fertig, muss nur noch ausputzen.

Ich stell's dann rein.

Tschau,
Joe

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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 14. Feb. 2015 22:43    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 K.Siebert 10 Unities + Antwort hilfreich


ProdSort.zip

 
Anbei das fertige Makro - .exe und Quell-Code.

Nachfolgend noch ein paar Routinen zum Einstimmen:


- Auslesen der Listeneinträge; Eintragen in VB-Listbox;
  Bestimmen des Dialog-Handles;

Code:

'---------------------------------------------------------------------------------------
' Procedure : GetProductsListFromList
' Author    : jherzog
' Date      : 13.02.2015
' Time      : 15:03
' Languages : VB6 Pro SP6
' V5-Release: V5R19/21
' Purpose  : Read entries in 'Graph tree reordering' list box
'          : adds the entries to an array and a list box
' Parms    : strDlgWnd: string 'Graph tree reordering' (as of now)
' Ret. Value: (arrList: Array of list box entries
'
' Syntax    : GetProductsListFromList "Graph tree reordering", arrProds
'
' Prereqs  : opened catia dialog 'Graph tree reordering'
' Remarks  : Since the VB-List box is not sorted, the array is used as buffer and sorted
'          : May crash, if another programme titled 'Graph tree reordering' exists
'---------------------------------------------------------------------------------------
'
Public Sub GetProductsListFromList(strDlgWnd As String, arrList() As String)
  Dim strBuff As String
  Dim iNum As Integer
  Dim n As Integer
  Dim iTextLen As Integer
  Dim iMaxTextLen As Integer
  Dim iMaxIndex As Integer
 
  frmProdSort.lb_Prods.Clear                                        'clear list
 
  hWndDlg = FindWindow(vbNullString, strDlgWnd)                    'get parent handle
  If hWndDlg = 0 Then                                              'no such window
      MsgBox "Dialog not found!", vbOKOnly Or vbCritical, "GetProductsList"
      Exit Sub
  End If
  EnumChildWindows hWndDlg, AddressOf EnumChildProc, ByVal 0&      'get children handles

  iNum = SendMessageByNum(hWndListBox, LB_GETCOUNT, 0&, 0&)        'get number of entries
  ReDim arrList(iNum - 1)
  For n = 0 To iNum - 1
      iTextLen = SendMessageByNum(hWndListBox, LB_GETTEXTLEN, n, 0&)
      strBuff = Space$(iTextLen)
      SendMessageString hWndListBox, LB_GETTEXT, n, strBuff          'read lb entry text
      frmProdSort.lb_Prods.AddItem strBuff                          'add to list
      arrList(n) = strBuff                                          'add to array
      If iTextLen > iMaxTextLen Then iMaxIndex = n                  'store max text length index
  Next
End Sub


- Bestimmen der Kinder

Code:

'---------------------------------------------------------------------------------------
' Procedure : EnumChildProc
' Author    : jherzog
' Date      : 13.02.2015
' Time      : 15:14
' Languages : VB6 Pro SP6
' V5-Release: V5R19/21
' Purpose  : Find and identify child windows
' Parms    : hwndChild: handle to a child window
'          : lParam: not used
' Ret. Value: Handles to three buttons and the list box holding the product entries
'          ' The handles are declared 'Public'
' Syntax    : - (callback function)
'
' Prereqs  : Call to EnumChildWindows
' Remarks  : Button and list box identifiers supplied by Spy++
'---------------------------------------------------------------------------------------
'
Public Function EnumChildProc(ByVal hwndChild As Long, ByVal lParam As Long) As Long
  Dim strBuff As String                                    'string buffer
 
  strBuff = Space$(GetWindowTextLength(hwndChild) + 1)    'Get the windowtext length
  GetWindowText hwndChild, strBuff, Len(strBuff)          'get the window text
  strBuff = Left$(strBuff, Len(strBuff) - 1)              'remove the last Chr$(0)
 
  Select Case strBuff
      Case "ListProd"                                      'look for 'ListProd'
        hWndListBox = hwndChild                            'assign to public handle
      Case "Move Up"                                        'look for 'MoveUp'
        hWndLBUpArrow = hwndChild
      Case "Move Down"                                      'look for 'MoveDown'
        hWndLBDownArrow = hwndChild
      Case "Free Move"                                      'look for 'MoveDown'
        hWndLBFreeMove = hwndChild
      Case Else
  End Select
  EnumChildProc = 1                                        'continue enumeration
End Function

- der QuickSort

Code:

' QuickSort-Algorithmus
' Autor:  Dieter Otter
' www.tools4vb.de
'
' vSort() : zu sortierendes Array
' lngStart, lngEnd: zu sortierender Bereich
' ==========================================
Public Sub QuickSort(vSort As Variant, _
  Optional ByVal lngStart As Variant, _
  Optional ByVal lngEnd As Variant)

  ' Wird die Bereichsgrenze nicht angegeben,
  ' so wird das gesamte Array sortiert
 
  If IsMissing(lngStart) Then lngStart = LBound(vSort)
  If IsMissing(lngEnd) Then lngEnd = UBound(vSort)
 
  Dim i As Long
  Dim j As Long
  Dim H As Variant
  Dim X As Variant
 
  i = lngStart
  j = lngEnd
  X = vSort((lngStart + lngEnd) / 2)
 
  ' Array aufteilen
  Do
 
      While (vSort(i) < X)
        i = i + 1
      Wend
      While (vSort(j) > X)
        j = j - 1
      Wend
     
      If (i <= j) Then
        ' Wertepaare miteinander tauschen
        H = vSort(i)
        vSort(i) = vSort(j)
        vSort(j) = H
        i = i + 1
        j = j - 1
      End If
  Loop Until (i > j)
 
  ' Rekursion (Funktion ruft sich selbst auf)
  If (lngStart < j) Then QuickSort vSort, lngStart, j
  If (i < lngEnd) Then QuickSort vSort, i, lngEnd
End Sub

- Die Routine zum Ändern der Catia-Liste

Code:

'---------------------------------------------------------------------------------------
' Procedure : btnSendToCatList_Click
' Author    : jherzog
' Date      : 14.02.2015
' Time      : 21:49
' Languages : VB6 Pro SP6
' V5-Release: V5R19/21
' Purpose  : rearrange catia products list box according to sorted vb list box
' Parms    : -
' Ret. Value: -
'
' Syntax    : - (Press the button
'
' Prereqs  : Filled vb list box
' Remarks  : If the catia list box is not resized prior to sending the rearranging
'          : commands, the routine fails miserably.
'          : Increasing the loop delay time would not remedy the situation.
'---------------------------------------------------------------------------------------
'
Private Sub btnSendToCatList_Click()
  Dim iOldPos As Integer
  Dim n As Integer
 
  btnGetList.Enabled = False          'no reentry please
  btnSortList.Enabled = False
  btnSendToCatList.Enabled = False
  btnExit.Enabled = False
  btnSetDelay.Enabled = False
 
  MousePointer = vbHourglass
  ResizeDialogWindow                  'show all entries in catia dialog list box
 
  For n = 0 To lb_Prods.ListCount - 1 'work thru sorted vb-list
      iOldPos = SendMessageString(hWndListBox, LB_SELECTSTRING, -1&, lb_Prods.List(n))
      ClickListItem iOldPos            'select the element to move
      PushFreeMove                    'select free move button
      ClickListItem n                  'select destination
      Sleep lDelay                    'give catia time to react
      DoEvents
  Next
 
  MousePointer = vbNormal
 
  btnGetList.Enabled = True          'back to normal
  btnSortList.Enabled = True
  btnSendToCatList.Enabled = True
  btnExit.Enabled = True
  btnSetDelay.Enabled = True
End Sub

Der restliche Code mit Deklarationen in der zip.

Enjoy,
Joe

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

tomtom1972
Mitglied
dipl ing maschinenbau


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

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 26. Mrz. 2015 13: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 Nur für K.Siebert 10 Unities + Antwort hilfreich

Hallo Joe,

das ist mal ein Ansatz, der mir gefällt; die Form anziehen und die Listeneinträge auslesen und sortieren 

Was ich allerdings nicht verstehe ist die Tatsache, das das Sortieren der Liste nur funktioniert, wenn das Menü so groß aufgeklappt wird, das alle Einträge gelesen werden können.
Ragt das Menü über den unteren Bildschirmrand hinaus, so werden die unten stehenden (also sich auserhalb des Bildschirms befindenden) Einträge (z.B. bei Baugruppen mit >200 Teilen) nicht mehr sortiert.

Kennst du den Grund hierfür?

Danke & Gruß tomtom

------------------
tomtom1972

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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 27. Mrz. 2015 03: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 K.Siebert 10 Unities + Antwort hilfreich

Hi Tom,

und danke 8-).

Das ist ein Timing-Problem.
Der Klick kommt vor die Box runtergescrollt ist.
Dadurch wird das falsche Element ausgewählt
(deswegen verlängere ich auch die Liste).
Um das zu umgehen hab ich den Delay eingeführt,
aber scheinbar muss ich da noch nachdenken.

Vielleicht komm ich am WE dazu.

Womit programmierst Du? Wie steht's mit Deinen Api-Kenntnissen?

Tschau,
Joe

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

tomtom1972
Mitglied
dipl ing maschinenbau


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

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 28. Mrz. 2015 07:03    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 K.Siebert 10 Unities + Antwort hilfreich

Hallo joe,
ich programmiere auf VB6.
Ich habs zwischenzeitlich auch mal mit .net probiert, aber solange CATIA über .COM läuft werde ich bei VB6 bleiben.
Deinen Code habe ich soweit ganz gut verstanden, nur der QuickSort-Algorithmus von Dieter Otter erschliesst sich mir nicht ganz, obwohl ich den vor ein paar Jahren schon mal in Verwendung hatte.
Ich programmiere allerdings quick & dirty und nicht so schön wie du.
Ich habe es auch mit einem sleep & und ohne das aufklappen versucht, aber das läuft nicht stabil.


Danke & Gruß TomTom


------------------
tomtom1972

[Diese Nachricht wurde von tomtom1972 am 28. Mrz. 2015 editiert.]

[Diese Nachricht wurde von tomtom1972 am 28. Mrz. 2015 editiert.]

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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 28. Mrz. 2015 23: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 K.Siebert 10 Unities + Antwort hilfreich


ProdSort_V11.zip

 
Hi Tom,

mir geht's nicht um Schönheit, nur um's verstehen.
Anbei zwei 'leicht' abgeänderte Versionen; ein Mal wie die vorherige
und ein Mal mit per Api erzeugter U/D-Control. Probier mal ein Element innerhalb der Liste zu verschieben,
dann weisst warum.

Die Sortier-Routine wandelt jetzt, vor dem eigentlichen Sortieren,
die Instances in 4-stellige um, sortiert, und wandelt zu dem ursprünglichen Namen zurück.
Warum? Sortierung bisher: 1,11,12,13,2,3,31,32,4,...

Das Zurückschreiben der Products hab ich auch geändert.

Aber sieh' selbst:

Code:

'---------------------------------------------------------------------------------------
' Procedure : btnSortList_Click
' Author    : jherzog
' Date      : 28.03.2015
' Time      : 15:08
' Languages : VB6 Pro SP6
' V5-Release: V5R19/21
' Purpose   : Calls Quick Sort; restores original product names
' Parms     : -
' Ret. Value: - (Sorted list)
'
' Syntax    : -
'
' Prereqs   :
' Remarks   : Improved sort due to 4-digit product instances
'---------------------------------------------------------------------------------------
' Changes   : 28.03.2015: Added 4-digit instance counter;
'
'
'---------------------------------------------------------------------------------------
Private Sub btnSortList_Click()
   Dim n As Integer
   Dim iPt As Integer                              'location of point within name
   Dim strInst As String                           'instance string
   Dim iBracket As Integer                         'loc of bracket

   For n = 0 To UBound(arrProds)                   'change instance counter to 4 digits
      'check, if part/product is in design mode or visualization mode; '(' or '[' ?
      iPt = InStr(arrProds(n), ".")                                      'find point
      If InStr(arrProds(n), "[") Then                  'visualization mode
         iBracket = InStr(arrProds(n), "[")
         strInst = Mid$(arrProds(n), iPt + 1, iBracket - iPt - 2)           'save original instance
         arrProds(n) = Left$(arrProds(n), iPt) & Format(strInst, "0000") _
            & Right$(arrProds(n), Len(arrProds(n)) - iBracket + 2)           'format instance for sorting
      ElseIf InStr(arrProds(n), "(") Then           'design mode; instance is followed by single ')'
         'convert instance counter to 4 digits before sorting; restore before rearranging product list
         strInst = Mid$(arrProds(n), iPt + 1, (Len(arrProds(n))) - iPt - 1)    'get instance
         arrProds(n) = Left$(arrProds(n), iPt) & Format(strInst, "0000") & ")" 'format instance for sorting
      End If
   Next

   lb_Prods.Clear                                  'clear list
   QuickSort arrProds                              'sort array
  
   For n = 0 To UBound(arrProds)                   'restore file names to original
      iPt = InStr(arrProds(n), ".")                'find point
      If InStr(arrProds(n), "[") Then              'visualization mode
         iBracket = InStr(arrProds(n), "[")        'find bracket
         arrProds(n) = Left$(arrProds(n), iPt) & CInt(Mid$(arrProds(n), iPt + 1, 4)) _
            & Mid$(arrProds(n), iBracket - 1, Len(arrProds(n)) - iBracket + 2)
      ElseIf InStr(arrProds(n), "(") Then           'design mode; instance is followed by single ')'
         arrProds(n) = Left$(arrProds(n), iPt) & CInt(Mid$(arrProds(n), iPt + 1, 4)) & ")"
      End If
      lb_Prods.AddItem arrProds(n)
   Next
   lblListCount.Caption = "Entries: " & Format$(lb_Prods.ListCount, "0000")
End Sub

'---------------------------------------------------------------------------------------
' Procedure : btnSendToCatList_Click
' Author    : jherzog
' Date      : 14.02.2015
' Time      : 21:49
' Languages : VB6 Pro SP6
' V5-Release: V5R19/21
' Purpose   : rearrange catia products list box according to sorted vb list box
' Parms     : -
' Ret. Value: -
'
' Syntax    : - (Press the button
'
' Prereqs   : Filled vb list box
' Remarks   :
'---------------------------------------------------------------------------------------
' Changes   : 28.03.2015   : Added delays; added LB_SETCURSEL message;
'                          : added counter + msgbox
'                          : ResizeDialogWindow removed
'---------------------------------------------------------------------------------------
Private Sub btnSendToCatList_Click()
   Dim iOldPos As Integer
   Dim n As Integer
   Dim lRet As Long
  
   btnGetList.Enabled = False          'no reentry please
   btnSortList.Enabled = False
   btnSendToCatList.Enabled = False
'   btnExit.Enabled = False
   btnSetDelay.Enabled = False
  
   MousePointer = vbHourglass
'   ResizeDialogWindow                  'show all entries in catia dialog list box
  
   lblListCount.Caption = "Entries: " & Format$(n + 1, "0000")    'reset counter
   For n = 0 To lb_Prods.ListCount - 1 'work thru sorted vb-list
      iOldPos = SendMessageString(hWndListBox, LB_SELECTSTRING, -1&, lb_Prods.List(n))
      DoEvents
      Sleep lDelay \ 4          'give catia time to react
      ClickListItem iOldPos            'select the element to move
      DoEvents
      Sleep lDelay                     'give catia time to react
      PushFreeMove                     'select free move button
      DoEvents
      Sleep lDelay \ 4          'give catia time to react
      lRet = SendMessageByNum(hWndListBox, LB_SETCURSEL, n, 0&)
      If lRet < 0 Then MsgBox "error"
      DoEvents
      Sleep lDelay \ 4           'give catia time to react
      ClickListItem n                  'select destination
      DoEvents
      Sleep lDelay \ 4          'give catia time to react
      lblListCount.Caption = "Entries: " & Format$(n + 1, "0000")
   Next
  
   MousePointer = vbNormal
  
   btnGetList.Enabled = True           'back to normal
   btnSortList.Enabled = True
   btnSendToCatList.Enabled = True
'   btnExit.Enabled = True
   btnSetDelay.Enabled = True
   MsgBox "Sort finished!", vbOKOnly Or vbInformation, "SendToCatList"
End Sub


Der Delay war bisher zu (ehr-)geizig. Jetzt lass ich der Catia deutlich mehr Zeit zum Reagieren.

Das passiert hier:

Code:

Private Sub btnGetList_Click()
   GetProductsListFromList "Graph tree reordering"
   lblListCount.Caption = "Entries: " & Format$(lb_Prods.ListCount, "0000")

   lDelay = 1000 + (lb_Prods.ListCount \ 10) * 100    '10 msec per entry
   lblDelay.Caption = "Delay: " & lDelay & "ms"
  
   btnSortList.Enabled = True
   btnSendToCatList.Enabled = True
End Sub



und hier, wie bisher:
Code:

Private Sub btnSetDelay_Click()
   Dim strRet As String
  
SetDelay_Again:
   strRet = InputBox("Enter delay value!(500 - 5000)", "Set delay value", lDelay)
   If strRet <> "" Then                   'then check the value entered
      If Val(strRet) >= 500 And Val(strRet) <= 5000 Then
         lDelay = CLng(strRet)            'if value OK set new delay time
         lblDelay.Caption = "Delay: " & strRet & "ms"
      Else                                'invalid entry
         Beep
         GoTo SetDelay_Again              'do it again
      End If
   End If
End Sub

Eh' ich's vergesse: Lass' die Finger von Keyboard/Maus solange das Makro läuft.
Die DoEvents sollen der Catia Zeit geben, auf die Kommandos (Scrollen) zu reagieren.
Wenn Du die CPU mit anderen Aufgaben in der gleichen Zeit zuballerst, verschluckt sich die Dame immer noch.

Have fun,
Joe

PS: Wenn Du auch so schön programmieren magst :-), kann ich Dir die MZ-Tools
http://www.mztools.com/index.aspx
wärmstens empfehlen. Gibt's für VB und VBA.

[Diese Nachricht wurde von joehz am 28. Mrz. 2015 editiert.]

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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 29. Mrz. 2015 20:07    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 K.Siebert 10 Unities + Antwort hilfreich


ProdSort_V111.zip

 
Mir ist noch eine kleine Optimierung eingefallen:
Wenn in der Routine 'btnSendToCatList_Click' eine Abfrage,
ob die Position schon richtig ist, eingebaut wird, läuft's uU schneller.

Also:

Code:

'---------------------------------------------------------------------------------------
' Procedure : btnSendToCatList_Click
' Author    : jherzog
' Date      : 14.02.2015
' Time      : 21:49
' Languages : VB6 Pro SP6
' V5-Release: V5R19/21
' Purpose  : rearrange catia products list box according to sorted vb list box
' Parms    : -
' Ret. Value: -
'
' Syntax    : - (Press the button
'
' Prereqs  : Filled vb list box
' Remarks  :
'---------------------------------------------------------------------------------------
' Changes  : 28.03.2015  : Added delays; added LB_SETCURSEL message;
'                          : added counter + msgbox
'                          : ResizeDialogWindow removed
'---------------------------------------------------------------------------------------
Private Sub btnSendToCatList_Click()
  Dim iOldPos As Integer
  Dim n As Integer
  Dim lRet As Long
 
  btnGetList.Enabled = False          'no reentry please
  btnSortList.Enabled = False
  btnSendToCatList.Enabled = False
  btnSetDelay.Enabled = False
 
  MousePointer = vbHourglass
 
  For n = 0 To lb_Prods.ListCount - 1 'work thru sorted vb-list
      iOldPos = SendMessageString(hWndListBox, LB_SELECTSTRING, -1&, lb_Prods.List(n))
      If iOldPos = n Then GoTo Skip 'skip if pos is already correct
      DoEvents
      Sleep lDelay \ 4          'give catia time to react
      ClickListItem iOldPos            'select the element to move
      DoEvents
      Sleep lDelay                    'give catia time to react
      PushFreeMove                    'select free move button
      DoEvents
      Sleep lDelay \ 4          'give catia time to react
      lRet = SendMessageByNum(hWndListBox, LB_SETCURSEL, n, 0&)
      If lRet < 0 Then MsgBox "error"
      DoEvents
      Sleep lDelay \ 4          'give catia time to react
      ClickListItem n                  'select destination
      DoEvents
      Sleep lDelay \ 4          'give catia time to react
Skip:
      lblListCount.Caption = "Entries: " & Format$(n + 1, "0000")
  Next
 
  MousePointer = vbNormal
 
  btnGetList.Enabled = True          'back to normal
  btnSortList.Enabled = True
  btnSendToCatList.Enabled = True
  btnSetDelay.Enabled = True
  MsgBox "Sort finished!", vbOKOnly Or vbInformation, "SendToCatList"
End Sub

Exe anbei.

Enjoy,
Joe

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

tomtom1972
Mitglied
dipl ing maschinenbau


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

Beiträge: 605
Registriert: 22.03.2005

NVidia Quadro K4000
Intel Xeon E5-1620, 64GB RAM
Windows10 64bit
R30 <= CATIA V5 > =R19

erstellt am: 30. Mrz. 2015 09:42    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 K.Siebert 10 Unities + Antwort hilfreich

Hi Joe,
und danke.

Hhm. Das läuft bei mir nun gar nicht rund, ich habe aber noch nicht verstanden wo das Problem liegt.
Ich hatte deinen Ursprungscode schon ein bischen verändert und die Form komplett beseitigt, d.h. ich sortierte direkt in eine Liste und von daraus zurück.
Wenn ich das Aufklappen des Dialoges komplett auskomentiert lasse habe ich bei > 200 Nodes ca. 5% Ausreißer. Diesmal nicht nur am Ende, sondern auch direkt am Anfang; da hatte ich vorher keine. Trotz Delay und stillgehaltener Finger.
Wenn ich mal ein paar ruhige Minuten finde muss ich mich erstmal vergewissern, ob ich alles richtig angepasst habe.

Eine kurze Anmerkung zum Anpassen der Instancenamen. Neben den drei dokumentierten CatWorkModeTypes DEFAULT_MODE, VISUALIZATION_MODE und DESIGN_MODE gibts auch noch den STANDARD_MODE (welcher interaktiv gar nicht verfügbar ist)
Ich schalte grundsätzlich alle Knoten rekursiv pro forma auf "Standard Mode" (...Products.Item.ApplyWorkMode STANDARD_MODE).Das geht auch bei sehr großen Strukturen sehr schnell; dann kannst du die Stringunterscheidung weglassen.

Gruß TomTom

 

------------------
tomtom1972

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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 30. Mrz. 2015 12: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 K.Siebert 10 Unities + Antwort hilfreich

Hi Tom,

ich hab gestern probeweise 400+ Verbindungselemente sortiert.
Der Job lief ca. 35', die Sortierung wurde fehlerfrei übernommen.
Sowohl innerhalb der IDE, als auch kompiliert.
Deshalb die Frage: Hast mal eine von den Exes probiert?

Ausserdem: Das Vergrössern der Catia-ListBox ist nicht hilfreich, besonders dann,
wenn nicht alle Einträge dadurch sichtbar werden.

Zu den WorkModes: Interaktiv kann ich nur zwei vorgeben.
Den 'DEFAULT_MODE' kann ich nur programmatisch vorgeben.
'Standard_Mode' kennt mein Catia nicht. Wenn ich's damit versuche, kommt ein 'Variable not defined'-Fehler.
Würde ich jetzt die Variable definieren, aber 'Standard_Mode' keinen Wert zuweisen,
so ist der NULL und entspricht somit dem 'DEFAULT_MODE'.

Tschau,
Joe

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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 14. Aug. 2015 14:58    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 K.Siebert 10 Unities + Antwort hilfreich

Hallo Leut',

es gibt eine neue Version von ProdSort.
Zu finden unter:

http://catia2.cad.de/index.php/de/downloads/skripts-applikationen/210-prodkt-sortieren

Änderungen: Bugfix: Bei Produukten ohne Angabe der Instanz ('.1') kam's zum Absturz
Neu: Sortier-Parameter '-c', damit 'a' vor 'Z' einsortiert wird.

Wie gehabt mit EXE und Source.

Have fun,
Joe

------------------
The problem with the world is that the intelligent people are full of doubts, while the stupid ones are full of confidence.
~Charles Bukowski

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

Andreas aus E
Mitglied
Werkzeugkonstrukteur


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

Beiträge: 32
Registriert: 01.11.2001

V5R20SP5

erstellt am: 19. Okt. 2015 22: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 Nur für K.Siebert 10 Unities + Antwort hilfreich

Vielen Dank an Euch, dass Ihr dieses Sortierproblem endlich mal angegangen seid und diese schöne Lösung gefunden habt.

Kann man diese Methode nicht auch im Partdesign anwenden?
Der Dialog "Kinder neu ordnen" im Partdesign sieht ja dem "Grafikbaum sortieren" im Produktdesign sehr ähnlich.

Ich muss ab und zu Step-Dateien einlesen, die ohne Struktur mit -zig Körpern in einem Part ankommen.
Viele dieser Körper haben gleiche Namen und ich möchte diese gerne sortieren und danach die gleichnamigen von Hand oder vielleicht später auch mal autmatisch in jeweils eigene Parts reinkopieren. Oder geht das vielleicht gar nicht, weil die Körper keine eindeutigen Namen bzw. Suffix wie die Instanzen im Produkt haben?

Ich weiss, ich könnte auch das PartToProduct-Makro nutzen und dann auf Produktebene sortieren. Bei 500 und mehr Körpern wird aber mein Rechner immer langsamer, weil die erzeugten Parts ja erst gespeichert werden können, wenn das Makro abgelaufen ist.

Gruß aus Thüringen

Andreas

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

joehz
Moderator
Freiberuflicher Konstrukteur


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

Beiträge: 1057
Registriert: 25.11.2006

Win7 Pro 64 + Ubuntu + Irix6.5.20
Dell Precision M6600 i7-2960XM 2.7GHz 16GB
NVidia Quadro M5010
Catia V5R19
VB6Pro.SP6/VBA 6.5.1053

erstellt am: 19. Okt. 2015 23:29    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 K.Siebert 10 Unities + Antwort hilfreich

Hallo Andreas,

ja, ähnlich, aber mit ein paar Besonderheiten:

Systemebenen und Achsen, Parameter u. ähnliches, Messungen  etc.
lassen sich nicht verschieben.
Sie müssen aber auch nicht vorhanden sein.

Ich hab's mal angedacht, bin aber noch nicht dazugekommen.

Falls ja, wird's im 'Poor Man's Product To Part' auftauchen.
Die Routine ist auch noch nicht fertig ausprogrammiert.

Tschau,
Joe

------------------
Inoffizielle Catia Hilfeseite

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 20. Okt. 2015 06:59    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 K.Siebert 10 Unities + Antwort hilfreich

Servus
Wenn es nur um "dumme" Körper geht könntest du diese Makro entsprechend ändern (die Körper anstatt der Products der Collection hinzufügen)

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

Andreas aus E
Mitglied
Werkzeugkonstrukteur


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

Beiträge: 32
Registriert: 01.11.2001

V5R20SP5

erstellt am: 20. Okt. 2015 23:07    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 K.Siebert 10 Unities + Antwort hilfreich


partreorder.CATScript.txt

 
Danke für Eure schnellen Antworten.

Ich habe mir mal das Produktbaumsortieren-Makro zum partreorder umgestrickt.
So einfach ist das aber garnicht, da im Partdesign cut&paste nicht zugelassen ist. Jedenfalls darf ich auch im normalen Umgang keinen Körper innerhalb eines Parts ausschneiden und in das gleiche Part wieder einfügen. Mit dem Hauptkörper, der an oberster Stelle steht, geht das erst recht nicht.
Ich mache also copy&paste und kann damit in dem Part die Körper duplizieren und sortiert einfügen.
Das klappt soweit und ist in diesem Makro drin.

Aber wie bekomme die unsortierten Körper, die immer noch oben im Baum stehen wieder raus.
Daran scheitere ich im Moment. Ich habe mir das so vorgestellt, dass ich einen zusätzlichen Körper einfüge, den als Hauptkörper deklariere, damit sollte der dann an erster Stelle stehen und dann kann ich eventuell die Selektion aus der vorherigen Sortiererei wieder aufrufen und diese Körper löschen.

Kann das funktionieren und wie bekomme ich einen Körper zum Hauptkörper definiert?

Danke schonmal im Voraus falls Ihr mir helfen könnt und wollt.

Gruß
Andreas

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

Andreas aus E
Mitglied
Werkzeugkonstrukteur


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

Beiträge: 32
Registriert: 01.11.2001

V5R20SP5

erstellt am: 28. Okt. 2015 11:43    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 K.Siebert 10 Unities + Antwort hilfreich

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 28. Okt. 2015 12:57    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 K.Siebert 10 Unities + Antwort hilfreich

Servus Andreas
Möchtest du dein Makro mit uns teilen?
Ich könnte dies auch brauchen.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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

Andreas aus E
Mitglied
Werkzeugkonstrukteur


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

Beiträge: 32
Registriert: 01.11.2001

V5R20SP5

erstellt am: 28. Okt. 2015 14:12    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 K.Siebert 10 Unities + Antwort hilfreich

Hallo Bernd,

was verstehst Du unter "mit Euch teilen"?
Ich dachte, ich gebe das Makro schon damit frei, in dem ich es als .txt-Anhang an einen Beitrag hänge, oder muss ich da noch mehr beachten?

Ich würde ansonsten das Makro "PartBodyReorder", so wie ich es an den letzten Eintrag angehangen habe, für alle zur Verwendung freigeben.
Ich habe ja auch nur vorhandene Sachen zusammenkopiert.

Gruß
Andreas

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

bgrittmann
Moderator
Konstrukteur


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

Beiträge: 11780
Registriert: 30.11.2006

CATIA V5R19

erstellt am: 28. Okt. 2015 14: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 Nur für K.Siebert 10 Unities + Antwort hilfreich

Servus
Ups ich hab den Anhang übersehen.
Us sind unterwegs.

Gruß
Bernd

------------------
Warum einfach, wenn es auch kompliziert geht.

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