Exemplo n.º 1
0
        private void ApplyConnection(ObservableCollection <ConnectionSetting> collection, string component, string boltweldtype, string angletype)
        {
            if (collection.Count == 0 || collection == null)
            {
                return;
            }
            var model     = new Tekla.Structures.Model.Model();
            var modelname = model.GetInfo().ModelName;
            var jobcode   = GetJobCodeOnProjectName(modelname);


            foreach (var item in collection)
            {
                if (item.IsChecked)
                {
                    var EnumComponent    = (int)Enum.Parse(typeof(ComponentType), component);
                    var EnumBoltweldtype = (int)Enum.Parse(typeof(BoltWeldOrientation), boltweldtype);
                    var EnumAngletype    = (int)Enum.Parse(typeof(AngleTypes), angletype);

                    ConnectionChecker cnc = new ConnectionChecker();
                    if (item.IsSingleConnection)
                    {
                        cnc.CreateConnection((Beam)item.PrimaryObject, (Beam)item.SecondaryObject, EnumComponent, jobcode, EnumBoltweldtype, EnumAngletype);
                    }
                    if (!item.IsSingleConnection)
                    {
                        cnc.CreateConnection((Beam)item.PrimaryObject, item.SecondaryObjects, EnumComponent, jobcode, EnumBoltweldtype, EnumAngletype);
                    }
                }
            }

            model.CommitChanges();
        }
        /// <summary>Sets current phase in the opened tekla strucutres model</summary>
        /// <param name="phaseNumber">Number of the phase</param>
        public void SetCurrentPhase(int phaseNumber)
        {
            var phase = GetPhaseByNumber(phaseNumber);

            phase.IsCurrentPhase = 1;
            phase.Modify();
            model.CommitChanges();
        }
Exemplo n.º 3
0
        private void btn_createColumn_Click(object sender, EventArgs e)
        {
            // Column 객체 생성
            // 왜 Beam타입으로 생성하는가? Tekla에서는 모든 직선객체는 Beam타입으로 생성한다.
            // 부재의 Profile 과 StartPoint, EndPoint를 지정하여 부재를 생성하는 방식.
            TSM.Beam column = new TSM.Beam();

            column.StartPoint              = new TSG.Point(0, 0, 0);    // column 생성 시작지점
            column.EndPoint                = new TSG.Point(0, 0, 3000); // column 생성 끝지점
            column.Profile.ProfileString   = "400*400";                 // column 규격
            column.Material.MaterialString = "C40";                     // column 재질
            column.Class = "1";                                         // column 클래스 (캐드의 Layer와 같은 개념)

            column.Insert();                                            // 현재 켜져있는 Tekla 모델에 column 삽입

            model.CommitChanges();                                      // model의 변경사항을 커밋
        }
        public static void Run(Tekla.Technology.Akit.IScript akit)
        {
            List <string> ignoreClasses = new List <string>();

            //ignoreClasses.Add("152");

            TSM.Model myModel = new TSM.Model();
            AssemblyToSubAssembly.main(ignoreClasses, akit);
            myModel.CommitChanges();
        }
Exemplo n.º 5
0
        public static bool CreateBeam()
        {
            TSM.Model myModel = new TSM.Model();
            TSM.Beam  myBeam  = new TSM.Beam(new TSG3d.Point(1000, 1000, 1000),
                                             new TSG3d.Point(6000, 6000, 1000));
            myBeam.Material.MaterialString = "Concrete_Undefined";
            myBeam.Profile.ProfileString   = "800*400";
            bool creationResult = false;

            if (myBeam.Insert())
            {
                creationResult = myModel.CommitChanges();
            }
            return(creationResult);
        }
