hoe groot moet de array gekozen worden?

Status
Niet open voor verdere reacties.

goedlichtJoost

Gebruiker
Lid geworden
7 mrt 2012
Berichten
477
Hallo allemaal,

Ik ben bezig in C# en moet nu een array aanmaken voor het creeëren van meerdere onderdelen.
het aantal onderdelen dat gemaakt moet worden is afhankelijk van een string. In deze string staat eerst het aantal mixen en vervolgens per mix aangegeven.

het werkt alsvolgt:
024|100|5|200

hierbij zijn de eerste 2 tekens het aantal mixen, en vervolgens 4*100 en 5 * 200
dit betekend us dat er 2 variaties komen, de eerste variatie zijn er 4 van 100 en de tweede variatie zijn er 5 van 200.
In totaal worden er dus 9 onderdelen gemaakt. 4 van 100 en 5 van 200 (dit zijn lengtes).

Hiervoor heb ik de volgende handler gebouwd.

Code:
double totaalaantalmixxen;
string[] opbouwdelen = new string[2];
opbouwdelen[0] = opbouwtekst.Substring(0, 2);
opbouwtekst = opbouwtekst.Remove(0, 2);
opbouwdelen[1] = opbouwtekst;
totaalaantalmixxen = Double.Parse(opbouwdelen[0]);

 Beam[] bp = new Beam[99];

