Import Geant4 10.7.0 source tree
This commit is contained in:
@@ -57,10 +57,11 @@ protected:
|
||||
};
|
||||
|
||||
class pick_action : public matrix_action, public primitive_visitor {
|
||||
TOOLS_ACTION(pick_action,tools::sg::pick_action,matrix_action)
|
||||
protected:
|
||||
|
||||
virtual bool project(float& a_x,float& a_y,float& a_z,float& a_w) {
|
||||
return project_point(a_x,a_y,a_z,a_w);
|
||||
return parent::project_point(a_x,a_y,a_z,a_w);
|
||||
}
|
||||
|
||||
virtual bool add_point(float a_x,float a_y,float a_z,float a_w) {
|
||||
@@ -73,16 +74,11 @@ protected:
|
||||
|
||||
virtual bool add_point(float a_x,float a_y,float a_z,float a_w,
|
||||
float,float,float,float) {
|
||||
if(is_inside(a_x,a_y,a_z,a_w)) { //we have a pick.
|
||||
m_done = true;
|
||||
return false; //to stop
|
||||
}
|
||||
return true; //continue.
|
||||
return pick_action::add_point(a_x,a_y,a_z,a_w);
|
||||
}
|
||||
|
||||
virtual bool add_line(float a_bx,float a_by,float a_bz,float a_bw,
|
||||
float a_ex,float a_ey,float a_ez,float a_ew) {
|
||||
|
||||
if(is_inside(a_bx,a_by,a_bz,a_bw)) {
|
||||
m_done = true;
|
||||
return false;
|
||||
@@ -103,8 +99,7 @@ protected:
|
||||
float,float,float,float,
|
||||
float a_ex,float a_ey,float a_ez,float a_ew,
|
||||
float,float,float,float){
|
||||
return add_line(a_bx,a_by,a_bz,a_bw,
|
||||
a_ex,a_ey,a_ez,a_ew);
|
||||
return pick_action::add_line(a_bx,a_by,a_bz,a_bw,a_ex,a_ey,a_ez,a_ew);
|
||||
}
|
||||
|
||||
virtual bool add_triangle(float a_p1x,float a_p1y,float a_p1z,float a_p1w,
|
||||
@@ -120,19 +115,57 @@ protected:
|
||||
}
|
||||
|
||||
virtual bool add_triangle(float a_p1x,float a_p1y,float a_p1z,float a_p1w,
|
||||
float,float,float,float,
|
||||
float,float,float,float,
|
||||
float a_p2x,float a_p2y,float a_p2z,float a_p2w,
|
||||
float,float,float,float,
|
||||
float,float,float,float,
|
||||
float a_p3x,float a_p3y,float a_p3z,float a_p3w,
|
||||
float,float,float,float){
|
||||
float,float,float,float){
|
||||
return pick_action::add_triangle(a_p1x,a_p1y,a_p1z,a_p1w,
|
||||
a_p2x,a_p2y,a_p2z,a_p2w,
|
||||
a_p3x,a_p3y,a_p3z,a_p3w);
|
||||
}
|
||||
|
||||
virtual bool project_normal(float&,float&,float&) {return true;}
|
||||
virtual bool add_point_normal(float a_x,float a_y,float a_z,float a_w,
|
||||
float,float,float) {
|
||||
return pick_action::add_point(a_x,a_y,a_z,a_w);
|
||||
}
|
||||
|
||||
virtual bool add_point_normal(float a_x,float a_y,float a_z,float a_w,
|
||||
float,float,float,
|
||||
float,float,float,float) {
|
||||
return pick_action::add_point(a_x,a_y,a_z,a_w);
|
||||
}
|
||||
|
||||
virtual bool add_line_normal(float a_bx,float a_by,float a_bz,float a_bw, float,float,float,
|
||||
float a_ex,float a_ey,float a_ez,float a_ew, float,float,float) {
|
||||
return pick_action::add_line(a_bx,a_by,a_bz,a_bw,a_ex,a_ey,a_ez,a_ew);
|
||||
}
|
||||
virtual bool add_line_normal(float a_bx,float a_by,float a_bz,float a_bw, float,float,float, float,float,float,float,
|
||||
float a_ex,float a_ey,float a_ez,float a_ew, float,float,float, float,float,float,float) {
|
||||
return pick_action::add_line(a_bx,a_by,a_bz,a_bw,a_ex,a_ey,a_ez,a_ew);
|
||||
}
|
||||
|
||||
virtual bool add_triangle_normal(float a_p1x,float a_p1y,float a_p1z,float a_p1w, float,float,float,
|
||||
float a_p2x,float a_p2y,float a_p2z,float a_p2w, float,float,float,
|
||||
float a_p3x,float a_p3y,float a_p3z,float a_p3w, float,float,float) {
|
||||
return pick_action::add_triangle(a_p1x,a_p1y,a_p1z,a_p1w,
|
||||
a_p2x,a_p2y,a_p2z,a_p2w,
|
||||
a_p3x,a_p3y,a_p3z,a_p3w);
|
||||
}
|
||||
virtual bool add_triangle_normal(float a_p1x,float a_p1y,float a_p1z,float a_p1w,
|
||||
float,float,float, float,float,float,float,
|
||||
float a_p2x,float a_p2y,float a_p2z,float a_p2w,
|
||||
float,float,float, float,float,float,float,
|
||||
float a_p3x,float a_p3y,float a_p3z,float a_p3w,
|
||||
float,float,float, float,float,float,float) {
|
||||
return pick_action::add_triangle(a_p1x,a_p1y,a_p1z,a_p1w,
|
||||
a_p2x,a_p2y,a_p2z,a_p2w,
|
||||
a_p3x,a_p3y,a_p3z,a_p3w);
|
||||
}
|
||||
public:
|
||||
pick_action(std::ostream& a_out,unsigned int a_ww,unsigned int a_wh,float a_l,float a_r,float a_b,float a_t)
|
||||
:matrix_action(a_out,a_ww,a_wh)
|
||||
:parent(a_out,a_ww,a_wh)
|
||||
,m_l(a_l)
|
||||
,m_r(a_r)
|
||||
,m_b(a_b)
|
||||
@@ -146,7 +179,7 @@ public:
|
||||
virtual ~pick_action(){}
|
||||
public:
|
||||
pick_action(const pick_action& a_from)
|
||||
:matrix_action(a_from)
|
||||
:parent(a_from)
|
||||
,primitive_visitor(a_from)
|
||||
,m_l(a_from.m_l)
|
||||
,m_r(a_from.m_r)
|
||||
@@ -159,7 +192,7 @@ public:
|
||||
set_to_pick_ndc(); //OPTIMIZATION
|
||||
}
|
||||
pick_action& operator=(const pick_action& a_from){
|
||||
matrix_action::operator=(a_from);
|
||||
parent::operator=(a_from);
|
||||
primitive_visitor::operator=(a_from);
|
||||
m_l = a_from.m_l;
|
||||
m_r = a_from.m_r;
|
||||
@@ -176,7 +209,7 @@ public:
|
||||
}
|
||||
public:
|
||||
void reset() {
|
||||
matrix_action::reset();
|
||||
parent::reset();
|
||||
m_done = false;
|
||||
m_node = 0;
|
||||
m_zs.clear();
|
||||
@@ -197,7 +230,7 @@ public:
|
||||
void set_area(float a_l,float a_r,float a_b,float a_t) {
|
||||
// a_l,a_r,a_b,a_t are in window coordinates (pixels)
|
||||
// but handled in floats for intersection computation precision.
|
||||
// WARNING : we must have a_t>a_b and a_r>a_l. No check is done for that.
|
||||
// WARNING : we must have a_t>a_b and a_r>a_l. No check is done for that.
|
||||
m_l = a_l;
|
||||
m_r = a_r;
|
||||
m_b = a_b;
|
||||
@@ -567,7 +600,7 @@ protected:
|
||||
if(is_inside(a_2x,a_2y,a_2z,a_2w)) return true;
|
||||
if(is_inside(a_3x,a_3y,a_3z,a_3w)) return true;
|
||||
|
||||
// alll points are outside.
|
||||
// alll points are outside.
|
||||
|
||||
float x1,y1;
|
||||
to_pick_ndc(a_1x,a_1y,x1,y1);
|
||||
@@ -589,7 +622,7 @@ protected:
|
||||
if(ortho_clip_line(bx,by,bz,bw, ex,ey,ez,ew, toggle)) {
|
||||
m_zs.push_back(bz);
|
||||
m_ws.push_back(bw);
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
float x3,y3;
|
||||
@@ -607,7 +640,7 @@ protected:
|
||||
if(ortho_clip_line(bx,by,bz,bw, ex,ey,ez,ew, toggle)) {
|
||||
m_zs.push_back(bz);
|
||||
m_ws.push_back(bw);
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
bx = x1;
|
||||
@@ -622,13 +655,13 @@ protected:
|
||||
if(ortho_clip_line(bx,by,bz,bw, ex,ey,ez,ew, toggle)) {
|
||||
m_zs.push_back(bz);
|
||||
m_ws.push_back(bw);
|
||||
return true;
|
||||
return true;
|
||||
}
|
||||
|
||||
// no intersection with edges.
|
||||
// but the triangle may surround [-1,1]x[-1,1] !
|
||||
|
||||
// test if O=(0,0) is inside the triangle :
|
||||
// test if O=(0,0) is inside the triangle :
|
||||
|
||||
float xo = 0;
|
||||
float yo = 0;
|
||||
@@ -676,7 +709,7 @@ protected:
|
||||
vec3f O(0,0,0);
|
||||
line<vec3f> ln(O,O+vec3f(0,0,1));
|
||||
|
||||
vec3f pz;
|
||||
vec3f pz;
|
||||
{vec3f p1(x1,y1,a_1z);
|
||||
vec3f p2(x2,y2,a_2z);
|
||||
vec3f p3(x3,y3,a_3z);
|
||||
@@ -684,7 +717,7 @@ protected:
|
||||
if(!pl.intersect(ln,pz)) {
|
||||
m_out << "pick_action::intersect_triangle :"
|
||||
<< " z plane/line intersection failed."
|
||||
<< std::endl;
|
||||
<< std::endl;
|
||||
return false;
|
||||
}}
|
||||
|
||||
@@ -692,7 +725,7 @@ protected:
|
||||
// (in the xy plane, 1,2,3 points have same projection, then the
|
||||
// z axis intersection with the triangle hits the same point done with zs
|
||||
// than with ws).
|
||||
vec3f pw;
|
||||
vec3f pw;
|
||||
{vec3f p1(x1,y1,a_1w);
|
||||
vec3f p2(x2,y2,a_2w);
|
||||
vec3f p3(x3,y3,a_3w);
|
||||
@@ -700,14 +733,14 @@ protected:
|
||||
if(!pl.intersect(ln,pw)) {
|
||||
m_out << "pick_action::intersect_triangle :"
|
||||
<< " plane/line intersection failed."
|
||||
<< std::endl;
|
||||
<< std::endl;
|
||||
return false;
|
||||
}}
|
||||
//::printf("debug : w planey %g\n",p[2]);
|
||||
|
||||
//m_out << "pick_action::intersect_triangle :"
|
||||
// << " p " << p[0] << " " << p[1] << " " << p[2]
|
||||
// << std::endl;
|
||||
// << std::endl;
|
||||
|
||||
m_zs.push_back(pz[2]);
|
||||
m_ws.push_back(pw[2]);
|
||||
@@ -724,7 +757,7 @@ protected:
|
||||
if(!l1p.intersect(l23,q,prec)) {
|
||||
m_out << "pick_action::intersect_triangle :"
|
||||
<< " line/line intersection failed."
|
||||
<< std::endl;
|
||||
<< std::endl;
|
||||
return false;
|
||||
}
|
||||
float dq2 = (q-p2).length();
|
||||
@@ -732,7 +765,7 @@ protected:
|
||||
if(d32==0) {
|
||||
m_out << "pick_action::intersect_triangle :"
|
||||
<< " zero d32."
|
||||
<< std::endl;
|
||||
<< std::endl;
|
||||
return false;
|
||||
}
|
||||
float dp1 = (pz-p1).length();
|
||||
@@ -740,7 +773,7 @@ protected:
|
||||
if(dq1==0) {
|
||||
m_out << "pick_action::intersect_triangle :"
|
||||
<< " zero dq1."
|
||||
<< std::endl;
|
||||
<< std::endl;
|
||||
return false;
|
||||
}
|
||||
|
||||
@@ -878,7 +911,7 @@ protected:
|
||||
// z = -1.
|
||||
// z = 0.
|
||||
// G.Barrand : do not do z clipping
|
||||
/* else if(a_doz && (bout & (1<<4)) ) { //bz < -1
|
||||
/* else if(a_doz && (bout & (1<<4)) ) { //bz < -1
|
||||
float t = a_ez-a_bz;
|
||||
//CHECK_DIV (t,"ClipLineParallel")
|
||||
t = (-1 - a_z)/t;
|
||||
@@ -919,7 +952,7 @@ protected:
|
||||
float m_r;
|
||||
float m_b;
|
||||
float m_t;
|
||||
|
||||
|
||||
bool m_stop_at_first;
|
||||
|
||||
bool m_done;
|
||||
|
||||
Reference in New Issue
Block a user