Exemplo n.º 6
0
        private void b_Create_Click(object sender, EventArgs e) // При нажатии кнопки создать вызывается метод построения пользовательского компанента.
        {
            DialogResult res      = openFileDialog1.ShowDialog();
            string       fileName = openFileDialog1.FileName;
            Excel        excel    = new Excel(fileName, 1);
            Supports     support  = new Supports();                  //Инициализируем экземпляр класса.
            int          count    = 0;                               //Щетчик для циклла.
            int          step     = 0;                               //Шаг по Х.

            for (int i = 0; excel.ReadCell(i, 1) != ""; i++)         //Выполнять пока i,1 ячейка не станет пустой.
            {
                string profile  = excel.ReadCell(i, 5);              //Обращение к столбику с профилем.
                int    material = Int32.Parse(excel.ReadCell(i, 2)); // Обращение к столбику с классом материала.
                string a        = excel.ReadCell(i, 7);              //Обращение к столбику А.
                int    A        = Int32.Parse(a);                    // Приведение к int типу.
                string b        = excel.ReadCell(i, 8);
                int    B        = Int32.Parse(b);
                string c        = excel.ReadCell(i, 9);
                int    C        = Int32.Parse(c);
                int    Y1       = 0 + (count * 500); // координата У с шагом 500 счетчик обновляется по достижению 6000.
                int    Y2       = 100 + (count * 500);
                int    X1       = 0 + step;          // Х + шаг 2000 по достижению У 6000.
                int    X2       = 0 + step;
                if (Y1 == 6000)
                {
                    step += 2000;
                }
                if (Y1 == 6000)
                {
                    count = 0;
                }
                int Z1 = 0; // Констаната.
                int Z2 = 0;
                count++;
                support.TR31(A, B, C, material, profile, X1, Y1, Z1, X2, Y2, Z2); //Функция принимающая все параметры.

                model.CommitChanges();                                            //Применить изминения.
            }
        }
