Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Strukturbaum sortieren

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:  Strukturbaum sortieren (1877 mal gelesen)
shoutz000
Mitglied
Techn. Produktdesigner


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

Beiträge: 168
Registriert: 19.08.2013

CatiaV5 R19
CatiaV5 R24
Windows 7 Professional

erstellt am: 05. Aug. 2014 15: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

Servus miteinander,
und noch ein Problem xD

Naja weniger ein Problem eher die Frage ob eine Schönheitsop möglich
ist. Ich habe hier irgendwo ein Script gefunden mit dem der
Strukturbaum alphabetisch sortiert wird. Dieses Skript habe ich
angepasst und noch einiges hinzugefügt (CatSettings ändern +
zurücksetzen damit keine Constraints verloren gehen, abgleich
Partnumber + Instancename usw).

Nun hat das Script aber bei Zahlen den selben Fehler wie die alten
Windowssysteme. Sortiert wird erst die 1. position dann die 2. d.h.
entsteht diese Hierarchie:

10
11
12
7
8
9
...

gewünscht ist aber:

7
8
9
10
11
12
...


Ich komme nicht wirklich damit weiter das in den Griff zu bekommen.
Kann man das vielleicht beheben?

Hier der relevante Teil:


Sub Sort_Tree(ByVal Dokument As Document)
set Product_Collection = new Collection
Set Produkte = Dokument.Product.Products
for each Product in Produkte
Product_Collection.add Product.Name
next

'Selection im Product
Product_Collection.sort
Set oSel = Dokument.Selection
oSel.clear

for i = 1 to Product_Collection.Count
oSel.add Produkte.Item(Product_Collection.Item(i))
oSel.cut
oSel.clear
oSel.add Dokument.Product
oSel.Paste
oSel.clear
next
end sub

class Collection
private Array()

sub class_initialize()
'Array mit 1 (leeren) Datenfeld anlegen'
Redim Array(0)
End Sub

'Elemat am Ende des Arrays hinzufügen (automatische erweitern)
public Sub add(Datenfeld)
Index = Ubound(Array)
ReDim preserve Array((Index+1))
Array(Index+1) = Datenfeld
end Sub   

'Datenfeld ausgeben
public function Item(Index)

'Überpruefen: Index zu hoch? Index 0 ist leer'
if (Index <= 0 and Index > Ubound(Array)) then       
tem = "ungültiger Index"       
Else   
Item = Array(Index)         
End If   
end function

'den Array absteigend sortieren'
Sub sort

'Bubblesort 
for i = 1 to Ubound(Array)+1
for u = i to Ubound(Array)
if Array(i) > Array(u) then

'temp-Variable schreiben, danach austauschen
temp = Array(i)
Array(i) = Array(u)
Array(u) = temp
end if
next
next       
end Sub

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

RSchulz
Moderator²
Head of CAD, Content & Collaboration / IT-Manager



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

Beiträge: 5541
Registriert: 12.04.2007

@Work
Lenovo P510
Xeon E5-1630v4
64GB DDR4
Quadro P2000
256GB PCIe SSD
512GB SSD
SmarTeam V5-6 R2016 Sp04
CATIA V5-6 R2016 Sp05
E3.Series V2019
Altium Designer/Concord 19
Win 10 Pro x64

erstellt am: 05. Aug. 2014 17:05    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 shoutz000 10 Unities + Antwort hilfreich

Hallo,

also vorab das ist so nicht lesbar. Ganz im Ernst, aber derartigen Code werde ich mir nicht mehr anschauen, das ist schon fast unverschämt. Bitte wenigstens etwas einrücken und entsprechende Leerzeilen einfügen.

Wie würde ich das lösen? Also erstmal würde ich nicht mit eine Collection, sondern mit einem Dictionary arbeiten. Als Key wird der Instanzname und als Value entsprechend die "Product"-Instanz abgelegt. Dann würde ich entsprechend dieses Dictionary neu sortieren bzw. eine eigene Routine schreiben. Das ist allerdings nicht ganz trivial, damit habe ich schon einige Stunden und Tage verbracht, je nach Sortierung und Komplexität bzw. Anzahl Parameter und Abhängigkeiten. Das ist dann auch schon je nach dem höhere Programmierkunst... Danach kannst du dann entsprechend sortieren.

------------------
MFG
Rick Schulz

Nettiquette (CAD.de)  -  Was ist die Systeminfo?  -  Wie man Fragen richtig stellt.  -  Unities

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: 06. Aug. 2014 14:40    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 shoutz000 10 Unities + Antwort hilfreich

Servus
Welche Partnumber hast du? Reine Zahlen? Dann könntest du die zu vergleichenden Nummer erst "casten" (zb in Integer).
Falls es sich um Strings handelt musst du ggf den Vergleich über eine Schleife zeichenweise durchführen (ggf bei Leerzeichen abbrechen), bis du eine eindeutige Aussage bekommst.

Gruß
Bernd

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

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

shoutz000
Mitglied
Techn. Produktdesigner


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

Beiträge: 168
Registriert: 19.08.2013

CatiaV5 R19
CatiaV5 R24
Windows 7 Professional

erstellt am: 08. Aug. 2014 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

Nein es sind nicht nur reine Zahlen.

Die Eigenteile sind kein Problem da die so nummeriert sind, dass
keine Fehler auftreten
009
010
011
diese werden somit richtig sortiert Problem sind nur Normteile wie
z.B. M8 M10 M12...

Ok also wenn das soo kompliziert wird werde ich wohl damit leben
müssen weil das bekomm ich dann nicht hin xD

Und Sorry nochmal wegen den Einschüben ich mach das so aber der Browser setzt alles auf links.
Muss es das nächste mal hier halt nochmals alles grob hinschieben.

[Diese Nachricht wurde von shoutz000 am 08. Aug. 2014 editiert.]

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