Vector3D ParseScale(string scale, ZoneShape shape)
        {
            string[] values = scale.Split(new char[] { ',' });

            if (shape == ZoneShape.Sphere && values.Length > 0)
            {
                double tempScale = ParseDouble(values[0], 1);
                return(new Vector3D(tempScale, tempScale, tempScale) / 1000);
            }
            else if (shape == ZoneShape.Cylinder && values.Length > 1)
            {
                double tempScale1 = ParseDouble(values[0], 1);
                double tempScale2 = ParseDouble(values[1], 1);
                return(new Vector3D(tempScale1, tempScale2, tempScale1) / 1000);
            }
            else if (values.Length > 2)
            {
                double tempScale1 = ParseDouble(values[0], 1);
                double tempScale2 = ParseDouble(values[1], 1);
                double tempScale3 = ParseDouble(values[2], 1);
                return(new Vector3D(tempScale1, tempScale3, tempScale2) / 1000);
            }

            return(new Vector3D(1, 1, 1));
        }
 public void CreateFromEmdElement(IXEP_EmdElement elem)
 {
     XEP_BaseEmdFile.CheckName(elem.Name, XEP_EmdNames.s_KeyStirrupZone);
     Clear();
     foreach (var item in elem.Elements)
     {
         if (item.Name == XEP_EmdNames.s_KeyStirrup)
         {
             IXEP_EmdStirrupData stirrupData = XEP_EmdFactrory.CreateEmdStirrupData();
             stirrupData.CreateFromEmdElement(item);
             Stirrups.Add(stirrupData);
         }
         else if (item.Name == XEP_EmdNames.s_KeyStirrupZoneShape)
         {
             ZoneShape.CreateFromEmdElement(item);
         }
         else
         {
             throw new InvalidOperationException("Invalid element in stirrup zone, element name: " + item.Name);
         }
     }
     ZoneID         = elem.GetAttribute(XEP_EmdNames.s_KeyStirrupZoneID).GetIntValue();
     Material       = elem.GetAttribute(XEP_EmdFileConstants.s_RefAttributEmdTag + XEP_EmdNames.s_KeyStirrupZoneMaterial).Value;
     ZoneBeg        = elem.GetAttribute(XEP_EmdNames.s_KeyStirrupZoneZoneBeg).GetDoubleValue();
     ZoneEnd        = elem.GetAttribute(XEP_EmdNames.s_KeyStirrupZoneZoneEnd).GetDoubleValue();
     IsAutoCutsCalc = elem.GetAttribute(XEP_EmdNames.s_KeyStirrupZoneIsAutoCutsCalc).GetIntValue();
     NumCutUser     = elem.GetAttribute(XEP_EmdNames.s_KeyStirrupZoneNumCutUser).GetIntValue();
     Position       = elem.GetAttribute(XEP_EmdNames.s_KeyStirrupZonePosition).Value;
     Coeff          = elem.GetAttribute(XEP_EmdNames.s_KeyStirrupZoneCoef).GetDoubleValue();
 }
 public void CreateFrom(IXEP_StirrupZoneIO zoneInput, double sectionPos, string matName, double zoneBeg, double zoneEnd, int zoneID)
 {
     ZoneID         = zoneID;
     Material       = matName;
     ZoneBeg        = zoneBeg;
     ZoneEnd        = zoneEnd;
     IsAutoCutsCalc = 1;
     NumCutUser     = zoneInput.NumCut;
     Position       = XEP_EmdNames.s_Value_ZonePosCurrent;
     Coeff          = 4.0;
     ZoneShape.CreateFrom(zoneInput.Shapes);
     CreateStirrups(zoneInput, sectionPos);
 }
        public IXEP_EmdElement CreateEmdElement()
        {
            IXEP_EmdElement elem = XEP_EmdFactrory.CreateEmdElement();

            elem.Name = XEP_EmdNames.s_KeyStirrupZone;
            foreach (var item in Stirrups)
            {
                elem.Elements.Add(item.CreateEmdElement());
            }
            elem.Elements.Add(ZoneShape.CreateEmdElement());
            elem.AddAttribute(XEP_EmdFactrory.CreateEmdAttribute(XEP_EmdNames.s_KeyStirrupZoneID, ZoneID.ToString()));
            elem.AddAttribute(XEP_EmdFactrory.CreateEmdAttribute(XEP_EmdFileConstants.s_RefAttributEmdTag + XEP_EmdNames.s_KeyStirrupZoneMaterial, Material));
            elem.AddAttribute(XEP_EmdFactrory.CreateEmdAttribute(XEP_EmdNames.s_KeyStirrupZoneZoneBeg, ZoneBeg.ToString()));
            elem.AddAttribute(XEP_EmdFactrory.CreateEmdAttribute(XEP_EmdNames.s_KeyStirrupZoneZoneEnd, ZoneEnd.ToString()));
            elem.AddAttribute(XEP_EmdFactrory.CreateEmdAttribute(XEP_EmdNames.s_KeyStirrupZoneIsAutoCutsCalc, IsAutoCutsCalc.ToString()));
            elem.AddAttribute(XEP_EmdFactrory.CreateEmdAttribute(XEP_EmdNames.s_KeyStirrupZoneNumCutUser, NumCutUser.ToString()));
            elem.AddAttribute(XEP_EmdFactrory.CreateEmdAttribute(XEP_EmdNames.s_KeyStirrupZonePosition, Position));
            elem.AddAttribute(XEP_EmdFactrory.CreateEmdAttribute(XEP_EmdNames.s_KeyStirrupZoneCoef, Coeff.ToString()));
            return(elem);
        }
        public IXEP_StirrupZoneIO Create(double sectionPos)
        {
            IXEP_StirrupZoneIO zoneInput = XEP_EmdFactrory.CreateStirrupZoneIO();

            zoneInput.Shapes = ZoneShape.Create();
            zoneInput.NumCut = NumCutUser;
            IXEP_EmdStirrupData nearestStirrup = FindNearestStirrup(sectionPos);

            if (nearestStirrup == null)
            {
                zoneInput.Spacing         = 0.0;
                zoneInput.StirrupDiameter = 0.0;
            }
            else
            {
                zoneInput.Spacing         = nearestStirrup.Dss;
                zoneInput.StirrupDiameter = nearestStirrup.D;
            }
            return(zoneInput);
        }
        void SetValues(ContentBase content, TableBlock block)
        {
            string positionString = "0,0,0";
            string rotationString = "0,0,0";
            string shapeString    = "box";
            string scaleString    = "1,1,1";

            //get transformation of content
            foreach (EditorINIOption option in block.Block.Options)
            {
                if (option.Values.Count > 0)
                {
                    switch (option.Name.ToLower())
                    {
                    case "pos":
                        positionString = option.Values[0].Value.ToString();
                        break;

                    case "rotate":
                        rotationString = option.Values[0].Value.ToString();
                        break;

                    case "shape":
                        shapeString = option.Values[0].Value.ToString();
                        break;

                    case "size":
                        scaleString = option.Values[0].Value.ToString();
                        break;
                    }
                }
            }

            Vector3D   position = ParsePosition(positionString);
            Rotation3D rotation;
            Vector3D   scale;

            //set content values
            if (block.ObjectType == ContentType.Zone)
            {
                ZoneShape shape = ParseShape(shapeString);
                scale    = ParseScale(scaleString, shape);
                rotation = ParseRotation(rotationString, shape == ZoneShape.Cylinder);

                ((Zone)content).Shape = shape;
            }
            else if (block.ObjectType == ContentType.LightSource)
            {
                scale    = new Vector3D(1, 1, 1);
                rotation = ParseRotation(rotationString, false);
            }
            else
            {
                scale    = new Vector3D(block.Archtype.Radius, block.Archtype.Radius, block.Archtype.Radius) / 1000;
                rotation = ParseRotation(rotationString, false);
            }

            content.SetDisplay(position, rotation, scale);

            if (selectedContent == content)
            {
                //update selection if changed content is selected
                SetSelectedContent(content);
            }
        }