CRhinoCommand::result CCommandSampleOrientOnCrv::RunCommand( const CRhinoCommandContext& context ) { CRhinoCommand::result rc = CRhinoCommand::success; CRhinoXformObjectList object_list; rc = SelectObjects( object_list ); if( rc != CRhinoCommand::success ) return rc; ON_Plane base_plane; rc = GetBasePlane( base_plane ); if( rc != CRhinoCommand::success ) return rc; const ON_Curve* path_curve = NULL; rc = GetPathCurve( path_curve ); if( rc != CRhinoCommand::success ) return rc; BOOL bCopy = FALSE; COrientOnCrvXform get; get.SetCommandPrompt( L"New base point on curve" ); get.AddCommandOptionToggle( RHCMDOPTNAME(L"Copy"), RHCMDOPTVALUE(L"No"), RHCMDOPTVALUE(L"Yes"), bCopy, &bCopy ); get.AddCommandOptionToggle( RHCMDOPTNAME(L"Perpendicular"), RHCMDOPTVALUE(L"No"), RHCMDOPTVALUE(L"Yes"), m_perp_mode, &m_perp_mode ); get.AppendObjects( object_list ); get.Constrain( *path_curve ); get.AcceptNothing(); get.SetPathCurve( path_curve ); get.SetBasePlane( base_plane ); for(;;) { get.EnablePerpMode( m_perp_mode ); CRhinoGet::result res = get.GetXform(); if( res == CRhinoGet::point ) { ON_Xform xform; if( get.CalculateTransform(get.View()->Viewport(), get.Point(), xform) ) { TransformObjects( context.m_doc, object_list, xform, TRUE ); context.m_doc.Redraw(); } if( bCopy ) continue; break; } else if( res == CRhinoGet::option ) continue; else if( res == CRhinoGet::nothing ) return CRhinoCommand::nothing; else return CRhinoCommand::cancel; } return CRhinoCommand::success; }
CRhinoCommand::result CCommandSampleMeshDir::RunCommand( const CRhinoCommandContext& context ) { CRhinoGetObject go; go.SetGeometryFilter( CRhinoObject::mesh_object | CRhinoObject::surface_object | CRhinoObject::polysrf_object | CRhinoObject::instance_reference ); go.SetCommandPrompt( L"Select mesh, surface, or polysurface objects" ); go.GetObjects(1,0); if( go.Result() != CRhinoGet::object ) return CRhinoCommand::cancel; int i = 0; ON_SimpleArray<const CRhinoObject*> objects( go.ObjectCount() ); for( i = 0; i < go.ObjectCount(); i++ ) objects.Append( go.Object(i).Object() ); ON_ClassArray<CRhinoObjRef> render_meshes; int count = RhinoGetRenderMeshes( objects, render_meshes, true, false ); if( count > 0 ) { CMeshDirDrawCallback callback; callback.m_mesh_list.Reserve( count ); for( i = 0; i < render_meshes.Count(); i++ ) { const ON_Mesh* mesh = render_meshes[i].Mesh(); if( mesh ) callback.m_mesh_list.AppendNew().SetMesh( mesh ); } CRhinoGetOption go; go.SetCommandPrompt( L"Press Enter when done" ); go.AcceptNothing(); go.AddCommandOptionToggle( RHCMDOPTNAME(L"FaceNormals"), RHCMDOPTVALUE(L"No"), RHCMDOPTVALUE(L"Yes"), m_draw_face_normals, &m_draw_face_normals ); go.AddCommandOptionToggle( RHCMDOPTNAME(L"VertexNormals"), RHCMDOPTVALUE(L"No"), RHCMDOPTVALUE(L"Yes"), m_draw_vertex_normals, &m_draw_vertex_normals ); CRhinoGet::result res = CRhinoGet::nothing; for( ;; ) { callback.m_draw_face_normals = m_draw_face_normals; callback.m_draw_vertex_normals = m_draw_vertex_normals; CRhinoView::AddDrawCallback( &callback ); context.m_doc.Redraw( CRhinoView::regenerate_display_hint ); res = go.GetOption(); CRhinoView::RemoveDrawCallback( &callback ); if( res == CRhinoGet::option ) continue; break; } } context.m_doc.Redraw( CRhinoView::regenerate_display_hint ); return CRhinoCommand::success; }
CRhinoCommand::result CCommandSampleDrawBitmap::RunCommand( const CRhinoCommandContext& context ) { CRhinoCommandOptionValue enable_opts[] = { RHCMDOPTVALUE(L"Yes"), RHCMDOPTVALUE(L"No"), RHCMDOPTVALUE(L"Toggle") }; for(;;) { bool bEnable = m_conduit.IsEnabled(); int current_index = bEnable ? 0 : 1; CRhinoGetOption go; go.SetCommandPrompt( L"Choose command option" ); go.AddCommandOptionList( RHCMDOPTNAME(L"Enable"), 3, enable_opts, current_index ); go.AcceptNothing(); CRhinoGet::result res = go.GetOption(); if( res == CRhinoGet::option ) { const CRhinoCommandOption* option = go.Option(); if( 0 == option ) return CRhinoCommand::failure; current_index = option->m_list_option_current; if( 0 == current_index ) { if( !bEnable ) { m_conduit.Enable(); context.m_doc.Regen(); } } else if( 1 == current_index ) { if( bEnable ) { m_conduit.Disable(); context.m_doc.Regen(); } } else // if( 2 == current_index ) { if( bEnable ) m_conduit.Disable(); else m_conduit.Enable(); context.m_doc.Regen(); } continue; } break; } return CRhinoCommand::success; }
CRhinoCommand::result CCommandTestUVMesh::RunCommand( const CRhinoCommandContext& context ) { bool bDeleteInput = false; CRhinoGetObject go; go.SetCommandPrompt(L"Select untrimmed surface"); go.AddCommandOptionInteger(RHCMDOPTNAME(L"U"), &m_U, 0, 2); go.AddCommandOptionInteger(RHCMDOPTNAME(L"V"), &m_V, 0, 2); go.AddCommandOptionToggle(RHCMDOPTNAME(L"DeleteInput"), RHCMDOPTVALUE(L"No"), RHCMDOPTVALUE(L"Yes"), bDeleteInput, &bDeleteInput); go.SetGeometryFilter(CRhinoGetObject::surface_object); go.SetGeometryAttributeFilter(CRhinoGetObject::untrimmed_surface); CRhinoGet::result rs = CRhinoGet::no_result; while (CRhinoGet::cancel != rs && CRhinoGet::nothing != rs && CRhinoGet::object != rs) rs = go.GetObjects(1,1); if (CRhinoGet::cancel == rs) return CRhinoCommand::cancel; if (0 == go.ObjectCount()) return CRhinoCommand::failure; const CRhinoObject* pObj = go .Object(0).Object(); if (0 == pObj) return CRhinoCommand::failure; const ON_BrepFace* pBrepFace = go.Object(0).Face(); if (0 == pBrepFace) return CRhinoCommand::failure; const ON_Surface* pSurf = pBrepFace->SurfaceOf(); if (0 == pSurf) return CRhinoCommand::failure; ON_SimpleArray<double>UArray(m_U+1); ON_SimpleArray<double>VArray(m_V+1); double UDist, VDist; UDist = (pSurf->Domain(0).m_t[1]-pSurf->Domain(0).m_t[0])/m_U; VDist = (pSurf->Domain(1).m_t[1]-pSurf->Domain(1).m_t[0])/m_V; int i; for (i=0; i <= m_U; i++) UArray.Append(pSurf->Domain(0).m_t[0] + i*UDist); for (i=0; i <= m_V; i++) VArray.Append(pSurf->Domain(1).m_t[0] + i*VDist); //If m_U or m_V are large then there can be a slight difference between //pSurf->Domain(0).m_t[0] + (m_U-1)*UDist and pSurf->Domain(0).m_t[1] //ON_MeshSurface requires it to be less than or equal to pSurf->Domain(0).m_t[1] //05/24/06 TimH Fix for RR21194 double* d = UArray.Last(); if (pSurf->Domain(0).m_t[1] < *d) *d = pSurf->Domain(0).m_t[1]; d = VArray.Last(); if (pSurf->Domain(1).m_t[1] < *d) *d = pSurf->Domain(1).m_t[1]; ON_Mesh* pMeshOut = ON_MeshSurface(*pSurf, m_U+1, UArray.Array(), m_V+1, VArray.Array()); if (0 == pMeshOut) return CRhinoCommand::failure; CRhinoMeshObject* pMeshObj = new CRhinoMeshObject(pObj->Attributes()); if (0 == pMeshObj) { delete pMeshOut; return CRhinoCommand::failure; } pMeshObj->SetMesh(pMeshOut); if (true == bDeleteInput) context.m_doc.ReplaceObject(pObj, pMeshObj); else context.m_doc.AddObject(pMeshObj); context.m_doc.Redraw(); return CRhinoCommand::success; }