McNeel Wiki
Replacing a Hatch Object's Pattern
edit · print · help · all topics
Main Pages

AccuRender

Bongo

Brazil r/s

Developer

Flamingo

Penguin

Rhino Blogs

Rhino

Search

Languages

Česky

Deutsch

English

Español

Français

Italiano

Polish

日本語

한국어

中文(繁體)

 
.
DeveloperC++, .NET
SummaryDemonstrates how to replace a Hatch Object's pattern using the Rhino SDK.

Question

Is it possible to replace the pattern of existing hatch objects without just deleting them and rehatching?

Answer

Yes it is possible. The following code demonstrates this:

  CRhinoCommand::result CCommandTest::RunCommand( const CRhinoCommandContext& context )
  {
    CRhinoGetObject go;
    go.SetCommandPrompt( L"Select hatches to replace pattern" );
    go.SetGeometryFilter( CRhinoGetObject::hatch_object );
    go.GetObjects( 1, 0 );
    if( go.CommandResult() != success )
      return go.CommandResult();


    CRhinoGetString gs;
    gs.SetCommandPrompt( L"Name of replacement hatch pattern" );
    gs.GetString();
    if( gs.CommandResult() != success )
      return gs.CommandResult();


    ON_wString pattern_name = gs.String();
    pattern_name.TrimLeftAndRight();
    if( pattern_name.IsEmpty() )
      return nothing;


    int hatch_index = context.m_doc.m_hatchpattern_table.FindHatchPattern( pattern_name );
    if( hatch_index < 0 )
    {
      RhinoApp().Print( L"Specified hatch pattern not found in the document.\n" );
      return nothing;
    }


    int i, replaced = 0;
    for( i = 0; i < go.ObjectCount(); i++ )
    {
      const CRhinoHatch* hatch_obj = CRhinoHatch::Cast( go.Object(i).Object() );
      if( 0 == hatch_obj )
        continue;


      if( hatch_index == hatch_obj->PatternIndex() )
        continue;


      const ON_Hatch* hatch = hatch_obj->Hatch();
      if( 0 == hatch )
        continue;


      ON_Hatch* dup_hatch = hatch->DuplicateHatch();
      if( 0 == dup_hatch )
        continue;


      dup_hatch->SetPatternIndex( hatch_index );


      CRhinoHatch* dup_obj = hatch_obj->Duplicate();
      if( 0 == dup_obj )
      {
        delete dup_hatch;
        continue;
      }


      dup_obj->SetHatch( dup_hatch );
      if( !context.m_doc.ReplaceObject(CRhinoObjRef(hatch_obj), dup_obj) )
      {
        delete dup_obj;
        continue;
      }


      replaced++;
    }


    if( replaced > 0 )
    {
      context.m_doc.Redraw();
      if( 1 == replaced )
        RhinoApp().Print( L"1 hatch pattern replaced.\n" );
      else
        RhinoApp().Print( L"%d hatch patterns replaced.\n", replaced );
    }
    else
      RhinoApp().Print( L"0 hatch patterns replaced.\n" );


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