8 #ifndef CO_CUTTINGSURFACE_H
9 #define CO_CUTTINGSURFACE_H
22 #define TOO_SMALL 4 // For rectilinear grids: if dimension is lower than TWO_SMALL we just cut every cube
23 #define CHECK_Z (fabs(planek) > 0.15)
24 #define CREFN 20 // the degree of refinement for cylinder surfaces
28 class coDistributedObject;
30 class coDoTriangleStrips;
31 class coDoUnstructuredGrid;
32 class coDoUniformGrid;
33 class coDoRectilinearGrid;
34 class coDoStructuredGrid;
78 friend class CELL_Plane;
141 float x_min, x_max, y_min, y_max,
z_min, z_max;
153 float x_minb, y_minb,
z_minb, x_maxb, y_maxb, z_maxb;
155 static float gsin(
float angle);
156 static float gcos(
float angle);
157 static int trs2pol(
int nb_con,
int nb_tr,
int *trv,
int *tr_list,
int *plv,
int *pol_list);
158 int DummyData(
int dtype,
float **data1,
float **data2,
float **data3);
159 static int DummyNormals(
int);
160 static void fill_normals(
float *u_out,
float *v_out,
float *w_out,
161 const float *coords_x,
const float *coords_y,
const float *coords_z,
162 int nb_coords,
int param_option,
163 float pla[3],
float rad,
float start[3]);
164 static int check_orientation(
float *x4,
float *y4,
float *z4,
float planei,
165 float planej,
float planek);
166 static void preserve_inertia(
const float *x8,
167 const float *y8,
const float *z8,
168 float *x4,
float *y4,
float *z4,
169 float pli,
float plj,
float plk);
170 static void buildSphere(
float *xSphere,
float *ySphere,
float *zSphere,
171 float xPoint,
float yPoint,
float zPoint,
float rad);
172 static void build_SphereStrips(
int *tsl,
int *vl);
173 static void border_proj(
float *px,
float *py,
float *pz,
180 float pli,
float plj,
float plk,
float distance);
189 float z_maxb,
int param_option,
190 float pli,
float plj,
float plk,
float distance,
191 float strx,
float stry,
float strz);
198 float z_maxb,
int param_option,
199 float pli,
float plj,
float plk,
float distance,
200 float strx,
float stry,
float strz);
202 static coDoVec3 *dummy_normals(
const char *nname,
203 float *coords_x,
float *coords_y,
float *coords_z,
int,
204 float pla[3],
float rad,
float start[3]);
208 Plane(
int n_elem,
int n_nodes,
int Type,
int *p_el,
int *p_cl,
int *p_tl,
209 float *p_x_in,
float *p_y_in,
float *p_z_in,
210 float *p_s_in,
unsigned char *p_bs_in,
float *p_i_in,
211 float *p_u_in,
float *p_v_in,
float *p_w_in,
214 float vertexRatio,
int maxPoly,
215 float planei_,
float planej_,
float planek_,
float startx_,
216 float starty_,
float startz_,
float myDistance_,
float radius_,
217 int gennormals_,
int option_,
int genstrips_,
char *ib);
222 bool add_vertex(
int n1,
int n2);
223 void add_vertex(
int n1,
int n2,
int x,
int y,
int z,
int u,
int v,
int w);
224 virtual bool createPlane();
225 virtual void createStrips();
227 virtual void createcoDistributedObjects(
const char *Data_name_scal,
const char *Data_name_vect,
228 const char *Normal_name,
const char *Triangle_name,
232 float **u,
float **
v,
float **
w)
296 int *p_el,
int *p_cl,
int *p_tl,
297 float *p_x_in,
float *p_y_in,
float *p_z_in,
298 float *p_s_in,
unsigned char *p_bs_in,
float *p_i_in,
299 float *p_u_in,
float *p_v_in,
float *p_w_in,
303 float planei_,
float planej_,
float planek_,
float startx_,
304 float starty_,
float startz_,
float myDistance_,
305 float radius_,
int gennormals_,
int option_,
306 int genstrips_,
char *ib);
310 virtual bool createPlane();
312 virtual coDistributedObject *create_data_output(vector<float> &data_vector,
const char *data_obj_name);
314 virtual void createcoDistributedObjects(
const char *Data_name_scal,
const char *Data_name_vect,
315 const char *Normal_name,
const char *Triangle_name,
317 virtual void create_contour(
float *x_coord_in,
float *y_coord_in,
float *z_coord_in,
int *elem_in,
int *conn_in,
int num_coord_in,
int num_elem_in,
int num_conn_in,
318 float *sdata_in,
float *udata_in,
float *vdata_in,
float *wdata_in,
CONTOUR &capping_contour,
PLANE_EDGE_INTERSECTION_VECTOR &intsec_vector, vector<float> &s_data, vector<float> &u_data_vector, vector<float> &v_data_vector, vector<float> &w_data_vector,
EDGE_VECTOR &unit_normal_vector,
EDGE_VECTOR &plane_base_x,
EDGE_VECTOR &plane_base_y,
float p);
327 int *p_el,
int *p_cl,
int *p_tl,
328 float *p_x_in,
float *p_y_in,
float *p_z_in,
329 float *p_s_in,
unsigned char *p_bs_in,
float *p_i_in,
330 float *p_u_in,
float *p_v_in,
float *p_w_in,
333 int p_x_size,
int p_y_size,
int p_z_size,
int maxPoly,
334 float planei_,
float planej_,
float planek_,
float startx_,
335 float starty_,
float startz_,
float myDistance_,
336 float radius_,
int gennormals_,
int option_,
337 int genstrips_,
char *ib)
338 :
Plane(n_elem, n_nodes, Type, p_el, p_cl, p_tl,
339 p_x_in, p_y_in, p_z_in, p_s_in, p_bs_in, p_i_in,
340 p_u_in, p_v_in, p_w_in, p_sgrid_in, p_grid_in,
342 planei_, planej_, planek_, startx_, starty_, startz_, myDistance_, radius_, gennormals_, option_, genstrips_, ib)
357 UNI_Plane(
int n_elem,
int n_nodes,
int Type,
int *el,
int *cl,
358 int *tl,
float *x_in,
float *y_in,
float *z_in,
float *s_in,
unsigned char *p_bs_in,
float *i_in,
float *u_in,
float *v_in,
float *w_in,
const coDoUniformGrid *p_ugrid_in,
float p_x_min,
float p_x_max,
float p_y_min,
float p_y_max,
float p_z_min,
float p_z_max,
int p_x_size,
int p_y_size,
int p_z_size,
int maxPoly,
char *ib);
363 #if (!defined(CO_ia64icc) || (__GNUC__ < 4))
364 template class ALGEXPORT std::map< covise::border **,int>;
381 int xind_min, xind_max, xind_start, yind_min, yind_max, zind_min, zind_max,
zind_start;
387 void necessary_cubes(
int option);
388 inline bool is_between(
float a,
float b,
float c);
390 int find(
float a,
char find_what,
char mode,
bool checkborders);
392 float min_of_four(
float a,
float b,
float c,
float d,
float cmin,
float cmax);
393 float max_of_four(
float a,
float b,
float c,
float d,
float cmin,
float cmax);
394 float min_of_four(
float a,
float b,
float c,
float d);
395 float max_of_four(
float a,
float b,
float c,
float d);
396 float x_line_with_plane(
float y,
float z);
397 float y_line_with_plane(
float x,
float z);
398 float z_line_with_plane(
float x,
float y);
399 float xy_line_with_cylinder(
float y);
400 float zx_line_with_cylinder(
float x);
401 float zy_line_with_cylinder(
float y);
402 float z_line_with_sphere(
float x,
float y);
403 inline void add_to_corner(
int *,
int *,
int *,
int *,
int *,
int *,
int *,
int *,
int);
404 int Point_is_relevant(
int i,
int j,
int k);
407 RECT_Plane(
int n_elem,
int n_nodes,
int Type,
int *el,
int *cl,
int *tl,
float *x_in,
408 float *y_in,
float *z_in,
float *s_in,
unsigned char *p_bs_in,
float *i_in,
float *u_in,
float *v_in,
409 float *w_in,
const coDistributedObject *p_rgrid_in,
int p_x_size,
int p_y_size,
int p_z_size,
int maxPoly,
410 float planei_,
float planej_,
float planek_,
float startx_,
411 float starty_,
float startz_,
float myDistance_,
412 float radius_,
int gennormals_,
int option_,
413 int genstrips_,
char *ib);
424 CELL_Plane(
int n_elem,
int n_nodes,
int Type,
int *p_el,
int *p_cl,
int *p_tl,
float *p_x_in,
float *p_y_in,
float *p_z_in,
float *p_s_in,
unsigned char *p_bs_in,
float *p_i_in,
float *p_u_in,
float *p_v_in,
float *p_w_in,coDoCellGrid* p_cgrid_in,
coDoUnstructuredGrid* p_grid_in,
int maxPoly,
425 float planei_,
float planej_,
float planek_,
float startx_,
426 float starty_,
float startz_,
float myDistance_,
427 float radius_,
int gennormals_,
int option_,
428 int genstrips_,
char *ib);
430 void add_vertex(
int n1,
int n2);
431 void add_vertex(
int n1,
int n2,
int x,
int y,
int z,
int u,
int v,
int w);
473 Isoline(
Plane *pl,
int numiso,
float offset_,
int option_,
float planei_,
float planej_,
float planek_)
484 iso_coords_x =
new float *[num_iso];
485 iso_coords_y =
new float *[num_iso];
486 iso_coords_z =
new float *[num_iso];
487 iso_ll =
new int *[num_iso];
488 iso_vl =
new int *[num_iso];
489 iso_numvert =
new int[num_iso];
490 iso_numlines =
new int[num_iso];
491 iso_numcoords =
new int[num_iso];
496 delete[] neighborlist;
497 delete[] vertice_list;
498 delete[] iso_coords_x;
499 delete[] iso_coords_y;
500 delete[] iso_coords_z;
503 delete[] iso_numvert;
504 delete[] iso_numlines;
505 delete[] iso_numcoords;
509 void add_vertex(
int n1,
int n2);
510 void createIsoline(
float Isovalue);
GLuint GLenum option
Definition: khronos-glext.h:12480
GLint GLint GLint GLint GLint GLint y
Definition: khronos-glext.h:6346
int ** iso_vl
Definition: coCuttingSurface.h:465
float * S_Data_p
Definition: coCuttingSurface.h:139
int * vl
Definition: coCuttingSurface.h:449
float * data_out_u
Definition: coCuttingSurface.h:290
float * data_out_s
Definition: coCuttingSurface.h:289
int * elem_out
Definition: coCuttingSurface.h:284
float * V_Data_V_p
Definition: coCuttingSurface.h:137
int * ts_vertice_list
Definition: coCuttingSurface.h:117
int num_strips
Definition: coCuttingSurface.h:114
float * coord_y
Definition: coCuttingSurface.h:129
int num_triangles
Definition: coCuttingSurface.h:113
const coDoUnstructuredGrid * grid_in
Definition: coCuttingSurface.h:87
int option
Definition: coCuttingSurface.h:150
float ** iso_coords_z
Definition: coCuttingSurface.h:463
GLdouble s
Definition: khronos-glext.h:6441
int * tl
Definition: coCuttingSurface.h:98
float * s_in
Definition: coCuttingSurface.h:102
coDoFloat * get_obj_scalar()
Definition: coCuttingSurface.h:264
Definition: CuttingSurfaceGPMUtil.h:37
int num_lines
Definition: coCuttingSurface.h:444
STR_Plane(int n_elem, int n_nodes, int Type, int *p_el, int *p_cl, int *p_tl, float *p_x_in, float *p_y_in, float *p_z_in, float *p_s_in, unsigned char *p_bs_in, float *p_i_in, float *p_u_in, float *p_v_in, float *p_w_in, const coDoStructuredGrid *p_sgrid_in, const coDoUnstructuredGrid *p_grid_in, int p_x_size, int p_y_size, int p_z_size, int maxPoly, float planei_, float planej_, float planek_, float startx_, float starty_, float startz_, float myDistance_, float radius_, int gennormals_, int option_, int genstrips_, char *ib)
Definition: coCuttingSurface.h:326
float * z_in
Definition: coCuttingSurface.h:101
float * coords_y
Definition: coCuttingSurface.h:126
float * y_coord_out
Definition: coCuttingSurface.h:287
Definition: coCuttingSurface.h:274
const char ** attr_
Definition: coCuttingSurface.h:62
int num_coord_out
Definition: coCuttingSurface.h:283
float ** iso_coords_y
Definition: coCuttingSurface.h:462
float * V_Data_W_p
Definition: coCuttingSurface.h:138
Plane * plane
Definition: coCuttingSurface.h:470
coDoPolygons * polygons_out
Definition: coCuttingSurface.h:92
int num_iso
Definition: coCuttingSurface.h:440
float * zunit
Definition: coCuttingSurface.h:380
int z_size
Definition: coCuttingSurface.h:142
int num_elem
Definition: coCuttingSurface.h:443
int num_conn_out
Definition: coCuttingSurface.h:282
int * iso_numlines
Definition: coCuttingSurface.h:467
int num_elem
Definition: coCuttingSurface.h:109
int lower
Definition: coCuttingSurface.h:54
int cur_line_elem
Definition: coCuttingSurface.h:220
coDoPolygons * get_obj_pol()
Definition: coCuttingSurface.h:252
const char ** setting_
Definition: coCuttingSurface.h:63
int * ts_line_list
Definition: coCuttingSurface.h:118
const coDoStructuredGrid * sgrid_in
Definition: coCuttingSurface.h:88
#define ALGEXPORT
Definition: coExport.h:313
float * data_out_w
Definition: coCuttingSurface.h:292
border ** sym_cutting_cubes
Definition: coCuttingSurface.h:384
GLint GLint GLint GLint GLint x
Definition: khronos-glext.h:6346
~Isoline()
Definition: coCuttingSurface.h:494
Definition: coCuttingSurface.h:370
float * coord_z
Definition: coCuttingSurface.h:130
int option
Definition: coCuttingSurface.h:439
Definition: coDoUnstructuredGrid.h:60
int num_coords
Definition: coCuttingSurface.h:121
float * coord_z
Definition: coCuttingSurface.h:460
friend class Isoline
Definition: coCuttingSurface.h:372
const coDoRectilinearGrid * rgrid_in
Definition: coCuttingSurface.h:90
int Datatype
Definition: coCuttingSurface.h:144
Definition: coDoRectilinearGrid.h:53
const GLdouble * v
Definition: khronos-glext.h:6442
float z_min
Definition: coCuttingSurface.h:141
float * coord_x
Definition: coCuttingSurface.h:128
float ** iso_coords_x
Definition: coCuttingSurface.h:461
float * I_Data_p
Definition: coCuttingSurface.h:452
int num_elem_out
Definition: coCuttingSurface.h:281
float * I_Data_p
Definition: coCuttingSurface.h:140
GLboolean GLboolean GLboolean b
Definition: khronos-glext.h:6895
coDoVec3 * get_obj_vector()
Definition: coCuttingSurface.h:268
std::vector< PLANE_EDGE_INTERSECTION > PLANE_EDGE_INTERSECTION_VECTOR
Definition: CuttingSurfaceGPMUtil.h:51
int num_cells
Definition: coCuttingSurface.h:111
Definition: coCuttingSurface.h:57
int * ll
Definition: coCuttingSurface.h:450
float * V_Data_W
Definition: coCuttingSurface.h:133
border ** cutting_cubes
Definition: coCuttingSurface.h:385
GLubyte GLubyte GLubyte GLubyte w
Definition: khronos-glext.h:6793
float * x_coord_out
Definition: coCuttingSurface.h:286
Definition: coCuttingSurface.h:435
GLuint start
Definition: khronos-glext.h:6343
int zsize
Definition: coCuttingSurface.h:377
float * I_Data
Definition: coCuttingSurface.h:135
coDoTriangleStrips * get_obj_strips()
Definition: coCuttingSurface.h:256
float * u_in
Definition: coCuttingSurface.h:105
GLclampd zmax
Definition: khronos-glext.h:11392
Definition: coCuttingSurface.h:51
float zmin
Definition: coCuttingSurface.h:379
float * x_in
Definition: coCuttingSurface.h:99
struct covise::cutting_info_s cutting_info
int targets[12]
Definition: coCuttingSurface.h:41
float * S_Data
Definition: coCuttingSurface.h:134
int node_pairs[12]
Definition: coCuttingSurface.h:47
std::map< border **, int > _SpaghettiAntidot
Definition: coCuttingSurface.h:383
coDoVec3 * get_obj_normal()
Definition: coCuttingSurface.h:260
Definition: coCuttingSurface.h:352
coDoVec3 * v_data_out
Definition: coCuttingSurface.h:96
bool unstr_
Definition: coCuttingSurface.h:82
float * y_in
Definition: coCuttingSurface.h:100
int ** iso_ll
Definition: coCuttingSurface.h:464
GLdouble GLdouble z
Definition: khronos-glext.h:6565
Definition: coDoUniformGrid.h:53
unsigned char * bs_in
Definition: coCuttingSurface.h:103
float z_minb
Definition: coCuttingSurface.h:153
struct covise::NodeInfo_s NodeInfo
GLfloat angle
Definition: khronos-glext.h:12122
coDoVec3 * normals_out
Definition: coCuttingSurface.h:94
Definition: coDoData.h:367
coDoFloat * s_data_out
Definition: coCuttingSurface.h:95
int * vertex
Definition: coCuttingSurface.h:119
int side
Definition: coCuttingSurface.h:40
float planek
Definition: coCuttingSurface.h:438
int * vertice_list
Definition: coCuttingSurface.h:116
float * coords_z
Definition: coCuttingSurface.h:127
int num_isolines
Definition: coCuttingSurface.h:445
float * i_in
Definition: coCuttingSurface.h:104
int num_coords
Definition: coCuttingSurface.h:453
float * z_coord_out
Definition: coCuttingSurface.h:288
int * conn_out
Definition: coCuttingSurface.h:285
const coDistributedObject * p_obj_
Definition: coCuttingSurface.h:60
GLenum mode
Definition: khronos-glext.h:6908
int zdim
Definition: coCuttingSurface.h:378
int nvert
Definition: coCuttingSurface.h:48
Definition: coCuttingSurface.h:321
float dist
Definition: coCuttingSurface.h:39
Definition: coDoStructuredGrid.h:53
float * V_Data_U_p
Definition: coCuttingSurface.h:136
void get_scalar_data(int *numc, float **x, float **y, float **z, float **s)
Definition: coCuttingSurface.h:243
int num_faces
Definition: coCuttingSurface.h:110
char * iblank
Definition: coCuttingSurface.h:151
float * I_Data
Definition: coCuttingSurface.h:451
float sradius
Definition: coCuttingSurface.h:375
const GLubyte * c
Definition: khronos-glext.h:9864
float * V_Data_V
Definition: coCuttingSurface.h:132
NodeInfo * node_table
Definition: coCuttingSurface.h:143
GLfloat GLfloat p
Definition: khronos-glext.h:9861
Definition: coCuttingSurface.h:37
GLboolean GLboolean GLboolean GLboolean a
Definition: khronos-glext.h:6895
int upper
Definition: coCuttingSurface.h:53
Definition: coCuttingSurface.h:72
int num_vertices
Definition: coCuttingSurface.h:115
Definition: coDoData.h:84
float * coords_x
Definition: coCuttingSurface.h:125
void get_vector_data(int *numc, float **x, float **y, float **z, float **u, float **v, float **w)
Definition: coCuttingSurface.h:231
float * V_Data_U
Definition: coCuttingSurface.h:131
int * vertice_list
Definition: coCuttingSurface.h:447
Definition: coDistributedObject.h:294
int num_nodes
Definition: coCuttingSurface.h:442
int no_attrs_
Definition: coCuttingSurface.h:61
int num_edges
Definition: coCuttingSurface.h:112
int * iso_numvert
Definition: coCuttingSurface.h:466
Definition: coCuttingSurface.h:45
int maxPolyPerVertex
Definition: coCuttingSurface.h:123
float * coord_y
Definition: coCuttingSurface.h:459
const coDoUniformGrid * ugrid_in
Definition: coCuttingSurface.h:89
coDoTriangleStrips * strips_out
Definition: coCuttingSurface.h:93
float * data_out_v
Definition: coCuttingSurface.h:291
float * coords_x
Definition: coCuttingSurface.h:455
int num_nodes
Definition: coCuttingSurface.h:108
int * vertex
Definition: coCuttingSurface.h:448
float * v_in
Definition: coCuttingSurface.h:106
int max_coords
Definition: coCuttingSurface.h:122
float * w_in
Definition: coCuttingSurface.h:107
float planek
Definition: coCuttingSurface.h:146
Definition: coDoTriangleStrips.h:47
GLsizei GLsizei GLfloat distance
Definition: khronos-glext.h:13024
GLuint const GLchar * name
Definition: khronos-glext.h:6722
Definition: CuttingSurfaceGPMUtil.h:19
float radius
Definition: coCuttingSurface.h:149
int vertice_list[12]
Definition: coCuttingSurface.h:42
Definition: coDoPolygons.h:50
int * iso_numcoords
Definition: coCuttingSurface.h:468
float * coords_y
Definition: coCuttingSurface.h:456
int * neighborlist
Definition: coCuttingSurface.h:454
int zind_start
Definition: coCuttingSurface.h:381
float startz
Definition: coCuttingSurface.h:147
int num_vertice
Definition: coCuttingSurface.h:446
float * coord_x
Definition: coCuttingSurface.h:458
float offset
Definition: coCuttingSurface.h:441
Isoline(Plane *pl, int numiso, float offset_, int option_, float planei_, float planej_, float planek_)
Definition: coCuttingSurface.h:473
struct covise::border_s border
float * coords_z
Definition: coCuttingSurface.h:457
NodeInfo * node
Definition: coCuttingSurface.h:469
float myDistance
Definition: coCuttingSurface.h:148