Objekte mit unerschiedlichen Variablen duplizieren



  • Hallo zusammen,

    zunächst muss ich wohl leider den Satz los werden, welcher hier äußerst ungerne gelesen wird: Ich bin Anfänger in C++ und muss, um eine Simulationssoftware nutzen zu können, diese Sprache anwenden.

    Die Benutzerschnittstelle (die Macher nennen es gerne Unser-Interface Oo) ist eine cpp-Datei in welcher alle Geometrien für die Simulation hinterlegt werden.

    Das eigentliche Problem:
    Ich habe eine Geometrie erstellt und möchte diese nun - ähnlich wie in einem CAD-Programm - mustern. Das einzige, was sich also an dem Objekt ändert ist die Position in x- und y-Richtung.

    Hier erstmal der code:

    int Programm::initialiseSetup()   {
    ...
    //=======================Collimator====================================== 
    
    //Start Collimator
    CompositeMedium *collimator;
    
    collimator = new CompositeMedium();
    collimator->setKECutOff(0.1 keV);
    collimator->setTitle("Collimator");
    collimator->setMaterial(Material::hatch("absorber"));
    collimator->setVolume(new Box(10 cm, 10 cm, 1.5 cm));
    
    //Schlitze einfügen
    Medium *pfad1;
    pfad1 = new Medium();
    pfad1->setTitle("Pfad");
    pfad1->setMaterial(Material::hatch("air"));
    pfad1->setVolume(new Box(0.1 cm, 0.1 cm, 1.5 cm));
    pfad1->setKECutOff(0.1 keV);
    pfad1->move(Vector(4.9 cm, 4.9 cm , 0 cm));
    collimator-> addMedium(pfad1);
    
    Medium *pfad2;
    pfad2 = new Medium();
    pfad2->setTitle("Pfad");
    pfad2->setMaterial(Material::hatch("air"));
    pfad2->setVolume(new Box(0.1 cm, 0.1 cm, 1.5 cm));
    pfad2->setKECutOff(0.1 keV);
    pfad2->move(Vector(4.7 cm, 4.9 cm , 0 cm));
    collimator-> addMedium(pfad2);
    
    //Ende Collimator
    //Positionierung Collimator
    collimator->move(Vector(0,0, 0 cm));
    collimator->rotateX(0);
    collimator->rotateY(0);
    collimator->rotateZ(0);
    
    //zur Welt hinzufügen
    xRayLab->addMedium(collimator);
    ViewList *vl4 = new ViewList();
    collimator->createDetectorView(*vl4);
    viewListList.append(vl4);
    
    ...
    
    return 0;
    }
    

    Im Code werden "pfad1" und "pfad2" einzeln initialisiert. Die Musterung soll über move(Vector(n, m , 0 cm)) erfolgen.

    Nun meine Frage: Wie stelle ich es an, ohne jedes Objekt wie oben geschrieben erstellen zu müssen. Vermutlich wird es über ein Container lösbar sein, allerdings weiß ich nicht, wie ich dann die entsprechenden Attribute mit übertragen kann.

    Ich hoffe mein Problem ist deutlich und ich hoffe ihr könnt mir helfen.

    Besten Dank - und seid gnädig 😉



  • Ist der gezeigte Code von dir? Da wird jedes Objekt mit "new" erzeugt. Das ist in modernem C++ nicht mehr üblich.

    Mir wird nicht so ganz klar, was du genau machen möchtest. Möchtest du neue Objekte erzeugen, die den existierenden Objekten "ähnlich" sein sollen? Oder möchtest du Eigenschaften existierender Objekte ändern?



  • Erstmal danke für die Antwort.

    Der obige Code ist nicht von mir, sondern nur "adaptiert" aus der Vorlage der "Schnittstelle" des Simulationsprogrammes. Sämtliche Geometrien wurden dort auf diesem Wege erzeugt.

    Sorry, wenn ich mich nicht genau genug ausgedrückt habe:
    Ich möchte neue Objekte erzeugen, die den existierenden ähnlich sein sollen.

    Ich möchte bei jedem neuen Objekt die fetten Werte in
    move(Vector(4.7 cm, 4.9 cm , 0 cm))
    um einen diskreten Wert (z.B. 0.1 cm) Schrittweise verändern...

    Prinzipiell eine triviale for-Schleife aller for(n=-4.9; n<=4.9; n++)......

    Am Ende soll im CompositeMedium Collimator eine quadratische Rasterung der pfad-Elemente entstehen.

    Ich hoffe das macht es deutlicher?

    BG


Anmelden zum Antworten