algorithmic modeling for Rhino
I am getting 'An error occured in the display pipeline' error being thrown. I am very confused as I am not writing anything to the display pipeline. My worry is that I am modifying something that grasshopper later uses but for the life of me cannot see the problem.
Component
using System;
using System.Collections.Generic;
using Grasshopper.Kernel;
using Rhino.Geometry;
namespace Load_Take_Down_Tool.Components
{
// This componenet takes care of creating ordered lists to pass to the column component
// Searches for points within tributary areas
public class Column_Organiser : GH_Component
{
/// <summary>
/// Initializes a new instance of the Column_Organiser class.
/// </summary>
public Column_Organiser()
: base("Column Organiser", "CO",
"Orders lists of points and areas",
"Load Take Down Tool", "Pre-Processing")
{
}
/// <summary>
/// Registers all the input parameters for this component.
/// </summary>
protected override void RegisterInputParams(GH_Component.GH_InputParamManager pManager)
{
pManager.AddPointParameter("Column", "C", "Unsorted points at location of column (required)", GH_ParamAccess.list);
pManager.AddBrepParameter("Tributary Area", "T", "Unsorted tributary areas for column (required)", GH_ParamAccess.list);
}
/// <summary>
/// Registers all the output parameters for this component.
/// </summary>
protected override void RegisterOutputParams(GH_Component.GH_OutputParamManager pManager)
{
pManager.AddPointParameter("Column", "C", "Sorted points at location of column", GH_ParamAccess.list);
pManager.AddBrepParameter("Tributary Area", "T", "Sorted tributary areas for column", GH_ParamAccess.list);
pManager.AddPointParameter("Failing Points", "FP", "Points that are not within any tributary area", GH_ParamAccess.list);
}
/// <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)
{
//Declare lists to hold data
//uo = un-ordered
//o = ordered
List<Point3d> uocolumnpoints = new List<Point3d>();
List<Brep> uotribareas = new List<Brep>();
List<Point3d> failpoints = new List<Point3d>();
//Get data from inputs
if (!DA.GetDataList(0, uocolumnpoints))
return;
if (!DA.GetDataList(1, uotribareas))
return;
//Error if number of points and areas are not equal
if (uocolumnpoints.Count != uotribareas.Count)
{
AddRuntimeMessage(GH_RuntimeMessageLevel.Warning, "Unequal number of columns and tributary areas");
return;
}
List<Point3d> ocolumnpoints = new List<Point3d>();
List<Curve> ocurves = new List<Curve>();
List<Brep> otribareas = new List<Brep>();
double m_tol = 0.001;
string unitSystem = Rhino.RhinoDoc.ActiveDoc.GetUnitSystemName(true, true, true, true);
if (unitSystem == "m")
m_tol = 0.000001;
if (unitSystem == "mm")
m_tol = 0.011;
PointsInsideCurves pic = new PointsInsideCurves();
try
{
pic = new PointsInsideCurves(uocolumnpoints, uotribareas, m_tol);
}
catch (Exception ex)
{
AddRuntimeMessage(GH_RuntimeMessageLevel.Remark, ex.Message);
}
failpoints = pic.FailedPoints;
ocurves = pic.OrganisedCurves;
if (failpoints.Count > 0)
AddRuntimeMessage(GH_RuntimeMessageLevel.Remark, "Some point(s) did not lie within a tributary area, were on the boundary/tolerance limit of of a tributary area, or multiple points were within the same tributary area. See output FP for the points that have failed");
foreach (Curve c in ocurves)
{
Brep b = Brep.TryConvertBrep(c);
otribareas.Add(b);
}
//Pass data to outputs
DA.SetDataList(0, ocolumnpoints);
DA.SetDataList(1, otribareas);
DA.SetDataList(2, failpoints);
}
//Grasshopper icon for component
protected override System.Drawing.Bitmap Icon
{
get
{
return Properties.Resources.ColumnOrganiser;
}
}
/// <summary>
/// Gets the unique ID for this component. Do not change this ID after release.
/// </summary>
public override Guid ComponentGuid
{
get { return new Guid("{3259e465-5400-48e3-907b-fcb7455b12aa}"); }
}
}
}
Helper class
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Rhino.Geometry;
namespace Load_Take_Down_Tool
{
class PointsInsideCurves
{
private List<Point3d> Points { get; set; }
private List<Curve> ClosedCurves { get; set; }
private double Tolerance { get; set; }
public List<Point3d> FailedPoints { get; set; }
public List<Curve> OrganisedCurves { get; set; }
public PointsInsideCurves()
{
}
public PointsInsideCurves(List<Point3d> Points, List<Curve> ClosedCurves, double Tolerance)
{
this.Points = Points;
this.ClosedCurves = ClosedCurves;
this.Tolerance = Tolerance;
Evaluate();
}
public PointsInsideCurves(List<Point3d> Points, List<Brep> ClosedBreps, double Tolerance)
{
this.Points = Points;
this.Tolerance = Tolerance;
List<Curve> Curves = new List<Curve>();
foreach (Brep b in ClosedBreps)
{
Curve[] c = b.DuplicateEdgeCurves();
c = Curve.JoinCurves(c, Tolerance);
Curves.Add(c[0]);
}
this.ClosedCurves = Curves;
Evaluate();
}
private void Evaluate()
{
//Sorts in order of points
//Naive implementation
//Can update to KD tree if necessary
List<Curve> OrderedCurves = new List<Curve>();
List<Point3d> fPoints = new List<Point3d>();
//Have to duplicate the input list of curves to modify as we go
List<Curve> CCDup = this.ClosedCurves;
foreach (Point3d Point in this.Points)
{
//Backwards loop to allow removal
bool assigned = false;
for (int i = CCDup.Count - 1; i >= 0; i--)
{
if (CCDup[i].IsClosed == false)
{
throw new Exception("Curve is not closed");
}
if (CCDup[i].Contains(Point) == PointContainment.Inside)
{
OrderedCurves.Add(CCDup[i]);
CCDup.RemoveAt(i);
assigned = true;
break;
}
}
//If point not within any of the given breps put null in the list
if (assigned == false)
{
OrderedCurves.Add(null);
fPoints.Add(Point);
}
}
this.FailedPoints = fPoints;
this.OrganisedCurves = OrderedCurves;
}
}
}
Tags:
Thought I would upload the files that I have pasted above to make anyone who might wish to help me life easier!
I think this is actually related to the other problem I was bumping into, please see this thread: http://www.grasshopper3d.com/forum/topics/document-collected-exception
Welcome to
Grasshopper
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
Added by Parametric House 0 Comments 0 Likes
© 2024 Created by Scott Davidson. Powered by