Site Tools


Differences

This shows you the differences between two versions of the page.

Link to this comparison view

developer:rhinocommonsamples:circlecenter [2015/09/14]
developer:rhinocommonsamples:circlecenter [2020/08/14] (current)
Line 1: Line 1:
 +===== Sample: Find Circles and their centers =====
 +
 +===== C# =====
 +<code c#>
 +public static Rhino.Commands.Result CircleCenter(Rhino.RhinoDoc doc)
 +{
 +  Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject();
 +  go.SetCommandPrompt("Select objects");
 +  go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve;
 +  go.GeometryAttributeFilter = Rhino.Input.Custom.GeometryAttributeFilter.ClosedCurve;
 +  go.GetMultiple(1, 0);
 +  if( go.CommandResult() != Rhino.Commands.Result.Success )
 +    return go.CommandResult();
 +
 +  Rhino.DocObjects.ObjRef[] objrefs = go.Objects();
 +  if( objrefs==null )
 +    return Rhino.Commands.Result.Nothing;
 +
 +  double tolerance = doc.ModelAbsoluteTolerance;
 +  for( int i=0; i<objrefs.Length; i++ )
 +  {
 +    // get the curve geometry
 +    Rhino.Geometry.Curve curve = objrefs[i].Curve();
 +    if( curve==null )
 +      continue;
 +    Rhino.Geometry.Circle circle;
 +    if( curve.TryGetCircle(out circle, tolerance) )
 +    {
 +      Rhino.RhinoApp.WriteLine("Circle{0}: center = {1}", i+1, circle.Center);
 +    }
 +  }
 +  return Rhino.Commands.Result.Success;
 +}
 +</code>
 +===== VB.NET =====
 +<code vb>
 +Public Shared Function CircleCenter(ByVal doc As Rhino.RhinoDoc) As Rhino.Commands.Result
 +  Dim go As New Rhino.Input.Custom.GetObject()
 +  go.SetCommandPrompt("Select objects")
 +  go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve
 +  go.GeometryAttributeFilter = Rhino.Input.[Custom].GeometryAttributeFilter.ClosedCurve
 +  go.GetMultiple(1, 0)
 +  If go.CommandResult() <> Rhino.Commands.Result.Success Then
 +    Return go.CommandResult()
 +  End If
 +
 +  Dim objrefs As Rhino.DocObjects.ObjRef() = go.Objects()
 +  If objrefs Is Nothing Then
 +    Return Rhino.Commands.Result.[Nothing]
 +  End If
 +
 +  Dim tolerance As Double = doc.ModelAbsoluteTolerance
 +  For i As Integer = 0 To objrefs.Length - 1
 +    ' get the curve geometry
 +    Dim curve As Rhino.Geometry.Curve = objrefs(i).Curve()
 +    If curve Is Nothing Then
 +      Continue For
 +    End If
 +    Dim circle As Rhino.Geometry.Circle
 +    If curve.TryGetCircle(circle, tolerance) Then
 +      Rhino.RhinoApp.WriteLine("Circle{0}: center = {1}", i + 1, circle.Center)
 +    End If
 +  Next
 +  Return Rhino.Commands.Result.Success
 +End Function
 +</code>
 +===== Python =====
 +<code python>
 +import Rhino
 +import scriptcontext
 +
 +def CircleCenter():
 +    go = Rhino.Input.Custom.GetObject()
 +    go.SetCommandPrompt("Select objects")
 +    go.GeometryFilter = Rhino.DocObjects.ObjectType.Curve
 +    go.GeometryAttributeFilter = Rhino.Input.Custom.GeometryAttributeFilter.ClosedCurve
 +    go.GetMultiple(1, 0)
 +    if go.CommandResult()!=Rhino.Commands.Result.Success:
 +        return go.CommandResult()
 +
 +    objrefs = go.Objects()
 +    if not objrefs: return Rhino.Commands.Result.Nothing
 +
 +    tolerance = scriptcontext.doc.ModelAbsoluteTolerance
 +    for i, objref in enumerate(objrefs):
 +        # get the curve geometry
 +        curve = objref.Curve()
 +        if not curve: continue
 +        rc, circle = curve.TryGetCircle( tolerance )
 +        if rc:
 +            print "Circle", i+1, ": center = ", circle.Center
 +    return Rhino.Commands.Result.Success
 +
 +if __name__=="__main__":
 +    CircleCenter()
 +</code>
 +
 +{{tag>Developer rhinocommon}}