McNeel Wiki
How To: Reparameterize a Curve
edit · print · help · all topics
Main Pages

AccuRender

Bongo

Brazil r/s

Developer

Flamingo

Penguin

Rhino Blogs

Rhino

Rhino Labs

Search

Languages

Česky

Deutsch

English

Español

Français

Italiano

Polish

日本語

한국어

中文(繁體)

 
.
DeveloperC++, .NET
SummaryDemonstrates how to reparameterize a curve objeect.

The following is a demonstration of how to how to reparameterize a curve objeect using the Rhino SDK.

C++

  CRhinoCommand::result CCommandTest::RunCommand(const CRhinoCommandContext& context)
  {
    CRhinoCommand::result rc = CRhinoCommand::success;


    CRhinoGetObject go;
    go.SetCommandPrompt( L"Select curve to reparameterize" );
    go.SetGeometryFilter( CRhinoGetObject::curve_object );
    go.GetObjects( 1, 1 );
    rc = go.CommandResult();
    if( rc != CRhinoCommand::success )
      return rc;


    CRhinoObjRef& objref = go.Object(0);
    const ON_Curve* pC = objref.Curve();
    if( !pC )
      return CRhinoCommand::failure;


    double s0, s1;
    pC->GetDomain( &s0, &s1 );


    CRhinoGetNumber gn;
    gn.SetCommandPrompt( L"Domain start" );
    gn.SetDefaultNumber( s0 ) ;
    gn.AcceptNothing();
    gn.GetNumber();
    rc = gn.CommandResult();
    if( rc != CRhinoCommand::success )
      return rc;


    double t0 = gn.Number();


    gn.SetCommandPrompt( L"Domain end" );
    gn.SetDefaultNumber( s1 );
    gn.SetLowerLimit( t0, TRUE );
    gn.AcceptNothing();
    gn.GetNumber();
    rc = gn.CommandResult();
    if( rc != CRhinoCommand::success )
      return rc;


    double t1 = gn.Number();


    if( s0 == t0 && s1 == t1 )
      return CRhinoCommand::nothing;


    ON_Curve *pNC = pC->DuplicateCurve();
    if( pNC )
    {
      pNC->SetDomain( t0, t1 );
      CRhinoCurveObject* obj = new CRhinoCurveObject();
      if( obj )
      {
        obj->SetCurve( pNC );
        context.m_doc.ReplaceObject( objref, obj );
        context.m_doc.Redraw();
     }
     else
       rc = CRhinoCommand::failure;
    }
    else
      rc = CRhinoCommand::failure;


    return rc;
  }

VB.NET (Rhino 4)

  Public Overrides Function RunCommand(ByVal context As IRhinoCommandContext) _
    As IRhinoCommand.result


    Dim rc As IRhinoCommand.result = IRhinoCommand.result.success
    Dim go As New MRhinoGetObject()
    go.SetCommandPrompt("Select curve to reparameterize")
    go.SetGeometryFilter(IRhinoGetObject.GEOMETRY_TYPE_FILTER.curve_object)
    go.GetObjects(1, 1)
    rc = go.CommandResult()
    If (rc <> IRhinoCommand.result.success) Then Return rc


    Dim objref As MRhinoObjRef = go.Object(0)
    Dim pC As IOnCurve = objref.Curve()
    If (pC Is Nothing) Then Return IRhinoCommand.result.failure


    Dim s0 As Double
    Dim s1 As Double
    pC.GetDomain(s0, s1)


    Dim gn As New MRhinoGetNumber()
    gn.SetCommandPrompt("Domain start")
    gn.SetDefaultNumber(s0)
    gn.AcceptNothing()
    gn.GetNumber()
    rc = gn.CommandResult()
    If (rc <> IRhinoCommand.result.success) Then Return rc
    Dim t0 As Double = gn.Number()


    gn.SetCommandPrompt("Domain end")
    gn.SetDefaultNumber(s1)
    gn.SetLowerLimit(t0, True)
    gn.AcceptNothing()
    gn.GetNumber()
    rc = gn.CommandResult()
    If (rc <> IRhinoCommand.result.success) Then Return rc
    Dim t1 As Double = gn.Number()


    If (s0 = t0 And s1 = t1) Then Return IRhinoCommand.result.nothing


    Dim pNC As OnCurve = pC.DuplicateCurve()
    If (pNC IsNot Nothing) Then
      pNC.SetDomain(t0, t1)
      Dim obj As New MRhinoCurveObject
      obj.SetCurve(pNC)
      context.m_doc.ReplaceObject(objref, obj)
      context.m_doc.Redraw()
    Else
      rc = IRhinoCommand.result.failure
    End If
    Return rc
  End Function

C# (Rhino 4)

  public override IRhinoCommand.result RunCommand(IRhinoCommandContext context)
  {
    IRhinoCommand.result rc = IRhinoCommand.result.success;
    MRhinoGetObject go = new MRhinoGetObject();
    go.SetCommandPrompt("Select curve to reparameterize");
    go.SetGeometryFilter(IRhinoGetObject.GEOMETRY_TYPE_FILTER.curve_object);
    go.GetObjects(1, 1);
    rc = go.CommandResult();
    if(rc != IRhinoCommand.result.success)
      return rc;


    MRhinoObjRef objref = go.Object(0);
    IOnCurve pC = objref.Curve();
    if(pC == null)
      return IRhinoCommand.result.failure;


    double s0=0, s1=0;
    pC.GetDomain(ref s0, ref s1);


    MRhinoGetNumber gn = new MRhinoGetNumber();
    gn.SetCommandPrompt("Domain start");
    gn.SetDefaultNumber(s0);
    gn.AcceptNothing();
    gn.GetNumber();
    rc = gn.CommandResult();
    if(rc != IRhinoCommand.result.success)
      return rc;
    double t0 = gn.Number();


    gn.SetCommandPrompt("Domain end");
    gn.SetDefaultNumber(s1);
    gn.SetLowerLimit(t0, true);
    gn.AcceptNothing();
    gn.GetNumber();
    rc = gn.CommandResult();
    if(rc != IRhinoCommand.result.success)
      return rc;
    double t1 = gn.Number();


    if(s0 == t0 && s1 == t1)
      return IRhinoCommand.result.nothing;


    OnCurve pNC = pC.DuplicateCurve();
    if(pNC != null)
    {
      pNC.SetDomain(t0, t1);
      MRhinoCurveObject obj = new MRhinoCurveObject();
      obj.SetCurve(pNC);
      context.m_doc.ReplaceObject(objref, obj);
      context.m_doc.Redraw();
    }
    else
      rc = IRhinoCommand.result.failure;


    return rc;
  }
rename · changes · history · subscriptions · lost and found · references · file upload