Hot News:

Mit Unterstützung durch:

  Foren auf CAD.de (alle Foren)
  CATIA V5 Programmierung
  Alle Kombinationen aus mehreren Konfigurationstabellen

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:  Alle Kombinationen aus mehreren Konfigurationstabellen (851 mal gelesen)
Mjk
Mitglied



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

Beiträge: 14
Registriert: 17.06.2013

CATIA V5-6 R24
WINDOWS 7

erstellt am: 24. Nov. 2016 08: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

Hallo zusammen,

ich bin jetzt schon seit einigen Wochen am Verzweifeln, bzw. ich zweifele an mir.
Ich habe mir die Aufgabe gestellt eine VBA Macro zu erstellen in dem der User eine oder mehrere Konfigurationstabellen aus dem Strukturbaum auswählen kann.
In der Folge soll dann jede mögliche Konfigurationskombination gebildet werden.
Anschließend wird die Ergebnisgeometrie verarbeitet.

Ich habe die Selektion fertig.
Auch die Verarbeitung klappt bereits.
Was mir gerade schwer fällt ist das Bilden der Kombinationen.
z.Z. liegen die Konfigurationstabellen nach der Selektion als Objekte in einem Array.
Ich kann dort also alle Daten finden die mir bisher nötig erscheinen: Anzahl der Tabellen und für jede Tabelle die Anzahl der Konfigurationen, sowie die momentane Konfiguration.

Ich bin für jede Hilfe und jeden Denkansatz dankbar.
Wenn ich was vergessen habe zu schreiben, dann lasst es mich bitte wissen.

Gruß
Mjk

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: 24. Nov. 2016 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 Mjk 10 Unities + Antwort hilfreich

Also - so ganz hab ich das nicht verstanden.

Bei Tabellen denk ich immer an Normteile/Normalien etc.
Dinge bei denen sich die Varianten gut in einer Tabelle darstellen lassen.
Allerdings wird dann immer genau eine Variante angewandt.

Was heisst

Zitat:
jede mögliche Konfigurationskombination

und wie willst Du die - gleichzeitig - darstellen?

Tschau,
Joe

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

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

Mjk
Mitglied



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

Beiträge: 14
Registriert: 17.06.2013

CATIA V5-6 R24
WINDOWS 7

erstellt am: 24. Nov. 2016 18: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

Hallo,

Vielen Dank für die Rückmeldung.
sorry, dass ich mein Problem nicht ausreichend beschrieben habe.

Ein Beispiel aus meiner Welt:
Ich bin Optikentwickler und möchte z.B. ein System mit 3 Lichtquellen und 3 passenden Reflektoren erstellen.
Jetzt möchte ich die Brennweite jeder Lichtquelle zum Reflektor einstellen. Dieser Wert kann z.B. 10, 15, 20mm annehmen, kann aber für jeden Reflektor unterschiedlich sein.

Ich habe mir drei DesignTables mit der Variation für jeden Reflektor angelegt.
Jetzt könnte ich manuell die Konfigurationen kombinieren...

Kombination 1
Reflektor 1 - 10mm
Reflektor 2 - 10mm
Reflektor 3 - 10mm

---Berechnung---

Kombination 2
Reflektor 1 - 15mm
Reflektor 2 - 10mm
Reflektor 3 - 10mm

---Berechnung---

Kombination 3
Reflektor 1 - 20mm
Reflektor 2 - 10mm
Reflektor 3 - 10mm

usw...

Ich möchte also nicht jede Kombination gleichzeitig einstellen können sondern nach und nach alle Möglichkeiten durchprobieren...
Das Ganze soll dann nicht mit 3 Tabellen, sondern mit n Tabellen mit beliebiger Konfigurationszahl funktionieren.
Das Ganze sah auf den ersten Blick nach Schleifen in VBA aus.

P.S. das ganze funktioniert bereits mit einer Tabelle also die ganze logik drum herum sollte funktionieren, aber eine Schleife (mehrere Schleifen) die sich selbst durchhangelt will mir einfach nicht gelingen.

Vielen Dank.

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: 24. Nov. 2016 20: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 Mjk 10 Unities + Antwort hilfreich

Hi,

So wie ich das jetzt verstehe, willst alle denkbaren Kombinationen durchlaufen.
Na denn ...

Code:

Option Explicit

