Esempio n. 1
0
 public void AddElasticLink(MctElasticLink link)
 {
     foreach (var singlelink in _elasticLinks)
     {
         if ((singlelink._node1 == link._node1 && singlelink._node2 == link._node2) ||
             (singlelink._node2 == link._node1 && singlelink._node1 == link._node2))
         {
             return;
         }
     }
     _elasticLinks.Add(link);
 }
Esempio n. 2
0
        public void TranslateLateralBeam()
        {
            var LateralBeamSet = _ifcModel.Instances.OfType <IIfcElementAssembly>()
                                 .Where(ea => (ea.PredefinedType == IfcElementAssemblyTypeEnum.USERDEFINED && ea.Name == "LateralGirder")).ToList();

            if (LateralBeamSet.Count == 0)
            {
                throw new InvalidOperationException("Must input Beams");
            }

            List <IIfcMaterialSelect> BeamSetMaterial = new List <IIfcMaterialSelect>();

            foreach (var lateralBeam in LateralBeamSet)
            {
                BeamSetMaterial.Add(lateralBeam.Material);
            }
            var mat = TranslatorToolkitFactory.TranslateMaterial(BeamSetMaterial, ref matIndex);

            _mctStore.AddMaterial(mat);

            nodeIndex = (nodeIndex - 1) * _lateralBeamNums + 1;
            var offsetValues = TranslatorToolkitFactory.ParseOffsetValues(LateralBeamSet, _lateralBeamNums);

            PushLateralBeamNodes(offsetValues, ref nodeIndex);

            var sectionDimensions = TranslatorToolkitFactory.ParseLateralSection(LateralBeamSet[0]);
            var sec = new MctSectionDBUSER(MctSectionDBUSERShapeTypeEnum.DOUBLE_L, sectionDimensions, ref sectionIndex);

            _mctStore.AddSection(sec, ref sectionIndex);
            var matSet  = _mctStore.GetTotalMaterial();
            var beamMat = matSet.Where(m => m.Value.Type == MctMaterialTypeEnum.STEEL).FirstOrDefault();

            for (int i = 0; i < (LateralBeamSet.Count / _lateralBeamNums); i++)
            {
                for (int j = 0; j < _lateralBeamNums; j++)
                {
                    var element = new MctFrameElement()
                    {
                        Id    = elementIndex++,
                        Mat   = beamMat.Value,
                        Sec   = sec,
                        Type  = MctElementTypeEnum.BEAM,
                        Node1 = LateralBeamNodeSet[i * _lateralBeamNums + j],
                        Node2 = LateralBeamNodeSet[i * _lateralBeamNums + j + _lateralBeamNums]
                    };
                    _mctStore.AddElement(element);
                    element = new MctFrameElement()
                    {
                        Id    = elementIndex++,
                        Mat   = beamMat.Value,
                        Sec   = sec,
                        Type  = MctElementTypeEnum.BEAM,
                        Node1 = LateralBeamNodeSet[i * _lateralBeamNums + j],
                        Node2 = LateralBeamNodeSet[i * _lateralBeamNums + j + 2 * (LateralBeamSet.Count + _lateralBeamNums)],
                    };
                    _mctStore.AddElement(element);
                    element = new MctFrameElement()
                    {
                        Id    = elementIndex++,
                        Mat   = beamMat.Value,
                        Sec   = sec,
                        Type  = MctElementTypeEnum.BEAM,
                        Node2 = LateralBeamNodeSet[i * _lateralBeamNums + j + 2 * (LateralBeamSet.Count + _lateralBeamNums)],
                        Node1 = LateralBeamNodeSet[i * _lateralBeamNums + j + _lateralBeamNums],
                    };
                    _mctStore.AddElement(element);
                    element = new MctFrameElement((180, 0))
                    {
                        Id    = elementIndex++,
                        Mat   = beamMat.Value,
                        Sec   = sec,
                        Type  = MctElementTypeEnum.BEAM,
                        Node2 = LateralBeamNodeSet[i * _lateralBeamNums + j + (LateralBeamSet.Count + _lateralBeamNums)],
                        Node1 = LateralBeamNodeSet[i * _lateralBeamNums + j + 2 * (LateralBeamSet.Count + _lateralBeamNums)],
                    };
                    _mctStore.AddElement(element);
                    element = new MctFrameElement((180, 0))
                    {
                        Id    = elementIndex++,
                        Mat   = beamMat.Value,
                        Sec   = sec,
                        Type  = MctElementTypeEnum.BEAM,
                        Node2 = LateralBeamNodeSet[i * _lateralBeamNums + j + 2 * (LateralBeamSet.Count + _lateralBeamNums)],
                        Node1 = LateralBeamNodeSet[i * _lateralBeamNums + j + _lateralBeamNums + (LateralBeamSet.Count + _lateralBeamNums)],
                    };
                    _mctStore.AddElement(element);
                }
            }

            var elasticLinkCollector = new List <MctElasticLink>();
            var rigidLinkCollector   = new List <MctRigidLink>();

            for (int i = 0; i <= LateralBeamSet.Count / _lateralBeamNums; i++)
            {
                for (int j = 0; j < _lateralBeamNums - 1; j++)
                {
                    var link = new MctElasticLink(elasticLinkIndex++, LateralBeamNodeSet[i * _lateralBeamNums + j],
                                                  LateralBeamNodeSet[i * _lateralBeamNums + j + 1]);
                    elasticLinkCollector.Add(link);
                    _mctStore.AddElasticLink(link);
                }
            }
            for (int i = 0; i < girderNodeSet.Count; i++)
            {
                var subNodes = new List <MctNode>()
                {
                    LateralBeamNodeSet[i], LateralBeamNodeSet[i + girderNodeSet.Count]
                };
                var link = new MctRigidLink(rigidLinkIndex++, girderNodeSet[i], subNodes);
                rigidLinkCollector.Add(link);
                _mctStore.AddRigidLink(link);
            }
            _mctStore.AddLink(rigidLinkCollector, elasticLinkCollector);
            //_mctStore.AddNode(BeamNodesSet);
        }