10-07-2021, 06:40 PM
I tried to create ~50.000 lines with different colors. Worked, but it's very slow (displaying, rotating, zooming)
with Polyline it works fine.
Where I'm going wrong?
// with individual color of each line -> slow
Model3DGroup model = new Model3DGroup();
var lineStartPos = _displayData[0];
for (int i = 1; i < _displayData.Count; i++)
{
var lineEndPos = _displayData[i];
var line = Line3DFactory.CreateLine3D(new Point3D(lineStartPos.XPos, lineStartPos.YPos, lineStartPos.ZPos),
new Point3D(lineEndPos.XPos, lineEndPos.YPos, lineEndPos.ZPos), 2, lineEndPos.Color,
LineCap.Flat, LineCap.Flat, MainViewport);
model.Children.Add(line);
lineStartPos = lineEndPos;
}
CurveModelVisual.Content = model;
// with same color for each line -> fast
//List<Point3D> allPositions = new List<Point3D>();
//foreach (var positionData in _allSpheresData)
//{
// allPositions.Add(positionData.Position);
//}
//BezierCurve bezierCurve = BezierCurve.CreateFromCurvePositions(allPositions);
//Point3DCollection curvePoints = bezierCurve.CreateBezierCurve(positionsPerSegment: 1);
//Model3D curveModel = Line3DFactory.CreatePolyLine3D(curvePoints, thickness: 2, color: Colors.Blue, isClosed: false, startLineCap: LineCap.Flat, endLineCap: LineCap.Flat, parentViewport3D: MainViewport);
//CurveModelVisual.Content = curveModel;
with Polyline it works fine.
Where I'm going wrong?
// with individual color of each line -> slow
Model3DGroup model = new Model3DGroup();
var lineStartPos = _displayData[0];
for (int i = 1; i < _displayData.Count; i++)
{
var lineEndPos = _displayData[i];
var line = Line3DFactory.CreateLine3D(new Point3D(lineStartPos.XPos, lineStartPos.YPos, lineStartPos.ZPos),
new Point3D(lineEndPos.XPos, lineEndPos.YPos, lineEndPos.ZPos), 2, lineEndPos.Color,
LineCap.Flat, LineCap.Flat, MainViewport);
model.Children.Add(line);
lineStartPos = lineEndPos;
}
CurveModelVisual.Content = model;
// with same color for each line -> fast
//List<Point3D> allPositions = new List<Point3D>();
//foreach (var positionData in _allSpheresData)
//{
// allPositions.Add(positionData.Position);
//}
//BezierCurve bezierCurve = BezierCurve.CreateFromCurvePositions(allPositions);
//Point3DCollection curvePoints = bezierCurve.CreateBezierCurve(positionsPerSegment: 1);
//Model3D curveModel = Line3DFactory.CreatePolyLine3D(curvePoints, thickness: 2, color: Colors.Blue, isClosed: false, startLineCap: LineCap.Flat, endLineCap: LineCap.Flat, parentViewport3D: MainViewport);
//CurveModelVisual.Content = curveModel;