A
download mesh.h
Language: C++
License: GPL
Copyright: (C) 2000-2006 Vincent LE PRINCE
LOC: 106
Project Info
Truevision
Server: SourceForge
Type: cvs
...evision\Truevision\include\
   atmosphere.h
   bicubic.h
   blob.h
   box.h
   camera.h
   cone.h
   cylinder.h
   density.h
   disc.h
   dlgutils.h
   fnintern.h
   fog.h
   function.h
   glview.h
   glview2d.h
   glview3d.h
   heightfield.h
   impsurface.h
   interface.h
   interior.h
   isosurface.h
   julia.h
   lathe.h
   lights.h
   linkobj.h
   main.h
   mapedit.h
   material.h
   matlib.h
   matlist.h
   matpov.h
   media.h
   mesh.h
   meshrotate.h
   meshscale.h
   meshtool.h
   meshtranslate.h
   obj3dcsg.h
   obj3ddef.h
   object3d.h
   objectlayer.h
   objectlist.h
   parametric.h
   plane.h
   polygon.h
   povfe.h
   povpreview.h
   povscript.h
   preferences.h
   prism.h
   proppanel.h
   pycamera.h
   pyengine.h
   pylights.h
   pyobjects.h
   pyscriptdb.h
   pyscriptobj.h
   pyutils.h
   rotation.h
   scene.h
   scriptobj.h
   slopemap.h
   sphere.h
   spheresweep.h
   spline2d.h
   spline3d.h
   superellipsoid.h
   texfinish.h
   texnormal.h
   texpigment.h
   text.h
   torus.h
   tvio.h
   tvwidgets.h
   undo.h
   utils3d.h
   vertex.h
   viewmanager.h

//*****************************************************************************************
// Truevision - a 3d modeler for povray
//
// mesh.h
//
// Vincent LE PRINCE <vincentleprince@users.sourceforge.net>
// Copyright (C) 2000-2006 Vincent LE PRINCE
// This file is part of the TRUEVISION Package

//   This program is free software; you can redistribute it and/or modify
//   it under the terms of the GNU General Public License as published by
//   the Free Software Foundation; either version 2 of the License, or
//   (at your option) any later version.
//
//   This program is distributed in the hope that it will be useful,
//   but WITHOUT ANY WARRANTY; without even the implied warranty of
//   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
//   GNU General Public License for more details.
//
//   You should have received a copy of the GNU General Public License
//   along with this program; if not, write to the Free Software
//   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.  */ 
//*******************************************************************************************
#ifndef TV_MESH_H
#define TV_MESH_H
using namespace std;
#include "object3d.h"
#include "include/obj3dcsg.h"
#include <vector>
#include "include/utils3d.h"
#include "include/vertex.h"
#include "include/polygon.h"

class Mesh;
class ExtractTool;


// Mesh Edges
class MeshEdge {
	friend class ExtractTool;

	private:
		Vertex *point1, *point2;
		int pickname;
		bool selected;
	
	public:
		MeshEdge() { selected = false; }
		MeshEdge( MeshEdge & ref ) { point1 = ref.point1; point2 = ref.point2; selected = ref.selected; }
		MeshEdge( Vertex* pt1, Vertex* pt2 ) { point1 = pt1; point2 = pt2; selected = false; }
		Vertex *pta() { return point1; }
		Vertex *ptb() { return point2; }
		
		bool equal( Vertex *pt1, Vertex *pt2 ) { if ( ( pt1 == point1 && pt2 == point2 ) || ( pt1 == point2 && pt2 == point1 ) ) return true; else return false; }
		void display( int pick = -1 );
		void get_vertex() { point1->get_vertex(); point2->get_vertex(); }
		void select() { selected = true; }
		void unselect() { selected = false; }
		void toggle_selection() { selected = ! selected; }
		bool is_selected() { return selected; }
		bool is_picked( int pick ) { return ( pick == pickname ) ? true : false; }
		void save( ofstream & file, Mesh *mesh );
		void load(  ifstream & file, char *tag, Mesh *mesh );
};
	

// Mesh object
class Mesh : public ObjCSG {
	friend class ExtractTool;
	friend class Polygon;
	
	#define SENDER ((Mesh*)data)
	friend void sign_mesh_current_point_changed( GtkWidget *wid, gpointer data ) { SENDER->current_point_changed(); }
	#undef SENDER
	
	private:
		vector<Vertex*> points;
		vector<Polygon*> polygons;
		vector<MeshEdge*> edges;
		vector<Vertex*> selection;
		double selection_center[3];
		int edit_mode;
		bool in_undo;
	
		TvWidget_point *current_point;
		TvWidget_option_combo *smooth_type;
	
		void add_edge( Vertex *a, Vertex *b );
	
		double selection_scale[3];
		void current_point_changed();
		void update_current_point_widget();
		void update_selection();
		void update_normals();

	public:
		Mesh( app_objs *appref );
		Mesh( Mesh & ref );
		~Mesh();
		Object3D *duplicate_yourself() { Mesh *res = new Mesh( *this ); return res; }
		//void add_to_tree( GtkWidget *view, GtkTreeStore *store, GtkTreeSelection *sel, GtkTreeIter *parent, GtkTreeIter *sibling, const gchar *pixmap = NULL ) { Object3D::add_to_tree( view, store, sel, parent, sibling, "object_box.xpm" ); }

		void paste_object( Object3D *obj );	
		
		void add_point( double x, double y, double z );
		void add_quad( int a, int b, int c, int d );
		void add_triangle( int a, int b, int c );
		Polygon *add_polygon() { Polygon *poly = new Polygon(); polygons.push_back( poly ); return poly; }
		
		void purge_duplicate_points();
		void purge_unused_points();
		void update_edges();
		
		int get_point_index( Vertex *pt );
		Vertex *get_point( int index ) { return points[index]; }
		int points_size() { return points.size(); }
		
		void display( glview *view, bool set_color = true );
		void edit_widget( GtkWidget *wid );
		void destroy_editor();
		void pref_changed();
		
		void mouse_drag( struct drag_info *drag );
		void pointer_mode_changed();
		void unselect_all();
		void push_at_selection( Vertex *pt );
		void select_param_picked( int name, bool ctrl );
		float *get_location() { return translation->get(); }
		Rotation *get_rotation() { return rotation->get_rotation(); }
		
		void output_to_povray_pass1( ofstream & file );
		void save( ofstream & file );
		bool load( ifstream & file, char *tag );
		
		void move_selection( struct drag_info *drag );
		void rotate_selection( struct drag_info *drag );
		void scale_selection( struct drag_info *drag );

		void undo( Object3D *copy );
		void push_undo_item() { if ( !in_undo ) Object3D::push_undo_item(); }

		void apply_transformations();
		void delete_polygons();
		void tesselate();
		void flatten();
		void flatten_region();
		
		void select_all_poly();
		void unselect_all_poly();
		void invert_selection_poly();

		// Access methods
		virtual void set_location(float *data) { translation->set(data[0], data[1], data[2]); translation->update_widget();}
		void set_rotation(float *data) {rotation->set(data[0], data[1], data[2]); rotation->update_widget(); rotation->flush();}
		void set_size(float *data) { size->set(data[0], data[1], data[2]); size->update_widget();}
		float* get_rot(float* val) { float _x, _y, _z; rotation->get(_x, _y, _z); val[0] = _x; val[1] = _y; val[2] = _z; return (float*)val;}
		float* get_size() { return size->get(); }
};
#endif

About Koders | Resources | Downloads | Support | Black Duck | Terms of Service | DMCA | Privacy Policy | Contact Us