Exemplo n.º 7
0
        public override bool Run(List <InputDefinition> Input)
        {
            try
            {
                double Height = _data.height;

                TSG.Point StartPoint = (TSG.Point)Input[0].GetInput();

                TSG.Point EndPoint = new TSG.Point(StartPoint);
                EndPoint.Z += Height;

                TSM.Beam Column = new TSM.Beam(StartPoint, EndPoint);
                Column.Profile.ProfileString = "HEA400";

                Column.Insert();

                _model.CommitChanges();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            return(true);
        }
        public static void Run(Tekla.Technology.Akit.IScript akit)
        {
            List<string> ignoreClasses = new List<string>();
            //ignoreClasses.Add("152");

            TSM.Model myModel = new TSM.Model();
            AssemblyToSubAssembly.main(ignoreClasses, akit);
            myModel.CommitChanges();
        }
Exemplo n.º 9
0
        public void Process()
        {
            var model            = new Tekla.Structures.Model.Model();
            var modelObjSelector = new Tekla.Structures.Model.UI.ModelObjectSelector();
            var selectedObj      = modelObjSelector.GetSelectedObjects();

            var objlist = new List <Beam>();

            while (selectedObj.MoveNext())
            {
                Tekla.Structures.Model.Part thisPart = selectedObj.Current as Tekla.Structures.Model.Part;

                if (thisPart != null)
                {
                    var objBeam = thisPart as Beam;
                    objlist.Add(objBeam);
                }
            }

            List <ConnectionInfo> conInfo = new List <ConnectionInfo>();
            var pairlist = new List <CollectionPair>();

            foreach (var item in objlist)
            {
                var currentitem = item;


                var items = objlist.Where
                                (layer =>
                                Math.Round(layer.StartPoint.Z, 1) == Math.Round(currentitem.StartPoint.Z, 1) ||
                                (
                                    Math.Round(layer.StartPoint.Z, 1) >= Math.Round(currentitem.StartPoint.Z, 1) &&
                                    Math.Round(layer.StartPoint.Z, 1) <= Math.Round(currentitem.EndPoint.Z, 1)
                                ) ||
                                (
                                    Math.Round(layer.EndPoint.Z, 1) >= Math.Round(currentitem.StartPoint.Z, 1) &&
                                    Math.Round(layer.EndPoint.Z, 1) <= Math.Round(currentitem.EndPoint.Z, 1)
                                )
                                ).ToList();

                foreach (var subitem in items)
                {
                    if (pairlist.Exists(
                            c => (c.Primary == currentitem.Identifier.ToString() && c.Secondary == subitem.Identifier.ToString()) ||
                            (c.Primary == subitem.Identifier.ToString() && c.Secondary == currentitem.Identifier.ToString())
                            ))
                    {
                        continue;
                    }

                    if (currentitem.Identifier != subitem.Identifier)
                    {
                        ConnectionInfo info  = new ConnectionInfo();
                        Line           line1 = new Line(currentitem);
                        Line           line2 = new Line(subitem);

                        var linechecker = new LineChecker(line1, line2);

                        if (linechecker.ValidConnection)
                        {
                            info.Primary          = linechecker.GetPrimary();
                            info.PrimaryId        = info.Primary.Id;
                            info.Secondary        = linechecker.GetSecondary();
                            info.SecondaryProfile = GetSecondaryBeamProfile(info.Secondary.ObjSource);
                            info.PrimaryType      = info.Primary.ObjSource.Type.ToString();
                            info.XIntersection    = (double)linechecker.X_Coord;
                            info.YIntersection    = (double)linechecker.Y1_Coord;
                            info.Level            = info.Secondary.ObjSource.StartPoint.Z.RoundDown(3);


                            Beam primary   = info.Primary.ObjSource;
                            Beam secondary = info.Secondary.ObjSource;


                            conInfo.Add(info);

                            // create pair of collection
                            // identify primary and secondary objects
                            // iterate pair of collection

                            var pairs = new CollectionPair()
                            {
                                Profile   = (linechecker.GetSecondary().Id == currentitem.Identifier.ID) ? currentitem.Profile.ProfileString : subitem.Profile.ProfileString,
                                Primary   = linechecker.GetPrimary().Id.ToString(),
                                Secondary = linechecker.GetSecondary().Id.ToString()
                            };
                            pairlist.Add(pairs);
                        }
                    }
                }
            }

            ProcessCollection(conInfo);

            Console.WriteLine("+++++++++++++++++++++++++++++");
            Console.WriteLine("Beam To Beam-Web Connection");
            Console.WriteLine();
            foreach (var i in BeamToBeamWebColl)
            {
                Console.WriteLine($"IsSingleConnection: {i.IsSingleConnection}");
                Console.Write($"{((Beam)i.PrimaryObject).Identifier.ID}");
                if (i.IsSingleConnection)
                {
                    Console.Write($">>{((Beam)i.SecondaryObject).Identifier.ID}");
                }
                else
                {
                    //Console.WriteLine($"Secondary ids:");
                    foreach (var l in i.SecondaryObjects)
                    {
                        var o = l as Beam;
                        Console.Write($">>{o.Identifier.ID}");
                    }
                }
                Console.WriteLine();
                Console.WriteLine("-------------------");
                Console.WriteLine();
            }
            Console.WriteLine("+++++++++++++++++++++++++++++");
            Console.WriteLine("Beam To Column-Web Connection");
            Console.WriteLine();
            foreach (var i in BeamToColumnWebColl)
            {
                Console.WriteLine($"IsSingleConnection: {i.IsSingleConnection}");
                Console.Write($"{((Beam)i.PrimaryObject).Identifier.ID}");
                if (i.IsSingleConnection)
                {
                    Console.Write($">>{((Beam)i.SecondaryObject).Identifier.ID}");
                }
                else
                {
                    //Console.WriteLine($"Secondary ids:");
                    foreach (var l in i.SecondaryObjects)
                    {
                        var o = l as Beam;
                        Console.Write($">>{o.Identifier.ID}");
                    }
                }
                Console.WriteLine();
                Console.WriteLine("-------------------");
                Console.WriteLine();
            }
            Console.WriteLine("+++++++++++++++++++++++++++++");
            Console.WriteLine("Beam To Column-Flange Connection");
            Console.WriteLine();
            foreach (var i in BeamToColumnFlangeColl)
            {
                Console.WriteLine($"IsSingleConnection: {i.IsSingleConnection}");
                Console.Write($"{((Beam)i.PrimaryObject).Identifier.ID}");
                if (i.IsSingleConnection)
                {
                    Console.Write($">>{((Beam)i.SecondaryObject).Identifier.ID}");
                }
                else
                {
                    //Console.WriteLine($"Secondary ids:");
                    foreach (var l in i.SecondaryObjects)
                    {
                        var o = l as Beam;
                        Console.Write($">>{o.Identifier.ID}");
                    }
                }
                Console.WriteLine();
                Console.WriteLine("-------------------");
                Console.WriteLine();
            }

            model.CommitChanges();
            //Console.ReadKey();
        }
Exemplo n.º 10
0
        private void button2_Click(object sender, EventArgs e)
        {
            // *기본 가정
            //  1) 슬라브를 배치할 두 빔은 평행
            //  2) 슬라브는 비스듬하게 배치되지 않음.(두빔에 항상 수직방향으로 배치됨)
            //  3) 슬라브는 z평면과 수평하게 배치됨
            TSM.Model currentModel = new TSM.Model();

            try
            {
                // 1. 슬라브 객체 생성
                ContourPlate contourPlate = new ContourPlate();

                // 2. 슬라브 생성할 두 부재 선택
                Picker          picker    = new Picker();
                TSM.ModelObject mainpart  = picker.PickObject(Picker.PickObjectEnum.PICK_ONE_PART, "슬라브를 삽입할 첫번째 부재를 선택하세요.");
                TSM.Beam        startBeam = mainpart as TSM.Beam;
                mainpart = picker.PickObject(Picker.PickObjectEnum.PICK_ONE_PART, "슬라브를 삽입할 두번째 부재를 선택하세요.");
                TSM.Beam endBeam = mainpart as TSM.Beam;

                // 3. 기본 방향벡터 생성
                //  1) StartBeam의 길이방향 단위벡터
                TSG.Vector startBeamLDirectionVector = new TSG.Vector(startBeam.EndPoint - startBeam.StartPoint).GetNormal();

                //  2) StartBeam의 높이방향 단위벡터-
                TSG.Vector startBeamHDirecitionVector = new TSG.Vector(0, 0, 1); //추후 기울어진 빔에도 적용가능하도록 변경

                //  EdgeEnumerator를 통해 StartBeam의 높이방향 단위벡터 구하기
                Solid solid = startBeam.GetSolid();
                if (solid != null)
                {
                    EdgeEnumerator edgeEnumerator = solid.GetEdgeEnumerator();
                    int            edgeCount      = 0;
                    while (edgeEnumerator.MoveNext())
                    {
                        var edge = edgeEnumerator.Current as Edge;
                        if (edge != null)
                        {
                            Console.WriteLine("Start : " + edge.StartPoint.ToString());
                            Console.WriteLine("End : " + edge.EndPoint.ToString());
                            Console.WriteLine("Type :" + edge.Type.ToString());

                            if (edgeCount == 8)
                            {
                                startBeamHDirecitionVector = new TSG.Vector((edge.EndPoint.X - edge.StartPoint.X) / 2, (edge.EndPoint.Y - edge.StartPoint.Y) / 2, (edge.EndPoint.Z - edge.StartPoint.Z) / 2).GetNormal();
                            }
                            edgeCount++;
                        }
                    }
                }

                //  3) StartBeam -> EndBeam 방향 단위벡터 (중점에서 중점 잇는 벡터)
                TSG.Point sbSP = startBeam.StartPoint;
                TSG.Point sbEP = startBeam.EndPoint;
                TSG.Point ebSP = endBeam.StartPoint;
                TSG.Point ebEP = endBeam.EndPoint;
                TSG.Point starBeamCenterPoint = new TSG.Point((sbSP.X + sbEP.X) / 2, (sbSP.Y + sbEP.Y) / 2, (sbSP.Z + sbEP.Z) / 2);
                TSG.Point endBeamCenterPoint  = new TSG.Point((ebSP.X + ebEP.X) / 2, (ebSP.Y + ebEP.Y) / 2, (ebSP.Z + ebEP.Z) / 2);

                TSG.Vector startBeamToEndBeamVector          = new TSG.Vector((ebSP.X + ebEP.X) / 2 - (sbSP.X + sbEP.X) / 2, (ebSP.Y + ebEP.Y) / 2 - (sbSP.Y + sbEP.Y) / 2, (ebSP.Z + ebEP.Z) / 2 - (sbSP.Z + sbEP.Z) / 2);
                TSG.Vector startBeamToEndBeamDirectionVector = new TSG.Vector((ebSP.X + ebEP.X) / 2 - (sbSP.X + sbEP.X) / 2, (ebSP.Y + ebEP.Y) / 2 - (sbSP.Y + sbEP.Y) / 2, (ebSP.Z + ebEP.Z) / 2 - (sbSP.Z + sbEP.Z) / 2).GetNormal();

                // 3. 슬라브 치수 및 기타속성 입력 ( 현재는 상수 )
                double slabWidthLeft   = 300;
                double slabWidthCenter = 300;
                double slabWidthRight  = 300;
                double slabThickness   = 100;
                double ribThickness    = 200;
                double ribDistUpper    = 50;
                double ribDistLower    = 30;
                double ribInterval     = ribDistUpper - ribDistLower;

                double startOffset = 100;
                contourPlate.Profile.ProfileString   = (startBeamToEndBeamVector.GetLength() - startOffset * 2).ToString();
                contourPlate.Material.MaterialString = "C24";

                // 4. 슬라브 시작점 설정
                //  1) 길이방향(일단은 startPoint점에서 시작하는걸로)
                String    direction      = "정방향"; //사용자가 직접 선택. 정방향 or 역방향
                TSG.Point slabStartPoint = new TSG.Point();

                if (direction == "정방향")
                {
                    slabStartPoint = startBeam.StartPoint;
                }
                else if (direction == "역방향")
                {
                    slabStartPoint            = startBeam.EndPoint;
                    startBeamLDirectionVector = startBeamLDirectionVector * -1;
                }

                //  2) 높이방향
                double heightConstant = 0.0;
                //depth type에 따른 슬라브 생성높이 변경
                if (startBeam.Position.Depth == Position.DepthEnum.FRONT)
                {
                    heightConstant = 1.0;
                }
                else if (startBeam.Position.Depth == Position.DepthEnum.MIDDLE)
                {
                    heightConstant = 0.5;
                }
                slabStartPoint += startBeamHDirecitionVector * ((Methods.GetGirderHeight(startBeam) * heightConstant + slabThickness + ribThickness));

                //  3) endBeam방향
                slabStartPoint += startBeamToEndBeamDirectionVector * (startOffset);

                // 5. 슬라브 포인트 입력
                List <TSG.Point> pointList = new List <TSG.Point>();

                pointList.Add(slabStartPoint);
                pointList.Add(pointList[0] + (startBeamHDirecitionVector * slabThickness * -1));
                pointList.Add(pointList[1] + (startBeamLDirectionVector * slabWidthLeft));
                pointList.Add(pointList[2] + (startBeamLDirectionVector * ribInterval) + (startBeamHDirecitionVector * ribThickness * -1));
                pointList.Add(pointList[3] + (startBeamLDirectionVector * ribDistLower));
                pointList.Add(pointList[4] + (startBeamLDirectionVector * ribInterval) + (startBeamHDirecitionVector * ribThickness));
                pointList.Add(pointList[5] + (startBeamLDirectionVector * slabWidthCenter));
                pointList.Add(pointList[6] + (startBeamLDirectionVector * ribInterval) + (startBeamHDirecitionVector * ribThickness * -1));
                pointList.Add(pointList[7] + (startBeamLDirectionVector * ribDistLower));
                pointList.Add(pointList[8] + (startBeamLDirectionVector * ribInterval) + (startBeamHDirecitionVector * ribThickness));
                pointList.Add(pointList[9] + (startBeamLDirectionVector * slabWidthRight));
                pointList.Add(pointList[10] + (startBeamHDirecitionVector * slabThickness));

                for (int i = 0; i <= 11; i++)
                {
                    contourPlate.AddContourPoint(new ContourPoint(pointList[i], null));
                }

                // 4. 슬라브 깊이타입 결정
                //  1) StartBeam 중앙에서 L,H Direction의 법선 벡터방향 으로 Line을 뻗어 EndBeam과 겹치는 부분이 있는지 확인
                //  2) 겹치면 깊이타입 Front , 겹치지 않으면 Back

                //  StartBeam 중앙에서 L,H Direction의 법선 벡터(외적 결과값)
                TSG.Vector crossResult = TSG.Vector.Cross(startBeamHDirecitionVector, startBeamLDirectionVector);

                //  외적벡터의 연장선
                TSG.Point       extendedPoint     = new TSG.Point(starBeamCenterPoint.X, starBeamCenterPoint.Y, starBeamCenterPoint.Z) + new TSG.Point(crossResult.X * 10000, crossResult.Y * 10000, crossResult.Z * 10000);
                TSG.LineSegment centerLineSegment = new TSG.LineSegment(starBeamCenterPoint, extendedPoint);

                //endBeam의 Plane 작성
                TSG.Vector         planeNormalVector = crossResult; //조건 중 startBeam과 endBeam이 평행하므로 평면을 구성하는 법선벡터 또한 같다.
                TSG.GeometricPlane endBeamPlane      = new TSG.GeometricPlane(endBeamCenterPoint, planeNormalVector);

                //두 line이 겹치는지 확인하는 Point (겹치면 값이 있고 안겹치면 값이 없음)
                TSG.Point isIntersect = TSG.Intersection.LineSegmentToPlane(centerLineSegment, endBeamPlane);
                if (isIntersect != null) // endBeam이 오른쪽에 있을 때
                {
                    if (direction == "정방향")
                    {
                        contourPlate.Position.Depth = Position.DepthEnum.BEHIND;
                    }
                    else if (direction == "역방향")
                    {
                        contourPlate.Position.Depth = Position.DepthEnum.FRONT;
                    }
                }
                else if (isIntersect == null) // endBeam이 오른쪽에 없을 때
                {
                    if (direction == "정방향")
                    {
                        contourPlate.Position.Depth = Position.DepthEnum.FRONT;
                    }
                    else if (direction == "역방향")
                    {
                        contourPlate.Position.Depth = Position.DepthEnum.BEHIND;
                    }
                }
                bool result = false;
                result = contourPlate.Insert();
                currentModel.CommitChanges();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
Exemplo n.º 11
0
        private void button1_Click(object sender, EventArgs e)
        {
            //1. 기본 가정
            // 1) 슬라브를 배치할 두 빔은 평행
            // 2) 슬라브는 비스듬하게 배치되지 않음.(두빔에 항상 수직방향으로 배치됨)
            // 3) 슬라브는 z평면과 수평하게 배치됨

            ContourPlate contourPlate = new ContourPlate();

            contourPlate.Position.Depth = Position.DepthEnum.FRONT;

            //2. 현재 모델의 좌표계(글로벌좌표계) 및 Z 벡터 저장
            TSM.Model           currentModel     = new TSM.Model();
            WorkPlaneHandler    workPlaneHandler = currentModel.GetWorkPlaneHandler();
            TransformationPlane originPlane      = workPlaneHandler.GetCurrentTransformationPlane();

            //3. 슬라브 생성할 두 부재 선택
            Picker picker = new Picker();

            TSM.ModelObject mainpart  = picker.PickObject(Picker.PickObjectEnum.PICK_ONE_PART, "슬라브를 삽입할 첫번째 부재를 선택하세요.");
            TSM.Beam        startBeam = mainpart as TSM.Beam;
            mainpart = picker.PickObject(Picker.PickObjectEnum.PICK_ONE_PART, "슬라브를 삽입할 두번째 부재를 선택하세요.");
            TSM.Beam endBeam = mainpart as TSM.Beam;

            //4. 새 좌표계 생성(startBeam과 EndBeam과의 관계 내포)
            TSG.Vector          coordinateVector2    = new TSG.Vector(startBeam.EndPoint - startBeam.StartPoint);
            TSG.Vector          coordinateVector1    = new TSG.Vector(endBeam.EndPoint - startBeam.StartPoint);
            TransformationPlane slabCoordinateSystem = new TransformationPlane(startBeam.StartPoint, coordinateVector2, coordinateVector1);

            workPlaneHandler.SetCurrentTransformationPlane(slabCoordinateSystem);

            //5. 슬라브 Point시작점 위치 잡기
            //1) 슬라브 벡터 설정
            TSG.Vector slabVector = new TSG.Vector(0, 1, 0);

            //3) offset길이만큼 beam1 e.p 방향으로 이동(추후 작성)
            //4) 걸침 높이만큼 z축 방향으로 이동(여기서는 slab Height로 가야함)(추후 작성)

            //6. 슬라브 치수요소 입력 ( 현재는 상수 )
            double slabWidthLeft   = 300;
            double slabWidthCenter = 300;
            double slabWidthRight  = 300;
            double slabHeight      = 300;
            double ribDistUpper    = 50;
            double ribDistLower    = 30;
            double slabThickness   = 100;

            //7. 슬라브 시작점 설정
            TSG.Point slabStartPoint = new TSG.Point(0, 0, (Methods.GetGirderHeight(startBeam) * 0.5 + slabHeight) * -1);

            //Y방향 설정
            double startOffset = 100;

            slabStartPoint += slabVector * Methods.GetGirderWidth(startBeam) * 0.5;
            slabStartPoint += slabVector * startOffset * -1;

            //8. 슬라브 포인트 입력 (수정)
            TSG.Point point1  = new TSG.Point(slabStartPoint.X, slabStartPoint.Y, slabStartPoint.Z);
            TSG.Point point2  = new TSG.Point(slabStartPoint.X, slabStartPoint.Y, slabStartPoint.Z + (slabThickness));
            TSG.Point point3  = new TSG.Point(slabStartPoint.X + slabWidthLeft - ribDistUpper / 2, slabStartPoint.Y, slabStartPoint.Z + (slabThickness));
            TSG.Point point4  = new TSG.Point(slabStartPoint.X + slabWidthLeft - ribDistLower / 2, slabStartPoint.Y, slabStartPoint.Z + (slabHeight));
            TSG.Point point5  = new TSG.Point(slabStartPoint.X + slabWidthLeft + ribDistLower / 2, slabStartPoint.Y, slabStartPoint.Z + (slabHeight));
            TSG.Point point6  = new TSG.Point(slabStartPoint.X + slabWidthLeft + ribDistUpper / 2, slabStartPoint.Y, slabStartPoint.Z + (slabThickness));
            TSG.Point point7  = new TSG.Point(slabStartPoint.X + slabWidthLeft + slabWidthCenter - ribDistUpper / 2, slabStartPoint.Y, slabStartPoint.Z + (slabThickness));
            TSG.Point point8  = new TSG.Point(slabStartPoint.X + slabWidthLeft + slabWidthCenter - ribDistLower / 2, slabStartPoint.Y, slabStartPoint.Z + (slabHeight));
            TSG.Point point9  = new TSG.Point(slabStartPoint.X + slabWidthLeft + slabWidthCenter + ribDistLower / 2, slabStartPoint.Y, slabStartPoint.Z + (slabHeight));
            TSG.Point point10 = new TSG.Point(slabStartPoint.X + slabWidthLeft + slabWidthCenter + ribDistUpper / 2, slabStartPoint.Y, slabStartPoint.Z + (slabThickness));
            TSG.Point point11 = new TSG.Point(slabStartPoint.X + slabWidthLeft + slabWidthCenter + slabWidthRight, slabStartPoint.Y, slabStartPoint.Z + (slabThickness));
            TSG.Point point12 = new TSG.Point(slabStartPoint.X + slabWidthLeft + slabWidthCenter + slabWidthRight, slabStartPoint.Y, slabStartPoint.Z);

            //TSG.Point point1 = new TSG.Point(slabStartPoint.X, slabStartPoint.Y, slabStartPoint.Z);
            //TSG.Point point2 = new TSG.Point(slabStartPoint.X, slabStartPoint.Y, slabStartPoint.Z + (slabThickness) * -1);
            //TSG.Point point3 = new TSG.Point(slabStartPoint.X + slabWidthLeft - ribDistUpper / 2, slabStartPoint.Y, slabStartPoint.Z + (slabThickness) * -1);
            //TSG.Point point4 = new TSG.Point(slabStartPoint.X + slabWidthLeft - ribDistLower / 2, slabStartPoint.Y, slabStartPoint.Z + (slabHeight) * -1);
            //TSG.Point point5 = new TSG.Point(slabStartPoint.X + slabWidthLeft + ribDistLower / 2, slabStartPoint.Y, slabStartPoint.Z + (slabHeight) * -1);
            //TSG.Point point6 = new TSG.Point(slabStartPoint.X + slabWidthLeft + ribDistUpper / 2, slabStartPoint.Y, slabStartPoint.Z + (slabThickness) * -1);
            //TSG.Point point7 = new TSG.Point(slabStartPoint.X + slabWidthLeft + slabWidthCenter - ribDistUpper / 2, slabStartPoint.Y, slabStartPoint.Z + (slabThickness) * -1);
            //TSG.Point point8 = new TSG.Point(slabStartPoint.X + slabWidthLeft + slabWidthCenter - ribDistLower / 2, slabStartPoint.Y, slabStartPoint.Z + (slabHeight) * -1);
            //TSG.Point point9 = new TSG.Point(slabStartPoint.X + slabWidthLeft + slabWidthCenter + ribDistLower / 2, slabStartPoint.Y, slabStartPoint.Z + (slabHeight) * -1);
            //TSG.Point point10 = new TSG.Point(slabStartPoint.X + slabWidthLeft + slabWidthCenter + ribDistUpper / 2, slabStartPoint.Y, slabStartPoint.Z + (slabThickness) * -1);
            //TSG.Point point11 = new TSG.Point(slabStartPoint.X + slabWidthLeft + slabWidthCenter + slabWidthRight, slabStartPoint.Y, slabStartPoint.Z + (slabThickness) * -1);
            //TSG.Point point12 = new TSG.Point(slabStartPoint.X + slabWidthLeft + slabWidthCenter + slabWidthRight, slabStartPoint.Y, slabStartPoint.Z);


            contourPlate.AddContourPoint(new ContourPoint(point1, null));
            contourPlate.AddContourPoint(new ContourPoint(point2, null));
            contourPlate.AddContourPoint(new ContourPoint(point3, null));
            contourPlate.AddContourPoint(new ContourPoint(point4, null));
            contourPlate.AddContourPoint(new ContourPoint(point5, null));
            contourPlate.AddContourPoint(new ContourPoint(point6, null));
            contourPlate.AddContourPoint(new ContourPoint(point7, null));
            contourPlate.AddContourPoint(new ContourPoint(point8, null));
            contourPlate.AddContourPoint(new ContourPoint(point9, null));
            contourPlate.AddContourPoint(new ContourPoint(point10, null));
            contourPlate.AddContourPoint(new ContourPoint(point11, null));
            contourPlate.AddContourPoint(new ContourPoint(point12, null));

            contourPlate.Profile.ProfileString   = "2000";
            contourPlate.Material.MaterialString = "C24";

            bool result = false;

            result = contourPlate.Insert();
            currentModel.CommitChanges();

            //모델의 좌표계를 재로드
            workPlaneHandler.SetCurrentTransformationPlane(originPlane);
        }