Private Sub ScanKombis()                                  'umbenannt; war FormLoad
  Dim i As Integer
  Dim j As Integer
  Dim k As Integer
  Dim n As Integer
  Dim arrRefl                                            'array der reflektorenwerte

  arrRefl = Array(10, 15, 20)                            'geht genauso gut in einzelanweisungen

  For i = 0 To UBound(arrRefl)
      For j = 0 To UBound(arrRefl)
        For k = 0 To UBound(arrRefl)
            n = n + 1                                      'zähler erhöhen
            'Variante und Kombi ausgeben
            Debug.Print "Variante: " & n, "i = " & arrRefl(i), "j = " & arrRefl(j), "k = " & arrRefl(k)
        Next
      Next
  Next
End Sub



Lass den Code im VBA-Editor laufen.
Der 'Debug.Print' gibt die Variante mit der aktuell verwendeten Kombi aus.
Stattdessen kannst auch eine andere Funktion mit den drei Variablen füttern.

Hope it helps,
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: 24. Nov. 2016 21: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 Mjk 10 Unities + Antwort hilfreich

Servus
Warum hast du den drei Tabellen?
Wäre es nicht einfach alle drei Reflektoren in einer Tabelle steuern?
Die verschiedenen Kombinationen könntest du in der Tabelle recht einfach "eingeben" (ist ja ein "Muster")

Gruß
Bernd

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

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

Mjk
Mitglied



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

Beiträge: 14
Registriert: 17.06.2013

CATIA V5-6 R24
WINDOWS 7

erstellt am: 28. Nov. 2016 07: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,

vielen Dank für eure Antworten.
@Joe - ja, der Code zielt in die richtige Richtung, aber mein Ziel ist ja, dass der Benutzer die Tabellen auswählen kann - ich weiß also nicht wie viele Tabellen kombiniert werden sollen. Das Ganze soll also allgemeingültiger formuliert werden und genau daran scheitere ich.

@Bernd - das Beispiel mit den Reflektoren ist wirklich sehr Simpel - zum Testen. Da könnte ich wirklich alles in eine Tabelle schreiben.

Gruß
Martin

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. Nov. 2016 10: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 Mjk 10 Unities + Antwort hilfreich

Servus
Schöne Aufgabe. (ggf steht in einem Mathematikbuch ein guter Lösungsansatz)
Meine Idee wie man das lösen könnte. zB gegeben sind drei Tabellen mit (2, 3, 2) Einträgen. Die Anzahl der Kombinationen ist 2*3*2=12.
Einen Array(1 to 12, 1 to 3) erstellen und mit einer Schleife Spalten (Tabellen) ausfüllen.
Dabei mathematisch das Muster beschreiben.
Code:
1,1,1
2,1,1
1,2,1
2,2,1
1,3,1
2,3,1
1,1,2
2,1,2
1,2,2
2,2,2
1,3,2
2,3,2
Also in der ersten Spalte Wiederholung jeder Variante von 1, in der zweiten 1 * 2 (Anzahl der Varianten aus der ersten Spalte) = 2, in der dritten 1*2*3=6 usw
Mit Sicherheit geht das auch mathematisch eleganter.

Gruß
Bernd

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

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. Nov. 2016 14:53    Editieren oder löschen Sie diesen Beitrag!  <-- editieren / zitieren -->   Antwort mit Zitat in Fett Antwort mit kursivem Zitat    Unities abgeben: 1 Unity (wenig hilfreich, aber dennoch)2 Unities3 Unities4 Unities5 Unities6 Unities7 Unities8 Unities9 Unities10 Unities Nur für Mjk 10 Unities + Antwort hilfreich

Hi Martin,

die Antwort ist '42'.

Wenn Du's genauer brauchst, solltest die Aufgabenstellung genauer formulieren/eingrenzen.

Im Ernst: So vage läst sich nicht programmieren.
Wenn Du nicht weisst wieviele Tabellen(Schleifen) Du brauchst, musst erstmal für alle denkbaren Tabellenkombinationen/anzahlen eine Programmlösung vorhalten a la

If nTables = 3 Then  '3 schleifen
  For n =

elseif nTables = 4 then  '4 schleifen
  For n =

elseif nTables = 5 then  '5 schleifen


etc ad infinitum

Das wird irgendwann albern.

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: 28. Nov. 2016 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 Mjk 10 Unities + Antwort hilfreich

