本文整理汇总了C++中gp_Pnt::XYZ方法的典型用法代码示例。如果您正苦于以下问题:C++ gp_Pnt::XYZ方法的具体用法?C++ gp_Pnt::XYZ怎么用?C++ gp_Pnt::XYZ使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类gp_Pnt
的用法示例。
在下文中一共展示了gp_Pnt::XYZ方法的4个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: transform_for_cone_and_depth
void transform_for_cone_and_depth(gp_Pnt &p)
{
gp_Vec v(p.XYZ());
double radius_beyond_surface = v.Magnitude() - pitch_radius;
v.Normalize();
double scale = 1.0 - cone_sin_for_point * height_for_point / pitch_radius;
p = gp_Pnt(v.XYZ() * (scale * pitch_radius + scale * radius_beyond_surface * cone_cos_for_point)
+ gp_XYZ(0.0, 0.0, height_for_point * cone_cos_for_point + scale * radius_beyond_surface * cone_sin_for_point));
}
示例2: Intersects
bool HLine::Intersects(const gp_Pnt &pnt)const
{
gp_Lin this_line = GetLine();
if(!intersect(pnt, this_line))return false;
// check it lies between A and B
gp_Vec v = this_line.Direction();
double dpA = gp_Vec(A->m_p.XYZ()) * v;
double dpB = gp_Vec(B->m_p.XYZ()) * v;
double dp = gp_Vec(pnt.XYZ()) * v;
return dp >= dpA - wxGetApp().m_geom_tol && dp <= dpB + wxGetApp().m_geom_tol;
}
示例3: RenderText
void HDimension::RenderText(const wxString &text, const gp_Pnt& p, const gp_Dir& xdir, const gp_Dir& ydir, double scale)
{
float width, height;
if(!wxGetApp().get_text_size(text, &width, &height))return;
// make a matrix at top left of text
gp_Pnt text_top_left( p.XYZ() + ydir.XYZ() * (scale * height) );
gp_Trsf text_matrix = make_matrix(text_top_left, xdir, ydir);
glPushMatrix();
double m[16];
extract_transposed(text_matrix, m);
glMultMatrixd(m);
if(DrawFlat)
{
//Try and draw this ortho. must find the origin point in screen coordinates
double x, y, z;
// arrays to hold matrix information
double model_view[16];
glGetDoublev(GL_MODELVIEW_MATRIX, model_view);
double projection[16];
glGetDoublev(GL_PROJECTION_MATRIX, projection);
int viewport[4];
glGetIntegerv(GL_VIEWPORT, viewport);
// get 3D coordinates based on window coordinates
gluProject(0,0,0,
model_view, projection, viewport,
&x, &y, &z);
wxGetApp().render_screen_text_at(text, scale*8,x,y,atan2(xdir.Y(),xdir.X()) * 180 / M_PI);
}
else
{
wxGetApp().render_text(text);
}
glPopMatrix();
}
示例4: draw_arrow_line
// static
void HDimension::draw_arrow_line(DimensionMode mode, const gp_Pnt &p0, const gp_Pnt &p1, const gp_Pnt &p2, const gp_Dir &xdir, const gp_Dir &ydir, double width, double scale)
{
double short_line_length = 5.0 * scale;
double long_line_extra = 2.0 * scale;
double y0 = gp_Vec(p2.XYZ()) * gp_Vec(ydir.XYZ()) - gp_Vec(p0.XYZ()) * gp_Vec(ydir.XYZ());
double y1 = gp_Vec(p2.XYZ()) * gp_Vec(ydir.XYZ()) - gp_Vec(p1.XYZ()) * gp_Vec(ydir.XYZ());
gp_Pnt vt0( p0.XYZ() + ydir.XYZ() * y0);
gp_Pnt vt1( p1.XYZ() + ydir.XYZ() * y1);
gp_Pnt vt2 = p2;
gp_Dir along_dir = make_vector(gp_Pnt(p0), gp_Pnt(p1));
gp_Dir xdir_along = xdir;
if(along_dir * xdir < 0)xdir_along = -xdir;
gp_Pnt new_vt0 = vt0;
gp_Pnt new_vt1 = vt1;
gp_Pnt middle_text_point = p2.XYZ() + along_dir.XYZ() * (width/2 * scale);
double x0 = gp_Vec(p0.XYZ()) * gp_Vec(xdir_along.XYZ());
double x1 = gp_Vec(p1.XYZ()) * gp_Vec(xdir_along.XYZ());
double xm = gp_Vec(middle_text_point.XYZ()) * gp_Vec(xdir_along.XYZ());
double arrow_head_scale = scale;
if(xm < x0 || xm > x1)
{
arrow_head_scale *= -1;
}
double distance = vt0.Distance(vt1);
// draw arrow heads, if there's room
if((distance > 2 * scale + wxGetApp().m_geom_tol) || (xm < x0) || (xm > x1))
{
gp_XYZ t[2][3];
t[0][0] = vt0.XYZ();
t[0][1] = vt0.XYZ() + xdir_along.XYZ() * arrow_head_scale + ydir.XYZ() * (arrow_head_scale * (-0.4));
t[0][2] = vt0.XYZ() + xdir_along.XYZ() * arrow_head_scale + ydir.XYZ() * (arrow_head_scale * 0.4);
t[1][0] = vt1.XYZ();
t[1][1] = vt1.XYZ() + xdir_along.XYZ() * (-arrow_head_scale) + ydir.XYZ() * (arrow_head_scale * 0.4);
t[1][2] = vt1.XYZ() + xdir_along.XYZ() * (-arrow_head_scale) + ydir.XYZ() * (arrow_head_scale * (-0.4));
// adjust line vertices
new_vt0 = gp_Pnt(vt0.XYZ() + xdir_along.XYZ() * arrow_head_scale);
new_vt1 = gp_Pnt(vt1.XYZ() + xdir_along.XYZ() * (-arrow_head_scale));
// draw two triangles
for(int i = 0; i<2; i++)
{
glBegin(GL_LINE_STRIP);
glVertex3d(t[i][0].X(), t[i][0].Y(), t[i][0].Z());
glVertex3d(t[i][1].X(), t[i][1].Y(), t[i][1].Z());
glVertex3d(t[i][2].X(), t[i][2].Y(), t[i][2].Z());
glVertex3d(t[i][0].X(), t[i][0].Y(), t[i][0].Z());
glEnd();
}
}
// draw side lines
glBegin(GL_LINES);
glVertex3d(p0.X(), p0.Y(), p0.Z());
glVertex3d(vt0.X(), vt0.Y(), vt0.Z());
glVertex3d(p1.X(), p1.Y(), p1.Z());
glVertex3d(vt1.X(), vt1.Y(), vt1.Z());
glEnd();
if(xm < x0)
{
// long line first
gp_Pnt vt4 = vt2.XYZ() + xdir_along.XYZ() * (-long_line_extra);
glBegin(GL_LINES);
glVertex3d(vt2.X(), vt2.Y(), vt2.Z());
glVertex3d(new_vt0.X(), new_vt0.Y(), new_vt0.Z());
glEnd();
// little line
gp_Pnt vt3 = new_vt1.XYZ() + xdir_along.XYZ() * short_line_length;
glBegin(GL_LINES);
glVertex3d(new_vt1.X(), new_vt1.Y(), new_vt1.Z());
glVertex3d(vt3.X(), vt3.Y(), vt3.Z());
glEnd();
}
else if(xm > x1)
{
// little first
gp_Pnt vt3 = new_vt0.XYZ() - xdir_along.XYZ() * short_line_length;
glBegin(GL_LINES);
glVertex3d(vt3.X(), vt3.Y(), vt3.Z());
glVertex3d(new_vt0.X(), new_vt0.Y(), new_vt0.Z());
glEnd();
// long line
glBegin(GL_LINES);
gp_Pnt vt4 = vt2.XYZ() + xdir_along.XYZ() * (width * scale + long_line_extra);
glVertex3d(vt1.X(), vt1.Y(), vt1.Z());
glVertex3d(vt4.X(), vt4.Y(), vt4.Z());
glEnd();
}
//.........这里部分代码省略.........