Introduction

The DgnPlatformNet API helps developers wanting to create custom applications for MicroStation® from Bentley Systems. We create a MicroStation application as a DLL, written using C# and built with the Microsoft tools provided with Visual Studio.

Bentley Geometry CurveVector

CurveVector is a .NET class in the Bentley Geometry API. It has many uses, particularly when assembling a collection of CurvePrimitive objects.

CurveVector.CloneWithFillets

I was interested in CurveVector.CloneWithFillets, it turns out for the wrong reasons. After a hint by Brien Bastings, I learned a good reason to use that method. Brien wrote: Try CloneWithFillets on something like a rectangle. The curve primitives in your path should be ordered head to tail (gaps are ok, primitives & segments are trimmed/extended as needed). The angle between their start and end tangents at the point of intersection should be > 0 and < π. The fillet radius also needs to be small enough to not fully consume any segment.

CurveVector.CloneWithFillets Example

Taking Brien's advice, I wrote this example to illustrate the use of CurveVector.CloneWithFillets …

Filleted Rectangle
using Bentley.GeometryNET;
using Bentley.DgnPlatformNET;
using Bentley.DgnPlatformNET.Elements;
using Bentley.MstnPlatformNET;
void CreateFilletedRectangle ()
{
  DgnModel model = Session.Instance.GetActiveDgnModel();
  double uors = model.GetModelInfo().UorPerMaster;
  //  Create four line segments
  LineElement l1 = MakeLineElement(uors, 0.0, 0.0, 10.0, 0.0);
  l1.AddToModel();
  LineElement l2 = MakeLineElement(uors, 10.0, 0.0, 10.0, 5.0);
  l2.AddToModel();
  LineElement l3 = MakeLineElement(uors, 10.0, 5.0, 0.0, 5.0);
  l3.AddToModel();
  LineElement l4 = MakeLineElement(uors, 0.0, 5.0, 0.0, .0);
  l4.AddToModel();
  // Add lines to a CurveVector
  CurveVector result = new CurveVector(CurveVector.BoundaryType.Outer);
  result.Add(l1.GetCurveVector().GetPrimitive(0));
  result.Add(l2.GetCurveVector().GetPrimitive(0));
  result.Add(l3.GetCurveVector().GetPrimitive(0));
  result.Add(l4.GetCurveVector().GetPrimitive(0));
  //  Extract a filletted version of the CurveVector
  CurveVector fillet = result.CloneWithFillets(2 * uors);
  ComplexStringElement filletElement = new ComplexStringElement(model, null);
  filletElement.SetCurveVector(fillet);
  filletElement.AddToModel();
}
LineElement MakeLineElement (double uors, double x0, double y0, double x1, double y1)
{
  DSegment3d s = new DSegment3d(new DPoint3d(x0 * uors, y0 * uors), new DPoint3d(x1 * uors, y1 * uors));
  return new LineElement(Session.Instance.GetActiveDgnModel(), null, s);
}

Questions

Post questions about C# and the DgnPlatformNet API to the MicroStation Programming Forum.