private static bool AddCylinder(CyPhy.Cylinder cylinder, List <KeyValuePair <string, string> > featureList) { bool status = true; if (cylinder != null) { // start, end, radius MgaModel cylinderMga = cylinder.Impl as MgaModel; List <MgaFCO> startPts = new List <MgaFCO>(); startPts = FindByRole(cylinderMga, "CylinderStart"); List <MgaFCO> endPts = new List <MgaFCO>(); endPts = FindByRole(cylinderMga, "CylinderEnd"); List <MgaFCO> radiusPts = new List <MgaFCO>(); radiusPts = FindByRole(cylinderMga, "CylinderRadius"); if (startPts.Count != 1 || endPts.Count != 1 || radiusPts.Count != 1) { Logger.Instance.AddLogMessage(String.Format("Cylinder geometry must contain 1 CylinderStart, 1 CylinderEnd, and 1 CylinderRadius: {0}", cylinder.ToHyperLink()), Severity.Error); return(false); } CyPhy.Point startPt = CyPhyClasses.Point.Cast(startPts[0]); if (!CreateFeatureFromPoint(startPt, featureList)) { Logger.Instance.AddLogMessage(String.Format("Cylinder geometry's CylinderStart point must connect to a Point datum inside a CADModel: {0}", cylinder.ToHyperLink()), Severity.Error); return(false); } CyPhy.Point endPt = CyPhyClasses.Point.Cast(endPts[0]); if (!CreateFeatureFromPoint(endPt, featureList)) { Logger.Instance.AddLogMessage(String.Format("Cylinder geometry's CylinderEnd point must connect to a Point datum inside a CADModel: {0}", cylinder.ToHyperLink()), Severity.Error); return(false); } CyPhy.Point radiusPt = CyPhyClasses.Point.Cast(radiusPts[0]); if (!CreateFeatureFromPoint(radiusPt, featureList)) { Logger.Instance.AddLogMessage(String.Format("Cylinder geometry's CylinderRadius point must connect to a Point datum inside a CADModel: {0}", cylinder.ToHyperLink()), Severity.Error); return(false); } } else { status = false; } //var height = (extrusion.Impl as MgaModel).ChildFCOs.Cast<MgaFCO>().Where(x => x.MetaRole.Name == "ExtrusionHeight").FirstOrDefault(); return(status); }