Servus
Ich hab da mal was zusammengebastelt.
Die Idee dahinter ist die Varianten der Reihenfolge "durchzuschalten" wie wenn man an einem Nummernschloss alle Kombination durchprobiert.
Code:
Sub GetComibinations2()

Dim intNumberOfCombinations As Integer
Dim iRow As Integer
Dim iCol As Integer
Dim i As Integer
Dim aSolution()

'Inputarray, definiert die einzelnen Lösungsmöglichkeiten pro Element
Dim aInput(1 To 4) As Integer
aInput(1) = 5
aInput(2) = 3
aInput(3) = 4
aInput(4) = 2

'Anzahl der Kombinationen ermitteln
intNumberOfCombinations = 1

For i = LBound(aInput) To UBound(aInput)
    intNumberOfCombinations = intNumberOfCombinations * aInput(i)
Next

'Lösungsarray anlegen
ReDim aSolution(1 To intNumberOfCombinations, 1 To UBound(aInput))

'Lösungsarray ausfüllen
For iRow = LBound(aSolution, 1) To UBound(aSolution, 1) 'Schleife über alle Zeilen
    'erste Reihe initial ausfüllen
    If iRow = LBound(aSolution, 1) Then
        For iCol = LBound(aSolution, 2) To UBound(aSolution, 2)
            aSolution(iRow, iCol) = 1
        Next iCol
    Else
    'Werte von vorhergender Reihe übertragen
        For iCol = LBound(aSolution, 2) To UBound(aSolution, 2)
            aSolution(iRow, iCol) = aSolution(iRow - 1, iCol)
        Next iCol
        'neue Kombination erstellen: um eins "hochzählen"
        For iCol = LBound(aSolution, 2) To UBound(aSolution, 2)
            'falls letzte Variante schon höchsten indes hat
            If aSolution(iRow - 1, iCol) + 1 > aInput(iCol) Then
                aSolution(iRow, iCol) = 1
            Else
                aSolution(iRow, iCol) = aSolution(iRow - 1, iCol) + 1
                Exit For
            End If
        Next iCol
    End If
Next iRow

MsgBox "Fertig"

End Sub


Mit Sicherheit geht das auch schöner oder eleganter.

Gruß
Bernd

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

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

Mjk
Mitglied



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

Beiträge: 14
Registriert: 17.06.2013

CATIA V5-6 R24
WINDOWS 7

erstellt am: 28. Nov. 2016 20: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

Hallo,

Vielen Dank für den Lösungsvorschlag. Ich werde wohl ein paar Tage brauchen um ihn zu verstehen und umzusetzen. Ich finde aber die Grundidee genial. Ich melde mich dann bald wieder.

Gruß Martin

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

Mjk
Mitglied



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

Beiträge: 14
Registriert: 17.06.2013

CATIA V5-6 R24
WINDOWS 7

erstellt am: 29. Nov. 2016 16:36    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,

es funktioniert!

Vielen, vielen Dank.
Sah gleich genial aus und ist es immernoch!

Ich habe das Befüllen des Inputarrays angepasst...

aDesignTable() enthält die Objekte der Konfigurationstabellen aus der User-Selection

Code:

    'Inputarray, definiert die einzelnen Lösungsmöglichkeiten pro Element
    ReDim aInput(LBound(aDesignTable) To UBound(aDesignTable)) As Integer
   
    For i = LBound(aInput) To UBound(aInput)
        aInput(i) = aDesignTable(i).Value.ConfigurationsNb
    Next

...dann hier und dort ein paar Elemente die zuvor "Fix" waren unabhängig gestaltet...

Code:

'Lösungsarray anlegen
    ReDim aSolution(1 To intNumberOfCombinations, LBound(aInput) To UBound(aInput))

... und am Schluss eine Verarbeitungsschleife gebaut.

Code:

For i = 1 To intNumberOfCombinations
   
        iCurrentConfiguration = 0
       
        For Each Item In aDesignTable
            Item.Value.Configuration = aSolution(i, iCurrentConfiguration)
            iCurrentConfiguration = iCurrentConfiguration + 1
        Next
       
        'Code fuer Simulation
Next


Viele Grüße
Martin

[Diese Nachricht wurde von Mjk am 29. Nov. 2016 editiert.]

[Diese Nachricht wurde von Mjk am 29. Nov. 2016 editiert.]

[Diese Nachricht wurde von Mjk am 20. Dez. 2016 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