/// <summary> /// This is the method that actually does the work. /// </summary> /// <param name="DA">The DA object is used to retrieve from inputs and store in outputs.</param> protected override void SolveInstance(IGH_DataAccess DA) { List<Mesh> meshes = new List<Mesh>(); if (!DA.GetDataList(0, meshes)) return; DA.SetDataList(0, meshes.Select(a => ParasiteConversion.ToParasiteType(a)).ToList()); }
public DataContainer CollectData(List <List <object> > dataFromApp) { DataContainer dataContainer = new DataContainer(dataFromApp.Count); for (int i = 0; i < dataFromApp.Count; i++) { DataNode <ParasiteAbstractObject>[] nodeArray = new DataNode <ParasiteAbstractObject> [dataFromApp[i].Count]; for (int j = 0; j < dataFromApp[i].Count; j++) { if (dataFromApp[i][j] == null) { continue; } else if (dataFromApp[i][j] is ParasiteObject pObj) { if (pObj.Data is Solid) { Solid s = pObj.Data as Solid; Parasite_BrepSolid pSolid = ParasiteConversion.ToParasiteType(s); pObj.Data = pSolid; nodeArray[j] = new DataNode <ParasiteAbstractObject>(pObj); } } else if (dataFromApp[i][j] is Point p) { Parasite_Point3d point = ParasiteConversion.ToParasiteType(p); nodeArray[j] = new DataNode <ParasiteAbstractObject>(point); } else if (dataFromApp[i][j] is Sphere sph) { Parasite_Sphere s = new Parasite_Sphere(ParasiteConversion.ToParasiteType(sph.CenterPoint), sph.Radius); nodeArray[j] = new DataNode <ParasiteAbstractObject>(s); } else if (dataFromApp[i][j] is Solid solid) { Parasite_BrepSolid pSolid = ParasiteConversion.ToParasiteType(solid); nodeArray[j] = new DataNode <ParasiteAbstractObject>(pSolid); } //else // throw new ParasiteNotImplementedExceptions("Object type not implemented yet!"); } dataContainer.Data[i] = nodeArray; } return(dataContainer); }
public DataContainer CollectData(List <List <object> > dataFromApp) { DataContainer dataContainer = new DataContainer(dataFromApp.Count); for (int i = 0; i < dataFromApp.Count; i++) { DataNode <ParasiteAbstractObject>[] nodeArray = new DataNode <ParasiteAbstractObject> [dataFromApp[i].Count]; for (int j = 0; j < dataFromApp[i].Count; j++) { if (dataFromApp[i][j] is GH_Point p) { if (p.CastTo(out Point3d pt)) { Parasite_Point3d point = ParasiteConversion.ToParasiteType(pt); nodeArray[j] = new DataNode <ParasiteAbstractObject>(point); } } else if (dataFromApp[i][j] is GH_Surface srf) { Brep brep = srf.Value; if (brep.IsSurface) { BrepSurfaceList srfList = brep.Surfaces; if (srfList.Count == 1) { Parasite_NurbsSurface paraSrf = ParasiteConversion.ToParasiteType(srfList[0].ToNurbsSurface()); nodeArray[j] = new DataNode <ParasiteAbstractObject>(paraSrf); } } } else if (dataFromApp[i][j] is GH_Brep b) { Brep brep = b.Value; if (brep.IsSurface && !brep.IsSolid) { Parasite_BrepSurface parasiteBrepSrf = ParasiteConversion.ToParasiteType(brep); nodeArray[j] = new DataNode <ParasiteAbstractObject>(parasiteBrepSrf); } if (!brep.IsSurface && brep.IsSolid) { // dataContainer.Data.Add(new Parasite_BrepSolid(brep)); } } else if (dataFromApp[i][j] is GH_Mesh m) { Rhino.Geometry.Mesh mesh = m.Value; Parasite_Mesh parasiteMesh = ParasiteConversion.ToParasiteType(mesh); nodeArray[j] = new DataNode <ParasiteAbstractObject>(parasiteMesh); } /// CONNVERT GH_CURVE TO PARASITE CURVE else if (dataFromApp[i][j] is GH_Curve curve) { Rhino.Geometry.NurbsCurve nc = curve.Value as NurbsCurve; if (nc.IsArc()) { throw new ParasiteNotImplementedExceptions("Object type not implemented yet!"); } else if (nc.IsCircle()) { throw new ParasiteNotImplementedExceptions("Object type not implemented yet!"); } else if (nc.IsEllipse()) { throw new ParasiteNotImplementedExceptions("Object type not implemented yet!"); } else if (nc.IsPolyline()) { throw new ParasiteNotImplementedExceptions("Object type not implemented yet!"); } else { Parasite_NurbsCurve parasiteNurbsCurve = ParasiteConversion.ToParasiteType(nc); nodeArray[j] = new DataNode <ParasiteAbstractObject>(parasiteNurbsCurve); } } else { throw new ParasiteNotImplementedExceptions("Type conversion not implemented yet!"); } } dataContainer.Data[i] = nodeArray; } return(dataContainer); }