本文整理汇总了C++中ON_Xform::Rotation方法的典型用法代码示例。如果您正苦于以下问题:C++ ON_Xform::Rotation方法的具体用法?C++ ON_Xform::Rotation怎么用?C++ ON_Xform::Rotation使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类ON_Xform
的用法示例。
在下文中一共展示了ON_Xform::Rotation方法的12个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CalculateTransform
BOOL COrientOnCrvXform::CalculateTransform( CRhinoViewport& vp, const ON_3dPoint& pt, ON_Xform& xform )
{
BOOL bResult = FALSE;
if( m_path_curve )
{
double t = 0.0;
if( m_path_curve->GetClosestPoint(pt, &t) )
{
ON_3dPoint origin = m_path_curve->PointAt( t );
ON_Plane dest_plane;
if( m_perp_mode )
{
ON_3dVector tangent = m_path_curve->TangentAt( t );
MakeNormalPlane( origin, tangent, dest_plane );
}
else
{
dest_plane.origin = origin;
dest_plane.xaxis = m_path_curve->TangentAt( t );
dest_plane.zaxis = m_base_plane.zaxis;
dest_plane.yaxis = ON_CrossProduct( dest_plane.zaxis, dest_plane.xaxis );
dest_plane.UpdateEquation();
}
xform.Rotation( m_base_plane, dest_plane );
bResult = xform.IsValid() ? TRUE : FALSE;
}
}
return bResult;
}
示例2: Rotate
bool ON_BezierCage::Rotate(
double sin_angle, // sin(angle)
double cos_angle, // cos(angle)
const ON_3dVector& axis, // axis of rotation
const ON_3dPoint& center // center of rotation
)
{
ON_Xform rot;
rot.Rotation( sin_angle, cos_angle, axis, center );
return Transform( rot );
}
示例3: GetRotation
bool ON_Quaternion::GetRotation(ON_Xform& xform) const
{
ON_Plane plane;
bool rc = GetRotation(plane);
if (rc)
xform.Rotation(ON_Plane::World_xy,plane);
else if (IsZero())
xform.Zero();
else
xform.Identity();
return rc;
}
示例4: Rotate
// rotate plane about a point and axis
bool ON_Plane::Rotate(
double sin_angle, // sin(angle)
double cos_angle, // cos(angle)
const ON_3dVector& axis, // axis of rotation
const ON_3dPoint& center // center of rotation
)
{
bool rc = false;
ON_Xform rot;
if ( center == origin ) {
rot.Rotation( sin_angle, cos_angle, axis, ON_origin );
xaxis = rot*xaxis;
yaxis = rot*yaxis;
zaxis = rot*zaxis;
rc = UpdateEquation();
}
else {
rot.Rotation( sin_angle, cos_angle, axis, center );
rc = Transform( rot );
}
return rc;
}
示例5: Rotate
ON_BOOL32 ON_Geometry::Rotate(
double sin_angle, // sin(angle)
double cos_angle, // cos(angle)
const ON_3dVector& axis, // axis of rotation
const ON_3dPoint& center // center of rotation
)
{
if ( sin_angle == 0.0 && cos_angle == 1.0 )
return true;
ON_Xform rot;
rot.Rotation( sin_angle, cos_angle, axis, center );
return Transform( rot );
}
示例6: Rotate
// rotate line about a point and axis
bool ON_Line::Rotate(
double sin_angle, // sin(angle)
double cos_angle, // cos(angle)
const ON_3dVector& axis, // axis of rotation
const ON_3dPoint& center // center of rotation
)
{
ON_Xform rot;
rot.Rotation( sin_angle, cos_angle, axis, center );
const bool bFixP0 = (from==center);
const bool bFixP1 = (to==center);
const bool rc = Transform( rot );
if ( bFixP0 )
from = center;
if ( bFixP1 )
to = center;
return rc;
}
示例7: Transform
bool ON_3dPointArray::Rotate(
double sin_angle,
double cos_angle,
const ON_3dVector& axis_of_rotation,
const ON_3dPoint& center_of_rotation
)
{
const int count = m_count;
ON_Xform rot;
rot.Rotation( sin_angle, cos_angle, axis_of_rotation, center_of_rotation );
ON_SimpleArray<int> fix_index(128);
int i;
for ( i = 0; i < count; i++ ) {
if ( m_a[i] == center_of_rotation )
fix_index.Append(i);
}
const bool rc = Transform( rot );
for ( i = 0; i < fix_index.Count(); i++ ) {
m_a[fix_index[i]] = center_of_rotation;
}
return rc;
}
示例8:
// Copy the 2d curve, make it 3d, and transform it
// to the 3d plane position
ON_Curve* ON_Hatch::LoopCurve3d( int index) const
{
int count = m_loops.Count();
ON_Curve* pC = NULL;
if( index >= 0 && index < count)
{
if( m_loops[index]->Curve())
{
pC = m_loops[index]->Curve()->DuplicateCurve();
if( pC)
{
pC->ChangeDimension( 3);
ON_Xform xf;
xf.Rotation( ON_xy_plane, m_plane);
pC->Transform( xf);
}
}
}
return pC;
}
示例9: myRotateView
static void myRotateView( ON_Viewport& viewport,
const ON_3dVector& axis,
const ON_3dPoint& center,
double angle )
{
ON_Xform rot;
ON_3dPoint camLoc;
ON_3dVector camY, camZ;
rot.Rotation( angle, axis, center );
if ( !viewport.GetCameraFrame( camLoc, NULL, camY, camZ ) )
return;
camLoc = rot*camLoc;
camY = rot*camY;
camZ = -(rot*camZ);
viewport.SetCameraLocation( camLoc );
viewport.SetCameraDirection( camZ );
viewport.SetCameraUp( camY );
ON_GL( viewport ); // update model view
}
示例10: ON_Intersect
int ON_Intersect( // returns 0 = no intersections,
// 1 = one intersection,
// 2 = 2 intersections
// 3 = line lies on cylinder
// If 0 is returned, first point is point
// on line closest to cylinder and 2nd point is the point
// on the sphere closest to the line.
// If 1 is returned, first point is obtained by evaluating
// the line and the second point is obtained by evaluating
// the cylinder.
const ON_Line& line,
const ON_Cylinder& cylinder, // if cylinder.height[0]==cylinder.height[1],
// then infinite cyl is used. Otherwise
// finite cyl is used.
ON_3dPoint& A, ON_3dPoint& B // intersection point(s) returned here
)
{
ON_BOOL32 bFiniteCyl = true;
int rc = 0;
const double cylinder_radius = fabs(cylinder.circle.radius);
double tol = cylinder_radius*ON_SQRT_EPSILON;
if ( tol < ON_ZERO_TOLERANCE )
tol = ON_ZERO_TOLERANCE;
ON_Line axis;
axis.from = cylinder.circle.plane.origin + cylinder.height[0]*cylinder.circle.plane.zaxis;
axis.to = cylinder.circle.plane.origin + cylinder.height[1]*cylinder.circle.plane.zaxis;
if ( axis.Length() <= tol ) {
axis.to = cylinder.circle.plane.origin + cylinder.circle.plane.zaxis;
bFiniteCyl = false;
}
//ON_BOOL32 bIsParallel = false;
double line_t, axis_t;
if ( !ON_Intersect(line,axis,&line_t,&axis_t) ) {
axis.ClosestPointTo( cylinder.circle.plane.origin, &axis_t );
line.ClosestPointTo( cylinder.circle.plane.origin, &line_t );
}
ON_3dPoint line_point = line.PointAt(line_t);
ON_3dPoint axis_point = axis.PointAt(axis_t);
double d = line_point.DistanceTo(axis_point);
if ( bFiniteCyl ) {
if ( axis_t < 0.0 )
axis_t = 0.0;
else if ( axis_t > 1.0 )
axis_t = 1.0;
axis_point = axis.PointAt(axis_t);
}
if ( d >= cylinder_radius-tol) {
rc = ( d <= cylinder_radius+tol ) ? 1 : 0;
A = line_point;
ON_3dVector V = line_point - axis_point;
if ( bFiniteCyl ) {
V = V - (V*cylinder.circle.plane.zaxis)*cylinder.circle.plane.zaxis;
}
V.Unitize();
B = axis_point + cylinder_radius*V;
if ( rc == 1 ) {
// check for overlap
ON_3dPoint P = axis.ClosestPointTo(line.from);
d = P.DistanceTo(line.from);
if ( fabs(d-cylinder_radius) <= tol ) {
P = axis.ClosestPointTo(line.to);
d = P.DistanceTo(line.to);
if ( fabs(d-cylinder_radius) <= tol ) {
rc = 3;
A = cylinder.ClosestPointTo(line.from);
B = cylinder.ClosestPointTo(line.to);
}
}
}
}
else {
// transform to coordinate system where equation of cyl
// is x^2 + y^2 = R^2 and solve for line parameter(s).
ON_Xform xform;
xform.Rotation( cylinder.circle.plane, ON_xy_plane );
ON_Line L = line;
L.Transform(xform);
const double x0 = L.from.x;
const double x1 = L.to.x;
const double x1mx0 = x1-x0;
double ax = x1mx0*x1mx0;
double bx = 2.0*x1mx0*x0;
double cx = x0*x0;
const double y0 = L.from.y;
const double y1 = L.to.y;
const double y1my0 = y1-y0;
double ay = y1my0*y1my0;
double by = 2.0*y1my0*y0;
double cy = y0*y0;
double t0, t1;
int qerc = ON_SolveQuadraticEquation(ax+ay, bx+by, cx+cy-cylinder_radius*cylinder_radius,
&t0,&t1);
if ( qerc == 2 ) {
//.........这里部分代码省略.........
示例11: RunCommand
CRhinoCommand::result CCommandSampleOrientOnSrf::RunCommand( const CRhinoCommandContext& context )
{
// Select objects to orient
CRhinoGetObject go;
go.SetCommandPrompt( L"Select objects to orient" );
go.EnableSubObjectSelect( FALSE );
go.EnableGroupSelect( TRUE );
go.GetObjects( 1, 0 );
if( go.CommandResult() != CRhinoCommand::success )
return go.CommandResult();
// Point to orient from
CRhinoGetPoint gp;
gp.SetCommandPrompt( L"Point to orient from" );
gp.GetPoint();
if( gp.CommandResult() != CRhinoCommand::success )
return gp.CommandResult();
// Define source plane
CRhinoView* view = gp.View();
if( 0 == view )
{
view = RhinoApp().ActiveView();
if( 0 == view )
return CRhinoCommand::failure;
}
ON_Plane source_plane( view->Viewport().ConstructionPlane().m_plane );
source_plane.SetOrigin( gp.Point() );
// Surface to orient on
CRhinoGetObject gs;
gs.SetCommandPrompt( L"Surface to orient on" );
gs.SetGeometryFilter( CRhinoGetObject::surface_object );
gs.EnableSubObjectSelect( TRUE );
gs.EnableDeselectAllBeforePostSelect( false );
gs.EnableOneByOnePostSelect();
gs.GetObjects( 1, 1 );
if( gs.CommandResult() != CRhinoCommand::success )
return gs.CommandResult();
const CRhinoObjRef& ref = gs.Object(0);
// Get selected surface object
const CRhinoObject* obj = ref.Object();
if( 0 == obj )
return CRhinoCommand::failure;
// Get selected surface (face)
const ON_BrepFace* face = ref.Face();
if( 0 == face )
return CRhinoCommand::failure;
// Unselect surface
obj->Select( false );
// Point on surface to orient to
gp.SetCommandPrompt( L"Point on surface to orient to" );
gp.Constrain( *face );
gp.GetPoint();
if( gp.CommandResult() != CRhinoCommand::success )
return gp.CommandResult();
// Do transformation
CRhinoCommand::result rc = CRhinoCommand::failure;
double u = 0.0, v = 0.0;
if( face->GetClosestPoint(gp.Point(), &u, &v) )
{
ON_Plane target_plane;
if( face->FrameAt(u, v, target_plane) )
{
// If the face orientation is opposite
// of natural surface orientation, then
// flip the plane's zaxis.
if( face->m_bRev )
target_plane.CreateFromFrame(
target_plane.origin,
target_plane.xaxis,
-target_plane.zaxis
);
// Build transformation
ON_Xform xform;
xform.Rotation( source_plane, target_plane );
// Do the transformation. In this example,
// we will copy the original objects
bool bDeleteOriginal = false;
int i;
for( i = 0; i < go.ObjectCount(); i++ )
context.m_doc.TransformObject( go.Object(i), xform, bDeleteOriginal );
context.m_doc.Redraw();
rc = CRhinoCommand::success;
}
}
return rc;
}
示例12: RunCommand
CRhinoCommand::result CTraslRuota::RunCommand( const CRhinoCommandContext& context )
{
Cscript1PlugIn& plugin = script1PlugIn();
if( !plugin.IsDlgVisible() )
{
return CRhinoCommand::nothing;
}
/*GET A REFERENCE TO THE LAYER TABLE*/
CRhinoLayerTable& layer_table = context.m_doc.m_layer_table;
ON_Layer currentLayer;
int numLayers = layer_table.LayerCount();
for(int i = 0; i < numLayers; i++)
{
currentLayer = layer_table[i];
const CRhinoLayer& layer = layer_table[i];
currentLayer.SetVisible(true);
layer_table.ModifyLayer(currentLayer, i);
layer_table.SetCurrentLayerIndex(i);
const CRhinoLayer& current_layer = layer_table.CurrentLayer();
int layer_index = layer_table.CurrentLayerIndex();
const CRhinoLayer& layer2 = layer_table[layer_index];
ON_SimpleArray<CRhinoObject*> obj_list;
int j, obj_count = context.m_doc.LookupObject( layer2, obj_list );
for( j = 0; j < obj_count; j++ )
{
CRhinoObject* obj = obj_list[j];
if( obj && obj->IsSelectable() )
obj->Select();
if( obj_count )
context.m_doc.Redraw();
}
}
context.m_doc.Redraw();
//inizio rotazione
double m_angle=(_wtof(plugin.m_dialog->ValoreRotazione));
ON_Plane plane = RhinoActiveCPlane();
CRhinoGetObject go1;
go1.GetObjects( 1, 0 );
int numero1 = go1.ObjectCount();
for( int k = 0; k < go1.ObjectCount(); k++ )
{
// Get an object reference
const CRhinoObjRef& ref = go1.Object(k);
// Get the real object
const CRhinoObject* obj = ref.Object();
if( !obj )
continue;
ON_Xform xform;
xform.Rotation( m_angle * ON_PI / 180.0, plane.zaxis, plane.Origin() );
context.m_doc.TransformObject( obj, xform, true, true, true );
context.m_doc.Redraw();
}
//fine rotazione
//inizio traslazione
CRhinoGetObject go;
int numero = go.ObjectCount();
go.GetObjects( 1, 0 );
for( int i = 0; i < go.ObjectCount(); i++ )
{
// Get an object reference
const CRhinoObjRef& ref = go.Object(i);
// Get the real object
const CRhinoObject* obj = ref.Object();
if( !obj )
continue;
ON_Xform xform;
xform.Rotation( m_angle * ON_PI / 180.0, plane.zaxis, plane.Origin() );
//context.m_doc.TransformObject( obj, xform, true, true, true );
context.m_doc.Redraw();
xform.Translation((_wtof(plugin.m_dialog->ValoreTraslazione)),0,0);
context.m_doc.TransformObject( obj, xform, true, true, true );
//.........这里部分代码省略.........