I started comparing the two languages C# and Python and there is something strange.

How does Python know the type of variable:

**crv = objref.Curve()**

while in C# we properly specified it;

**Rhino.Geometry.Curve crv = objref.Curve();**

Why do we need to use the (dot) .Curve as we already used the Curve filter before.

**C# - version**

using Rhino.DocObjects;

```
partial class Examples
{
public static Rhino.Commands.Result DivideByLengthPoints(Rhino.RhinoDoc doc)
{
const ObjectType filter = Rhino.DocObjects.ObjectType.Curve;
Rhino.DocObjects.ObjRef objref;
Rhino.Commands.Result rc = Rhino.Input.RhinoGet.GetOneObject("Select curve to divide", false, filter, out objref);
if (rc != Rhino.Commands.Result.Success || objref == null)
return rc;
**Rhino.Geometry.Curve crv = objref.Curve();**
if (crv == null || crv.IsShort(Rhino.RhinoMath.ZeroTolerance))
return Rhino.Commands.Result.Failure;
double crv_length = crv.GetLength();
string s = string.Format("Curve length is {0:f3}. Segment length", crv_length);
double seg_length = crv_length / 2.0;
rc = Rhino.Input.RhinoGet.GetNumber(s, false, ref seg_length, 0, crv_length);
if (rc != Rhino.Commands.Result.Success)
return rc;
Rhino.Geometry.Point3d[] points;
crv.DivideByLength(seg_length, true, out points);
if (points == null)
return Rhino.Commands.Result.Failure;
foreach (Rhino.Geometry.Point3d point in points)
doc.Objects.AddPoint(point);
doc.Views.Redraw();
return Rhino.Commands.Result.Success;
}
}
```

**Python - version**

import Rhino

import scriptcontext

```
def DivideByLengthPoints():
filter = Rhino.DocObjects.ObjectType.Curve
rc, objref = Rhino.Input.RhinoGet.GetOneObject("Select curve to divide", False, filter)
if not objref or rc!=Rhino.Commands.Result.Success: return rc
**crv = objref.Curve()**
if not crv or crv.IsShort(Rhino.RhinoMath.ZeroTolerance):
return Rhino.Commands.Result.Failure
crv_length = crv.GetLength()
s = "Curve length is {0:.3f}. Segment length".format(crv_length)
seg_length = crv_length / 2.0
rc, length = Rhino.Input.RhinoGet.GetNumber(s, False, seg_length, 0, crv_length)
if rc!=Rhino.Commands.Result.Success: return rc
t_vals = crv.DivideByLength(length, True)
if not t_vals:
return Rhino.Commands.Result.Failure
[scriptcontext.doc.Objects.AddPoint(crv.PointAt(t)) for t in t_vals]
scriptcontext.doc.Views.Redraw()
return Rhino.Commands.Result.Success
if __name__=="__main__":
DivideByLengthPoints()
```