// Hier is het splitsen van de onderdelen gebeurt

  if (totaalaantalmixxen > 0)    //Mix aanwezig
            {
                string[] mix = opbouwdelen[1].Split('|'); // data sorteren op | teken
                double Mixaantal;
                double Mixlengte;

// er is een mix aanwezig, dus het tweede gedeelte van de code wordt gesplit op het "|" teken. 
// nu moet de mix array verdeeld worden over 2 instanties, het eerste is het aantal, de tweede is de lengte, de derde is het aantal, de vierde is de lengte, etc.

  for (int i = 0; i < (2 * totaalaantalmixxen) - 1; i = i + 2) //Mixxen
                {
                    Mixaantal = double.Parse(mix[i]);
                    Mixlengte = double.Parse(mix[i + 1]);
   for (int a = 0; a < (Mixaantal); a++)                      //1 mix
                    {
q++;
//hier is het uitvoeren van de bewerkingen. elke losse bewerking moet een aparte naam krijgen (dit zodat ze later gevonden kunnen worden).
//hiervoor gebruik ik dus een arraynaam. welke de waarde van q krijgt (hiervoor begint elke nieuwe bewerking ook met q++).
//deze array is helemaal bovenaan uitgevoerd :  Beam[] bp = new Beam[99];
// bp[q] = new Beam();
// Nu is mijn vraag, hoe kan ik weten hoeveel ik in deze array moet invullen,nu staat er 99 en dit werkt natuurlijk bijna altijd. 
//maar dan worden er erg veel niet gebruikt, en stel dat er een keer meer dan 99 mixen nodig zijn dan voldoet dit aantal niet.

Ik hoop dat mijn probleem zo een beetje duidelijk is, en dat iemand mij hiermee kan helpen.

Alvast bedankt!

Groeten,
Joost
 
Even vooraf:

Moet je een array gebruiken? Zo nee, gebruik Lists.
En is de "mix string" aangeleverd of maak je hem zelf zo aan?
 
Hallo Bloodshed,

Bedankt, voor je reactie!
Het gebruik van een array is denk ik noodzakelijk omdat de functie createbeam hiermee werkt.
Ik weet niet of dit ook met een List kan, maar dat lijkt me niet.
Dit zal ik morgen even voor de zekerheid uitzoeken, al weet ik niet hoe een list werkt.

De info wordt inderdaad in deze vorm aangeleverd, en vanuit een .txt file met andere info uitgelezen.

Ik hoop het zo duidelijker gemaakt te hebben.

Met vriendelijke groet,
Joost
 
Kort door de bocht is een list een array met meer functies en gemakkelijker.
Ook kun je je list achteraf simpel omzetten naar een array mocht dit nodig zijn.

Het voordeel wat je hier uithaalt op dit moment is dat een list zich aanpast aan wat je er aan toevoegd.
Je hoeft (kan wel) dus niet vooraf een specifiek aantal in te geven.
Je blijft gewoon met .Add er aan toevoegen wat je wilt.

Hier een simpel voorbeeld waarmee je van start kunt.
Code:
List<string> myStringList = new List<string>();
            
for (int i = 0; i < 10; i++)
{
    myStringList.Add("my string at index: " + i);
}

string[] myStringArray = myStringList.ToArray();

Net als b.v. een array van 'mix' kun je ook een list van 'mix' maken.
Als je een array niet hoeft te gebruiken, gebruik een list. (vooral met onbekende en grote aantallen)
 
Hallo Bloodshed,

Ik heb het even geprobeerd, maar een list-type werkt niet voor Beam : (Beam<> mixlist = new Beam<MystringList>; wordt niet herkend).
Ik stuit dan nog op een probleem, want waar maak ik deze list nu aan, en waar add. ik items bij deze list, en wanneer zet ik hem om naar een array welke wel ondersteund wordt.

Een list maak ik gewoon aan voordat er iets gebeurd (zelfde plek als Beam[] bp = new Beam[99];)
Een add. moet dan eigenlijk elke keer als hij in de laatste For lust komt (zelfde plek als q++;)
Dan moet er een beam aangemaakt worden, dus dan moet de list omgezet worden naar array. Dit moet dan elke keer gebeuren in de for-lus (for (int a = 0; a < (Mixaantal); a++)), dit werkt toch niet?
Is het ook mogelijk om de naamgeving van deze Beam (want dat is het eigenlijk), als een regel uit deze list de zetten?
Of moet ik de gehele opzet veranderen?

Alvast bedankt.

gr

Joost
 
Zoals in het voorbeeld moet je het type gebruiken in de < >

bv: List<Beam> beams = new List<Beam>();

Is het mogelijk om je project even bij te voegen of een voorbeeld project met deze code?
Dan kan ik even door de code heen debuggen, kijken wat er precies gebeurt.
 
Hallo Bloodshed,

Ik begrijp nog steeds niet precies wat je bedoelt. Het project is gekoppeld aan Tekla Structures (een 3d teken programma) vanuit de bijborende dll van Tekla, is er een functie Beam. Deze kun je toch niet in een list zetten?

Dit project heeft dus ook een aardig grote code. Ik zal hem toevoegen, maar ik weet niet of het iets duidelijker maakt.

Code:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
// Tekla koppeling Structures Namespaces
using Tekla.Structures;
using Tekla.Structures.Model;
using Tekla.Structures.Geometry3d;
using Tekla.Structures.Model.UI;
using TS = Tekla.Structures;
using TSM = Tekla.Structures.Model;
using T3D = Tekla.Structures.Geometry3d;
using TSMUI = Tekla.Structures.Model.UI;
using TSO = Tekla.Structures.Model.Operations;
//Aditional Namespace references
using System.IO;
using System.Collections;
using System.Diagnostics;
namespace protocolhandler_versie_3
{
    public partial class Form1 : Form
    {
        //init
        string data;
        double lengte;
        double breedte;
        double hoogte;
        double xtop;
        double tophoek;
        double hoeklinks;
        double hoekrechts;
        string opbouwtekst;
        Beam kfa = new Beam();
        Beam kfd = new Beam();
        Beam kff = new Beam();
        Beam kfg = new Beam();
        int glasdikteint;
        
        public Form1()
            
        {
            InitializeComponent();
            richTextBox1.Hide();
        }
        
        private void button1_Click(object sender, EventArgs e)
        {
            laaddata();
            protocolsplitsen();
            Model totaal = new Model();
            kopframe();
            opbouw();
            totaal.CommitChanges();
        }
        void laaddata()
        {
            string Chosen_File = ""; //naam van file is leeg
            OFD.Title = "Instructie laden";
            OFD.InitialDirectory = "C:"; //standaard locatie
            OFD.FileName = "";
            OFD.Filter = "Goedlicht|*.GL"; //extensie

            OFD.ShowDialog();

            if (OFD.ShowDialog() == DialogResult.Cancel)
            {
                MessageBox.Show("cancel button clicked"); //wanneer er geen file wordt ingeladen
            }

            else
            {
                Chosen_File = OFD.FileName;
                richTextBox1.LoadFile(Chosen_File, RichTextBoxStreamType.PlainText);
            }
            if (txtboxGlasdikte.Text == "")
            {
                glasdikteint = 30;
            }
            else
            {
                glasdikteint = int.Parse(txtboxGlasdikte.Text);
            }
        }
        void protocolsplitsen()
        {
            data = richTextBox1.Text;
            string[] info = data.Split('&');
            lengte = Double.Parse(info[0]);
            breedte = Double.Parse(info[1]);
            hoogte = Double.Parse(info[2]);
            xtop = Double.Parse(info[3]);
            tophoek = Double.Parse(info[4]);
            hoeklinks = Double.Parse(info[5]);
            hoekrechts = Double.Parse(info[6]);
            opbouwtekst = info[7];
            richTextBox1.Clear();
        }
        void kopframe()
        {
            kfa.StartPoint = new T3D.Point(0, 0, 0);
            kfa.EndPoint = new T3D.Point(xtop, 0, hoogte);
            kfa.Profile.ProfileString = "509";
            kfa.Material.MaterialString = "ALUMINIUM";
            kfa.Name = "kfa";
            kfa.Class = "4";
            kfa.Position.Plane = Position.PlaneEnum.LEFT;  
            kfa.Position.Rotation = Position.RotationEnum.BACK;
            kfa.Position.Depth = Position.DepthEnum.FRONT;  
            kfa.Insert();

            Beam kfb = new Beam();
            kfb.StartPoint = new T3D.Point(0, 0, 0);
            kfb.EndPoint = new T3D.Point(xtop, 0, hoogte);
            kfb.Profile.ProfileString = "502";
            kfb.Material.MaterialString = "ALUMINIUM";
            kfb.Name = "kfa";
            kfb.Class = "3";
            kfb.Position.Plane = Position.PlaneEnum.RIGHT;
            kfb.Position.Rotation = Position.RotationEnum.BACK;
            kfb.Position.Depth = Position.DepthEnum.FRONT;
            kfb.Insert();

            Beam kfc = new Beam();
            kfc.StartPoint = new T3D.Point(0, 0, 0);
            kfc.EndPoint = new T3D.Point(breedte, 0, 0);
            kfc.Profile.ProfileString = "502";
            kfc.Material.MaterialString = "ALUMINIUM";
            kfc.Name = "kfc";
            kfc.Class = "3";
            kfc.Position.Plane = Position.PlaneEnum.RIGHT;
            kfc.Position.Rotation = Position.RotationEnum.BACK;
            kfc.Position.Depth = Position.DepthEnum.FRONT;
            kfc.Position.DepthOffset = -14;
            kfc.Insert();
                        
            kfd.StartPoint = new T3D.Point(breedte, 0, 0);
            kfd.EndPoint = new T3D.Point(xtop, 0, hoogte);
            kfd.Profile.ProfileString = "509";
            kfd.Material.MaterialString = "ALUMINIUM";
            kfd.Name = "kfd";
            kfd.Class = "4";
            kfd.Position.Plane = Position.PlaneEnum.RIGHT;
            kfd.Position.Rotation = Position.RotationEnum.BACK;
            kfd.Position.Depth = Position.DepthEnum.FRONT;
            kfd.Insert();

            Beam kfe = new Beam();
            kfe.StartPoint = new T3D.Point(breedte, 0, 0);
            kfe.EndPoint = new T3D.Point(xtop, 0, hoogte);
            kfe.Profile.ProfileString = "502";
            kfe.Material.MaterialString = "ALUMINIUM";
            kfe.Name = "kfe";
            kfe.Class = "3";
            kfe.Position.Plane = Position.PlaneEnum.LEFT;
            kfe.Position.Rotation = Position.RotationEnum.FRONT;
            kfe.Position.Depth = Position.DepthEnum.FRONT;
            kfe.Insert();

            kff.StartPoint = new T3D.Point(0, lengte, 0);
            kff.EndPoint = new T3D.Point(xtop, lengte, hoogte);
            kff.Profile.ProfileString = "509";
            kff.Material.MaterialString = "ALUMINIUM";
            kff.Name = "kff";
            kff.Class = "4";
            kff.Position.Plane = Position.PlaneEnum.RIGHT;
            kff.Position.Rotation = Position.RotationEnum.BACK;
            kff.Position.Depth = Position.DepthEnum.FRONT;
            kff.Insert();

            kfg.StartPoint = new T3D.Point(breedte, lengte, 0);
            kfg.EndPoint = new T3D.Point(xtop, lengte, hoogte);
            kfg.Profile.ProfileString = "509";
            kfg.Material.MaterialString = "ALUMINIUM";
            kfg.Name = "kfg";
            kfg.Class = "4";
            kfg.Position.Plane = Position.PlaneEnum.LEFT;
            kfg.Position.Rotation = Position.RotationEnum.BACK;
            kfg.Position.Depth = Position.DepthEnum.FRONT;
            kfg.Insert();
            
            Beam kfh = new Beam();
            kfh.StartPoint = new T3D.Point(0, lengte, 0);
            kfh.EndPoint = new T3D.Point(xtop, lengte, hoogte);
            kfh.Profile.ProfileString = "502";
            kfh.Material.MaterialString = "ALUMINIUM";
            kfh.Name = "kfh";
            kfh.Class = "3";
            kfh.Position.Plane = Position.PlaneEnum.LEFT;
            kfh.Position.Rotation = Position.RotationEnum.FRONT;
            kfh.Position.Depth = Position.DepthEnum.FRONT;
            kfh.Insert();

            Beam kfi = new Beam();
            kfi.StartPoint = new T3D.Point(0, lengte, 0);
            kfi.EndPoint = new T3D.Point(breedte, lengte, 0);
            kfi.Profile.ProfileString = "502";
            kfi.Material.MaterialString = "ALUMINIUM";
            kfi.Name = "kfi";
            kfi.Class = "3";
            kfi.Position.Plane = Position.PlaneEnum.LEFT;
            kfi.Position.Rotation = Position.RotationEnum.FRONT;
            kfi.Position.Depth = Position.DepthEnum.FRONT;
            kfi.Position.DepthOffset = -14;
            kfi.Insert();

            Beam kfj = new Beam();
            kfj.StartPoint = new T3D.Point(breedte, lengte, 0);
            kfj.EndPoint = new T3D.Point(xtop, lengte, hoogte);
            kfj.Profile.ProfileString = "502";
            kfj.Material.MaterialString = "ALUMINIUM";
            kfj.Name = "kfj";
            kfj.Class = "3";
            kfj.Position.Plane = Position.PlaneEnum.RIGHT;
            kfj.Position.Rotation = Position.RotationEnum.BACK;
            kfj.Position.Depth = Position.DepthEnum.FRONT;
            kfj.Insert();
            //////////////////////////////////begin van bewerkingen!///////////////
            //verstek begin
            Connection fit1 = new Connection();
            fit1.SetPrimaryObject(kfa);
            fit1.SetSecondaryObject(kfd);
            fit1.Number = 41;
            fit1.Name = "Verstek";
            fit1.LoadAttributesFromFile("Goedlicht");
            fit1.Insert();
            //verstek eind
            Connection fit2 = new Connection();
            fit2.SetPrimaryObject(kff);
            fit2.SetSecondaryObject(kfg);
            fit2.Number = 41;
            fit2.Name = "Verstek";
            fit2.LoadAttributesFromFile("Goedlicht");
            fit2.Insert();
            //verstek begin 2
            Connection fit3 = new Connection();
            fit3.SetPrimaryObject(kfb);
            fit3.SetSecondaryObject(kfe);
            fit3.Number = 41;
            fit3.Name = "Verstek";
            fit3.LoadAttributesFromFile("Goedlicht");
            fit3.Insert();
            //verstek eind 2
            Connection fit4 = new Connection();
            fit4.SetPrimaryObject(kfh);
            fit4.SetSecondaryObject(kfj);
            fit4.Number = 41;
            fit4.Name = "Verstek";
            fit4.LoadAttributesFromFile("Goedlicht");
            fit4.Insert();
            /////////////////
            //502fitten
            /////////////////
            Connection f1 = new Connection();
            f1.SetPrimaryObject(kfb);
            f1.SetSecondaryObject(kfc);
            f1.Name = "502fit";
            f1.LoadAttributesFromFile("standard");
            f1.Insert();

            Connection f2 = new Connection();
            f2.SetPrimaryObject(kfe);
            f2.SetSecondaryObject(kfc);
            f2.Name = "502fitr";
            f2.LoadAttributesFromFile("standard");
            f2.Insert();

            Connection f3 = new Connection();
            f3.SetPrimaryObject(kfh);
            f3.SetSecondaryObject(kfi);
            f3.Name = "502fitr";
            f3.LoadAttributesFromFile("standard");
            f3.Insert();

            Connection f4 = new Connection();
            f1.SetPrimaryObject(kfj);
            f1.SetSecondaryObject(kfi);
            f1.Name = "502fit";
            f1.LoadAttributesFromFile("standard");
            f1.Insert();
            ////////////////
            // 509 Cut's
            ////////////////
            Detail cut1 = new Detail();
            cut1.SetPrimaryObject(kfa);
            cut1.Name = "509-ondercut";
            cut1.LoadAttributesFromFile("goedlichtlinks");
            cut1.AutoDirectionType = AutoDirectionTypeEnum.AUTODIR_FROM_ATTRIBUTE_FILE;
            cut1.DetailType = DetailTypeEnum.END;
            cut1.SetAttribute("P1", glasdikteint);
            cut1.Insert();

            Detail cut2 = new Detail();
            cut2.SetPrimaryObject(kfd);
            cut2.Name = "509-ondercut";
            cut2.LoadAttributesFromFile("standard");
            cut2.SetAttribute("P1", glasdikteint);
            cut2.Insert();

            Detail cut3 = new Detail();
            cut3.SetPrimaryObject(kff);
            cut3.Name = "509-ondercut";
            cut3.LoadAttributesFromFile("goedlichtlinks");
            cut3.AutoDirectionType = AutoDirectionTypeEnum.AUTODIR_FROM_ATTRIBUTE_FILE;
            cut3.DetailType = DetailTypeEnum.END;
            cut3.SetAttribute("P1", glasdikteint);
            cut3.Insert();

            Detail cut4 = new Detail();
            cut4.SetPrimaryObject(kfg);
            cut4.Name = "509-ondercut";
            cut4.LoadAttributesFromFile("standard");
            cut4.SetAttribute("P1", glasdikteint);
            cut4.Insert();
        }
        void opbouw()
        {
            //offset voor boven profiel, moet nog gefixt worden! berekening klopt??
            double offsetbovenprofiel = tophoek - (tophoek / 2) - (180 - 90 - hoeklinks);
            if (offsetbovenprofiel < 0)
            {
                offsetbovenprofiel = tophoek - (tophoek / 2) - (180 - 90 - hoekrechts);
            }
            offsetbovenprofiel = (offsetbovenprofiel / 180) * Math.PI;
            double xoffsetbovenprofiel = -(76 * Math.Sin(offsetbovenprofiel));
            double yoffsetbovenprofiel = 76 * Math.Cos(offsetbovenprofiel);
            ////////////////////////////////////////////////////////////////////
                //offset hoeklinks
            ////////////////////////////////////////////////////////////////
            double offsethoeklinks = ((180 - 90 - hoeklinks) / 180) * Math.PI; ;
            double xoffsethoeklinks = 70 * Math.Sin(offsethoeklinks);
            double zoffsethoeklinks = 70 * Math.Cos(offsethoeklinks);
            /////////////////////////////////////////////////////////////////////
               //offset hoekrechts
            ////////////////////////////////////////////////////////////////
            double offsethoekrechts = ((180 - 90 - hoekrechts) / 180) * Math.PI; ;
            double xoffsethoekrechts = 70 * Math.Sin(offsethoeklinks);
            double zoffsethoekrechts = 70 * Math.Cos(offsethoeklinks);
            /////////////////////////////////////////////////////////////////////
            double totaalaantalmixxen;
            string[] opbouwdelen = new string[2];
            opbouwdelen[0] = opbouwtekst.Substring(0, 2);
            opbouwtekst = opbouwtekst.Remove(0, 2);
            opbouwdelen[1] = opbouwtekst;

            totaalaantalmixxen = Double.Parse(opbouwdelen[0]);
            if (totaalaantalmixxen == 0)
            {
                //Geen Latten
                Beam bpgeenlatten = new Beam();
                bpgeenlatten.StartPoint = new T3D.Point(xtop + xoffsetbovenprofiel, 51, hoogte + yoffsetbovenprofiel);
                bpgeenlatten.EndPoint = new T3D.Point(xtop + xoffsetbovenprofiel, lengte - 51, hoogte + yoffsetbovenprofiel);
                bpgeenlatten.Profile.ProfileString = "TESTNOK";
                bpgeenlatten.Material.MaterialString = "ALUMINIUM";
                bpgeenlatten.Name = "bpgeenlatten";
                bpgeenlatten.Class = "5";
                bpgeenlatten.Position.Depth = Position.DepthEnum.MIDDLE;
                bpgeenlatten.Position.Rotation = Position.RotationEnum.TOP;
                bpgeenlatten.Position.Plane = Position.PlaneEnum.MIDDLE;
                bpgeenlatten.Insert();

                Connection lgeenlatten = new Connection();
                lgeenlatten.SetPrimaryObject(kfa);
                lgeenlatten.SetSecondaryObject(kff);
                lgeenlatten.Name = "509-502(edit OTP)";
                lgeenlatten.LoadAttributesFromFile("standard");
                lgeenlatten.SetAttribute("P1", glasdikteint);
                lgeenlatten.Insert();

                Connection rgeenlatten = new Connection();
                rgeenlatten.SetPrimaryObject(kfg);
                rgeenlatten.SetSecondaryObject(kfd);
                rgeenlatten.Name = "509-502(edit OTP)";
                rgeenlatten.LoadAttributesFromFile("standard");
                rgeenlatten.SetAttribute("P1", glasdikteint);
                rgeenlatten.Insert();
            }
            else if (totaalaantalmixxen > 0)    //Mix aanwezig
            {
                string[] mix = opbouwdelen[1].Split('|'); // data sorteren op | teken
                double Mixaantal;
                double Mixlengte;
                double H = 0;
                int t = 0;
                int q = 0;
                Beam[] ll = new Beam[99];
                Beam[] lr = new Beam[99];
                Beam[] bp = new Beam[99];


                for (int i = 0; i < (2 * totaalaantalmixxen) - 1; i = i + 2) //Mixxen
                {
                    Mixaantal = double.Parse(mix[i]);
                    
                    Mixlengte = double.Parse(mix[i + 1]);
                    int Mixaantal2 = int.Parse(mix[i]);

                    for (int a = 0; a < (Mixaantal); a++)                      //1 mix
                    {
                        Model opbouw = new Model();
                       //Lat links
                        q++;
                        ll[q] = new Beam();
                        string b = "ll" + i.ToString() + a.ToString();
                        ll[q].StartPoint = new T3D.Point(0, Mixlengte + 35 + H, 0);
                        ll[q].EndPoint = new T3D.Point(xtop, Mixlengte + H + 35, hoogte);
                        ll[q].Profile.ProfileString = "509";
                        ll[q].Material.MaterialString = "ALUMINIUM";
                        ll[q].Name = b;
                        ll[q].Class = "3";
                        ll[q].Position.Depth = Position.DepthEnum.FRONT;
                        ll[q].Position.Rotation = Position.RotationEnum.BACK;
                        ll[q].Position.Plane = Position.PlaneEnum.MIDDLE;
                        ll[q].Insert();

                        //detail ondercut links
                        
                        Detail llcut = new Detail();
                        llcut.SetPrimaryObject(ll[q]);
                        llcut.Name = "509-ondercut";
                        llcut.LoadAttributesFromFile("goedlichtlinks");
                        llcut.AutoDirectionType = AutoDirectionTypeEnum.AUTODIR_FROM_ATTRIBUTE_FILE;
                        llcut.DetailType = DetailTypeEnum.END;
                        llcut.SetAttribute("P1", glasdikteint);
                        llcut.Insert();

                        // Lat rechts
                        
                        lr[q] = new Beam();
                        string c = "lr" + i.ToString() + a.ToString();
                        lr[q].StartPoint = new T3D.Point(breedte, Mixlengte + 35 + H, 0);
                        lr[q].EndPoint = new T3D.Point(xtop, Mixlengte + 35 + H, hoogte);
                        lr[q].Profile.ProfileString = "509";
                        lr[q].Material.MaterialString = "ALUMINIUM";
                        lr[q].Name = c;
                        lr[q].Class = "3";
                        lr[q].Position.Depth = Position.DepthEnum.FRONT;
                        lr[q].Position.Rotation = Position.RotationEnum.BACK;
                        lr[q].Position.Plane = Position.PlaneEnum.MIDDLE;
                        lr[q].Insert();

                        //detail ondercut rechts
                        Detail lrcut = new Detail();
                        lrcut.SetPrimaryObject(lr[q]);
                        lrcut.Name = "509-ondercut";
                        lrcut.LoadAttributesFromFile("standard");
                        lrcut.SetAttribute("P1", glasdikteint);
                        lrcut.Insert();

                        //connection Verstek
                        Connection rechts = new Connection();
                        rechts.SetPrimaryObject(ll[q]);
                        rechts.SetSecondaryObject(lr[q]);
                        rechts.Number = 41;
                        rechts.Name = "Verstek";
                        rechts.LoadAttributesFromFile("Goedlicht");
                        rechts.Insert();

                        //connection WERKT NOG NIET!? variabele wordt elke nieuwe mix op nieuw aangemaakt
                     
                        if(t==0)

                        {
                            
                            Connection laxe = new Connection();
                            laxe.SetPrimaryObject(kfa);
                            laxe.SetSecondaryObject(ll[q]);
                            laxe.Name = "509-502(edit OTP)";
                            laxe.LoadAttributesFromFile("standard");
                            laxe.SetAttribute("P1", glasdikteint);
                            laxe.Insert();

                            Connection raxe = new Connection();
                            raxe.SetPrimaryObject(lr[q]);
                            raxe.SetSecondaryObject(kfd);
                            raxe.Name = "509-502(edit OTP)";
                            raxe.LoadAttributesFromFile("standard");
                            raxe.SetAttribute("P1", glasdikteint);
                            raxe.Insert();

                            t++;
                }
                        else
                        {
                            Connection laxe1 = new Connection();
                            laxe1.SetPrimaryObject(ll[q-1]);
                            laxe1.SetSecondaryObject(ll[q]);
                            laxe1.Name = "509-502(edit OTP)";
                            laxe1.LoadAttributesFromFile("standard");
                            laxe1.SetAttribute("P1", glasdikteint);
                            laxe1.Insert();

                            Connection raxe1 = new Connection();
                            raxe1.SetPrimaryObject(lr[q]);
                            raxe1.SetSecondaryObject(lr[q-1]);
                            raxe1.Name = "509-502(edit OTP)";
                            raxe1.LoadAttributesFromFile("standard");
                            raxe1.SetAttribute("P1", glasdikteint);
                            raxe1.Insert();
                     }
                       
                        // Bovenprofiel (moet nog juiste plaatsing??)
                        
                        bp[q] = new Beam();
                        string d = "bp" + i.ToString() + a.ToString();
                        bp[q].StartPoint = new T3D.Point(xtop + xoffsetbovenprofiel, 51 + H, hoogte + yoffsetbovenprofiel);         //+ 51 want, in het midden + tot de rubber rand
                        bp[q].EndPoint = new T3D.Point(xtop + xoffsetbovenprofiel, Mixlengte + 19 + H, hoogte + yoffsetbovenprofiel); // +19 want in het midden - tot de rubber rand
                        bp[q].Profile.ProfileString = "TESTNOK";
                        bp[q].Material.MaterialString = "ALUMINIUM";
                        bp[q].Name = d;
                        bp[q].Class = "5";
                        bp[q].Position.Depth = Position.DepthEnum.MIDDLE;
                        bp[q].Position.Rotation = Position.RotationEnum.TOP;
                        bp[q].Position.Plane = Position.PlaneEnum.MIDDLE;
                        bp[q].Insert();
                        opbouw.CommitChanges();
                        
                        // Nieuwe lengte erbij zetten (zodat volgende lat van mix, verder komt)
                        H = H + Mixlengte;
                    }
                }
                // Hier oplossing voor laatste (geen mix meer)

                        Beam bplaatste = new Beam();
                        bplaatste = new Beam();
                        bplaatste.StartPoint = new T3D.Point(xtop + xoffsetbovenprofiel, H + 51, hoogte + yoffsetbovenprofiel);         
                        bplaatste.EndPoint = new T3D.Point(xtop + xoffsetbovenprofiel, lengte - 51 , hoogte + yoffsetbovenprofiel); 
                        bplaatste.Profile.ProfileString = "TESTNOK";
                        bplaatste.Material.MaterialString = "ALUMINIUM";
                        bplaatste.Name = "bplaatste";
                        bplaatste.Class = "5";
                        bplaatste.Position.Depth = Position.DepthEnum.MIDDLE;
                        bplaatste.Position.Rotation = Position.RotationEnum.TOP;
                        bplaatste.Position.Plane = Position.PlaneEnum.MIDDLE;
                        bplaatste.Insert();

                        Connection lend = new Connection();
                        lend.SetPrimaryObject(ll[q]);
                        lend.SetSecondaryObject(kff);
                        lend.Name = "509-502(edit OTP)";
                        lend.LoadAttributesFromFile("standard");
                        lend.SetAttribute("P1", glasdikteint);
                        lend.Insert();

                        Connection rend = new Connection();
                        rend.SetPrimaryObject(kfg);
                        rend.SetSecondaryObject(lr[q]);
                        rend.Name = "509-502(edit OTP)";
                        rend.LoadAttributesFromFile("standard");
                        rend.SetAttribute("P1", glasdikteint);
                        rend.Insert();
                        
            }
        }
           
    }

}

Bij behorende dll file's : beetje moeite om ze te uploaden (alleen in zip bestand en maximaal 100kb ....:confused:) dus ze zijn gesplit.
Even ter verduidelijking het gaat dus om de opbouw void, en hierin de bijbehorende arrays. (het totale programma werkt op deze manier, maar tot een max van 99 en anders blijft de array bijna helemaal leeg)
Ik hoop dat het wat duidelijker is, en dat u met een antwoord/oplossing kunt komen.

Alvast bedankt!

Met vriendelijke groeten

Joost braun
 

Bijlagen

Ik kan de model dll niet uitpakken tot 1 bestand (waarom weet ik zo niet) misschien omdat ik winrar heb en niet ... wat je hebt gebruikt? :P
 
Ik kan je alvast zeggen dat het voor andere vrij onduidelijk is.
Een method van 200+ regels maakt het niet echt duidelijk, deze zou je het beste kunnen inkorten in meerdere methods en eventueel gebruik maken van classes.
(meer hierover onderaan)


==
Om terug te komen op de vraag hoe je de list kunt gebruiken:


Stel je hebt deze method die een beam array gebruikt:

Code:
private void UserBeamArray(Beam[] beamArray)
{
    Console.WriteLine("This array contains {0} items", beamArray.Length);

    for (int i = 0; i < beamArray.Length; i++)
    {
        if (beamArray[i] == null)
        {
            Console.WriteLine("oops, beam at index {0} does not exist. what a waste of space", i);
        }
        else
        {
            Console.WriteLine(beamArray[i].Name);
        }
    }
}


Zo doe je het nu met arrays:
Code:
private void ArrayOfBeams()
{
    Beam[] arrayBeams = new Beam[99];

    for (int i = 0; i < 10; i++)
    {
        arrayBeams[i] = new Beam();
        arrayBeams[i].Name = "Beam at index " + i;
    }

    //pass in the array of 99 beams
    UserBeamArray(arrayBeams);
}

Zo kun je het met lists doen:
Code:
private void ListOfBeams()
{
    List<Beam> beamsList = new List<Beam>();

    for (int i = 0; i < 10; i++)
    {
        Beam newBeam = new Beam();
        newBeam.Name = "Beam at index " + i;

        beamsList.Add(newBeam);
    }

    //this method takes an array, to call ToArray() on the list
    //this will make an array of 10 beams
    UserBeamArray(beamsList.ToArray());
}

Je kunt nogsteeds gebruik maken van index bij lists: ( beamsList[0] eerste beam in de lijst )


==



Door gebruik te maken van een class maak je het een stuk duidelijker voor jezelf en anderen :P

vb: door gebruik te maken van deze class kun je een stukje onduidelijke code makkelijker maken

Code:
public class MixBuild
{
	public string Parts { get; set; }
	public string DetailString { get; set; }

	public MixBuild(string buildString)
	{
		Parts = buildString.Substring(0, 2);
		DetailString = buildString.Remove(0, 2);
	}

	public double GetTotalMixCount()
	{
		return Double.Parse(Parts);
	}
}

dus kun je dit gebruiken
Code:
MixBuild build = new MixBuild(opbouwtekst);
double totalMixCount = build.GetTotalMixCount();

ipv:

Code:
double totaalaantalmixxen;
string[] opbouwdelen = new string[2];
opbouwdelen[0] = opbouwtekst.Substring(0, 2);
opbouwtekst = opbouwtekst.Remove(0, 2);
opbouwdelen[1] = opbouwtekst;
totaalaantalmixxen = Double.Parse(opbouwdelen[0]);





En met bv deze method

Code:
private void InsertConnection(Beam primary, Beam secondary, string name, string attributesFile, string attributeName, int glassThickness)
{
	Connection connection = new Connection();
	connection.SetPrimaryObject(primary);
	connection.SetSecondaryObject(secondary);
	connection.Name = name;
	connection.LoadAttributesFromFile(attributesFile);
	connection.SetAttribute(attributeName, glassThickness);
	connection.Insert();
}

vervang je dus deze lap code

Code:
if (t == 0)
{

	Connection laxe = new Connection();
	laxe.SetPrimaryObject(kfa);
	laxe.SetSecondaryObject(ll[q]);
	laxe.Name = "509-502(edit OTP)";
	laxe.LoadAttributesFromFile("standard");
	laxe.SetAttribute("P1", glasdikteint);
	laxe.Insert();

	Connection raxe = new Connection();
	raxe.SetPrimaryObject(lr[q]);
	raxe.SetSecondaryObject(kfd);
	raxe.Name = "509-502(edit OTP)";
	raxe.LoadAttributesFromFile("standard");
	raxe.SetAttribute("P1", glasdikteint);
	raxe.Insert();

	t++;
}
else
{
	Connection laxe1 = new Connection();
	laxe1.SetPrimaryObject(ll[q - 1]);
	laxe1.SetSecondaryObject(ll[q]);
	laxe1.Name = "509-502(edit OTP)";
	laxe1.LoadAttributesFromFile("standard");
	laxe1.SetAttribute("P1", glasdikteint);
	laxe1.Insert();

	Connection raxe1 = new Connection();
	raxe1.SetPrimaryObject(lr[q]);
	raxe1.SetSecondaryObject(lr[q - 1]);
	raxe1.Name = "509-502(edit OTP)";
	raxe1.LoadAttributesFromFile("standard");
	raxe1.SetAttribute("P1", glasdikteint);
	raxe1.Insert();
}

met dit wat zich toch een stuk makkelijker leest

Code:
if (t == 0)
{
	InsertConnection(kfa, ll[q], "509-502(edit OTP)", "standard", "P1", glasdikteint);
	InsertConnection(lr[q], kfd, "509-502(edit OTP)", "standard", "P1", glasdikteint);
	t++;
}
else
{
	InsertConnection(ll[q - 1], ll[q], "509-502(edit OTP)", "standard", "P1", glasdikteint);
	InsertConnection(lr[q], lr[q - 1], "509-502(edit OTP)", "standard", "P1", glasdikteint);
}



Ik hoop dat je dit nu kunt gebruiken.

Anders hoor ik het wel weer :P
 
Hallo Bloodshed,

Hartstikke bedankt voor uw reactie. Het is inderdaad veel beter om alles in losse "stukjes" te doen. Het opschonen en verduidelijken van de code stond ook al op de To-Do-list:p.
Het is alleen een gigantisch project voor mij, wat zich steeds uitbreid. hierdoor "plak" ik alles een beetje achter elkaar (Trial-and-error:thumb:)

Ik ben niet goed op de hoogte van betekenissen als Classes en Methods maar met wat google werk, kom ik hier wel uit. Ik zal het invoegen van Beam's etc nu in 1 standaard void doen, waar ik de verschillende benodigde variabelen naar toe schrijf.

Ik ben nog niet zeker over de werking van de list. Het lijkt ideaal, dus ik ga het zeker proberen uit te vogelen!

In ieder geval hartstikke bedankt voor de hulp, je hoort van me!

groeten

Joost
 
Even ter info,

Moet ik nu eerst alle Beams aanmaken:
Code:
Beam newBeam = new Beam();
newBeam.Name = "Beam at index " + i;
beamsList.Add(newBeam);
en dit dan voor alle beams in het totale ontwerp.
dan heb je een volledige list. hiervan maak je dan een array
en dan ga je de array uitvoeren:
je hebt 1 void waarin alles variabel is, en dan steeds:
Code:
InsertBeam(xbegin,ybegin,zbegin,xeind,yeind,zeind,naam,materiaal,liggin etc. etc. etc.);
met array 0, vervolgens zelfde regel met array 1, 2 etc.
Vervolgens heb je dan je connections,
deze stuur je aan met
Code:
InsertConnection(ll[q - 1], ll[q], "509-502(edit OTP)", "standard", "P1", glasdikteint);
zelfde geldt voor details.

In deze volgorde?
maar dan is het best lastig om de "gegenereerde" coördinaten voor de mix beams in te vullen? want je maakt eerst de beams al aan, en dan vervolgens ga je pas rekenen waar ze dan precies moeten liggen?

Of een paar beams toevoegen aan een list, dan een array maken, uitvoeren. en dan weer een paar beams toevoegen aan dezelfde list, weer omzetten naar dezelfde array, en dan verder uitvoeren?

De doorloop van het systeem is me nu een beetje onduidelijk. Wat gebeurt nu wanneer.

gr Joost
 
[edit]

De manier waarop jij een beam maakt met een list:
Code:
private void ListOfBeams()
{
    List<Beam> beamsList = new List<Beam>();

    for (int i = 0; i < 10; i++)
    {
        Beam newBeam = new Beam();
        newBeam.Name = "Beam at index " + i;

        beamsList.Add(newBeam);
    }

    //this method takes an array, to call ToArray() on the list
    //this will make an array of 10 beams
    UserBeamArray(beamsList.ToArray());
}

Dat gaat niet werken. Want dan krijg je 10 beams, met de naam newBeam (de.Name naam is alleen voor in de tekening. maar het aanwijzen van een connectie gebeurt met newBeam)

vb:
Code:
lr[q] = new Beam();
string c = "lr" + i.ToString() + a.ToString();
lr[q].Name = c;
//kijk hier heb je een Beam gemaakt die lr[q] heet, en in Tekla een naam heeft lr01.
//vervolgens bij de connectie heb je:
Connection rechts = new Connection();
rechts.SetPrimaryObject(lr[q]); // hier heb ik de lr[q] gebruikt om hem aan te wijzen

dus dan werkt het toch niet denk ik?

gr Joost
 
De werking is hetzelfde in principe, de variable name is hier alleen maar als voorbeeld en wordt later niet gebruikt:

beamsList.Add(new Beam());
beamsList[0].Name = "";

of

beamsArray[0] = new Beam();
beamsArray[0].Name = "":

Alles wat je met een array doet is te vervangen door een list



Misschien moet je tijdelijk tot je alles wat hebt opgeschoont zoiets als dit gebruiken, wat wel een beetje omslachtig is maar goed.

Code:
private Beam[] ExpandBeamArray(Beam[] oldBbeamArray, int expandBy)
{
	int newSize = oldBbeamArray.Length + expandBy;

	Beam[] newBeamArray = new Beam[newSize];

	for (int i = 0; i < oldBbeamArray.Length; i++)
	{
		newBeamArray[i] = oldBbeamArray[i];
	}

	return newBeamArray;
}


in code kijken naar de groote en vergroten met de nodige hoeveelheid:
Code:
if(ll.Length == i)
    ll = ExpandBeamArray(ll, 5);

(bij het gebruik van lists wordt dit dus allemaal voor je gedaan achter de schermen)
 
Hallo Bloodshed,

Ik heb me er weer een ochtendje mee bezig gehouden. Maar ik kom er gewoon echt niet helemaal lekker uit. Ik heb het programma zoveel mogelijk versimpeld (alle connections en details worden nu in een void uitgevoerd).

Maar met de beams, het leek mij handig om eerst even een los programma te schrijven met jou "voorbeeld code". Maar ik denk dat ik gewoon veel te amateuristisch ben in C#, want ik snap het niet helemaal.
Er moet dus een void komen met daarin. create beam: met alle gegevens. dus in het hoofdprogramma heb ik dan alleen maar regels als: add.new beam to list, locatie gegevens, en naam is variabele + 1.

maar het is juist zo belangrijk dat de naam appart blijft, en omdat de naamgeving van een Beam alleen maar variabel is met een array krijg je iets in de vorm van:
Code:
for (int i = 0; i < 10; i++)
                {
                    Beam[] nummer  = new Beam[i];
                    nummer[i].Name = new Beam;
                    beamsList.Add(nummer[i]);
                }
UserBeamArray(beamsList.ToArray());
nu heb ik dus een array met met daarin beam: nummer0 t/m nummer9.
Nu ga ik een void maken met die er ongeveer zo uit ziet:
Code:
void insertBeam (int num, double x1, double y1, double z1, double x2, double y2, double z2, string profiel, string materiaal)
{
nummer[num].StartPoint = new T3D.Point(x1, y1,z1);
nummer[num].EndPoint = new T3D.Point(x2, y2,z2);
nummer[num].Profile.ProfileString = profiel;
nummer[num].Material.MaterialString = materiaal;
nummer[num].Insert();
}

En dan vanuit mijn programma een regel om de beam aan te maken:
Code:
insertBeam(1,100,2000,500,500,2000,500,"502","ALUMINIUM");

Dit gaat zo wel werken, maar eigenlijk zou je willen dat je niet van te voren die Array moet vullen, waar ik eigenlijk opzoek naar ben (denk ik) is iets in de trend van:
Code:
//er is gewoon 1 array, zeg met 1 plaats. dus:

int i = 1;
Beam[] newBeam = new Beam[i]

//ik verstuur gewoon iets naar insert beam met de waardes

insertBeam(100,2000,500,500,2000,500,"502","ALUMINIUM"); //geen volg nummer! 

//en dan naar een void die er ongeveer uit ziet als.

void insertBeam (double x1, double y1, double z1, double x2, double y2, double z2, string profiel, string materiaal)
{

newBeam[a] = new Beam();
newBeam[a].StartPoint = new T3D.Point(x1, y1,z1);
newBeam[a].EndPoint = new T3D.Point(x2, y2,z2);
newBeam[a].Profile.ProfileString = profiel;
newBeam[a].Material.MaterialString = materiaal;
newBeam[a].Insert();
a++
// en nu iets om de totale array lengte 1tje groter te maken. totale grote van de array + 1
// iets in de vorm van: beamArray.Length++ ??

}

Op deze manier, kan ik gewoon oneindig beams toevoegen, krijgen ze gewoon allemaal een nummer newBeam1 t/m oneindig. Is de array altijd precies groot genoeg.
Ik weet niet of dit uberhaupt mogelijk is.
Ik snap dat dit het allemaal niet duidelijker maakt, ik zit er zelf ook even flink mee in de knoop. Maar ik denk dat dit in de richting komt van mijn gewenste "werking".
Kunt u mij hier alstublieft mee helpen?

Alvast bedankt,
gr Joost
 
Yes ik heb hem denk ik! eindelijk!
Code:
namespace test
{
    public partial class Form1 : Form
    {

        Beam[] newBeam = new Beam[2];
        int a =1;
       
        
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Model onderframe = new Model();
              insertBeam(100, 2000, 500, 500, 2000, 500, "502", "ALUMINIUM");
              insertBeam(500, 2000, 500, 100, 1000, 500, "503", "ALUMINIUM");
              insertBeam(600, 2000, 500, 200, 3000, 500, "505", "ALUMINIUM");
              insertBeam(900, 810, 500, 300, 1500, 500, "509", "ALUMINIUM");
              onderframe.CommitChanges();

              Connection links = new Connection();
              links.SetPrimaryObject(newBeam[1]);
              links.SetSecondaryObject(newBeam[2]);
              links.Number = 41;
              links.Name = "Verstek";
              links.LoadAttributesFromFile("Goedlicht");
              links.Insert();
              onderframe.CommitChanges();

        }
         void insertBeam(double x1, double y1, double z1, double x2, double y2, double z2, string profiel, string materiaal)
        {
            newBeam[a] = new Beam();
            newBeam[a].StartPoint = new T3D.Point(x1, y1,z1);
            newBeam[a].EndPoint = new T3D.Point(x2, y2,z2);
            newBeam[a].Profile.ProfileString = profiel;
            newBeam[a].Material.MaterialString = materiaal;
            newBeam[a].Insert();
            a++;
            newBeam = ExpandBeamArray(newBeam, 1); 
        }
         private Beam[] ExpandBeamArray(Beam[] oldBbeamArray, int expandBy)
         {
             int newSize = oldBbeamArray.Length + expandBy;

             Beam[] newBeamArray = new Beam[newSize];

             for (int i = 0; i < oldBbeamArray.Length; i++)
             {
                 newBeamArray[i] = oldBbeamArray[i];
             }

             return newBeamArray;
         }

        
       

    }
}

dit is een kort test progje, waarin een paar balken neer gelegd worden en dan 2 balken aan elkaar gekoppeld.
Ik hoef nu geen naam op te geven, maar alles is nog te koppelen. (lees: terug te vinden).

Nu alles nog inpassen zodat het in het oude programma past.
Echt super bedankt voor de hulp (ik ga er vanuit dat het nu gewoon werkt :p).... anders krijg je het wel weer te horen :d.

gr Joost
 
Ja, het is een heel gepuzzel. Ben er gisteren wat mee bezig geweest :P

Hier is bijvoorbeeld een 'Class' die je kunt gebruiken om beams te maken. Zo hoef je dus ook geen methods in je form te maken. (minders scrollen = goed)
Als een method meer dan 50 regels lang is, is hij te lang voor mij. Ik moet hem in 1x kunnen zien op mijn scherm. :P
Hierdoor zijn de methods ook een stuk makkelijker uit te vogelen.

Ik neem aan dat comments in engels niets uitmaken, is iets wat ik gewent ben om te doen

Code:
using System.Collections.Generic;
using Tekla.Structures.Geometry3d;
using Tekla.Structures.Model;

namespace protocolhandler_versie_3
{
    public class BeamFactory
    {
        private readonly List<Beam> _beams;

        public BeamFactory()
        {
            //create a new list when a new factory is created
            _beams = new List<Beam>();
        }

        public Beam CreateBeam(double startX, double startY, double startZ, double endX, double endY, double endZ, string profileString, string materialString)
        {
            //variables that are not provided are set to their defaults

            return CreateBeam(
                startX, startY, startZ, endX, endY, endZ,
                profileString, materialString, "BEAM", "1",
                Position.PlaneEnum.MIDDLE, Position.RotationEnum.TOP, Position.DepthEnum.BEHIND, 0);
        }
        public Beam CreateBeam(double startX, double startY, double startZ, double endX, double endY, double endZ, string profileString, string materialString, string name, string partClass)
        {
            return CreateBeam(
                startX, startY, startZ, endX, endY, endZ,
                profileString, materialString, name, partClass,
                Position.PlaneEnum.MIDDLE, Position.RotationEnum.TOP, Position.DepthEnum.BEHIND, 0);
        }
        public Beam CreateBeam(double startX, double startY, double startZ, double endX, double endY, double endZ, string profileString, string materialString, string name, string partClass, Position.PlaneEnum plane, Position.RotationEnum rotation, Position.DepthEnum depth)
        {
            return CreateBeam(
                startX, startY, startZ, endX, endY, endZ,
                profileString, materialString, name, partClass,
                plane, rotation, depth, 0);
        }
        public Beam CreateBeam(double startX, double startY, double startZ, double endX, double endY, double endZ, string profileString, string materialString, string name, string partClass, Position.PlaneEnum plane, Position.RotationEnum rotation, Position.DepthEnum depth, double depthOffset)
        {
            var beam = new Beam();

            beam.StartPoint = new Point(startX, startY, startZ);
            beam.EndPoint = new Point(endX, endY, endZ);

            beam.Profile.ProfileString = profileString;
            beam.Material.MaterialString = materialString;

            beam.Name = name;
            beam.Class = partClass;

            beam.Position.Plane = plane;
            beam.Position.Rotation = rotation;
            beam.Position.Depth = depth;
            beam.Position.DepthOffset = depthOffset;

            //add beam to the private beams list
            _beams.Add(beam);

            return beam;
        }

        public int GetBeamCount()
        {
            return _beams.Count;
        }
        public void InsertAll()
        {
            foreach (var beam in _beams)
            {
                beam.Insert();
            }
        }
        public Beam GetBeamAtIndex(int index)
        {
            return _beams[index];
        }
        public Beam GetBeamWithName(string name)
        {
            foreach (var beam in _beams)
            {
                if(beam.Name.Equals(name))
                    return beam;
            }

            //return null if no beam with the provided name was found.
            return null;
        }
    }
}


Daarna kun je gewoon in de code waar je dat nodig hebt een fabriekje maken zoals hieronder staat.
Alle beams die je maakt komen vanzelf in een list te staan zodra je er een 'Create' (let wel, INSERT wordt nog niet er op gebruikt)

Daarna kun je met een method call alle gemaakte beams 'Inserten' (ik weet niet precies het nut / wat het doet met de beam daarom heb ik dat appart gedaan)

Ook kun je dus zoals je zit elke beam los uit de fabriek halen als je hem nodig hebt (hij blijft wel in de list staan).


Code:
//Create the beamfactory
BeamFactory beamFactory = new BeamFactory();

//Create the beams you want (createbeam does not call the Insert() method on it)
beamFactory.CreateBeam(0, 0, 0, 0, 0, 0, "502", "ALUMINIUM", "headFrameA", "4");
beamFactory.CreateBeam(0, 0, 0, 0, 0, 0, "502", "ALUMINIUM", "headFrameB", "4");
beamFactory.CreateBeam(0, 0, 0, 0, 0, 0, "502", "ALUMINIUM", "headFrameC", "4");
beamFactory.CreateBeam(0, 0, 0, 0, 0, 0, "502", "ALUMINIUM", "headFrameD", "4");

//InsertAll() will loop through all the beams created and will call Insert() on them all
beamFactory.InsertAll();

//you can get a reference to the beam if you need it with its name or index in the list
Beam headFrameA = beamFactory.GetBeamWithName("headFrameA");
Beam headFrameC = beamFactory.GetBeamAtIndex(2);

//you a total count of all the beams
MessageBox.Show("Number of beams in my beamfactory: " + beamFactory.GetBeamCount());


Ik hoop dat je hier weer een stapje verder mee komt, en zelf ook hetzelfde kunt doen voor de connections en details etc.

Bas
 
Hee Bas,

Het lukt nu prima, heb inderdaad een soort "fabriekje" gemaakt, (...zonder list :rolleyes: want doet niet wat ik wil (geen idee wat class/methods is, ik werk gewoon met void's haha:(). en het werkt prima!
wat je zelf ook al gezien hebt zijn er ook nog variabelen plane rotation en depth, deze kun je echter niet invoeren op jou manier:
Code:
            Beam.Position.Plane = plane;
            beam.Position.Rotation = rotation;
            beam.Position.Depth = depth;

heb verschillende dingen geprobeerd, maar deze moet echt "gekozen" worden. dit zorgt echt voor belachelijk veel nutteloze code, weet nog niet wat ik hier aan kan doen. Maar voor de rest werkt deze fabriek super. Het is even wat invoer werk, maar het gaat uiteindelijk sneller/overzichtelijker, en je hebt veel minder code.
Code:
                        //plane
            if (plane == "LEFT")
             {
                 ombouwframe[num].Position.Plane = Position.PlaneEnum.LEFT;
             }
             else if (plane == "RIGHT")
             {
                 ombouwframe[num].Position.Plane = Position.PlaneEnum.RIGHT;
             }
             else 
             {
                 ombouwframe[num].Position.Plane = Position.PlaneEnum.MIDDLE;
             }
             //rotatie
             if (rotation == "BACK")
             {
                 ombouwframe[num].Position.Rotation = Position.RotationEnum.BACK;
             }
             else if (rotation == "BELOW")
             {
                 ombouwframe[num].Position.Rotation = Position.RotationEnum.BELOW;
             }
             else if (rotation == "TOP")
             {
                 ombouwframe[num].Position.Rotation = Position.RotationEnum.TOP;
             }
             else
             {
                 ombouwframe[num].Position.Rotation = Position.RotationEnum.FRONT;
             }
             //depth
             if (depth == "BEHIND")
             {
                 ombouwframe[num].Position.Depth = Position.DepthEnum.BEHIND;
             }
             else if (depth == "FRONT")
             {
                 ombouwframe[num].Position.Depth = Position.DepthEnum.FRONT;
             }
             else
             {
                 ombouwframe[num].Position.Depth = Position.DepthEnum.MIDDLE;
             }

Ik ben in ieder geval al heel blij dat het werkt, en dat er nu een array is die gewoon op maat is.
Echt super bedankt! ik kan voorlopig weer even vooruit binnen dit project.

groeten
Joost
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan