summaryrefslogtreecommitdiffstats
path: root/kpovmodeler/pmmesh.h
blob: 741550601ea7bccd961bba649b20f1570d5dc3ec (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
//-*-C++-*-
/*
**************************************************************************
                                 description
                             --------------------
    copyright            : (C) 2003 by Leon Pennington
    email                : leon@leonscape.co.uk
**************************************************************************

**************************************************************************
*                                                                        *
*  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.                                   *
*                                                                        *
**************************************************************************/


#ifndef PMMESH_H
#define PMMESH_H

#ifdef HAVE_CONFIG_H
#include <config.h>
#endif

#include "pmsolidobject.h"
#include "pmvector.h"

class PMTriangle;

/**
 * Class for povray mesh objects.
 */
class PMMesh : public PMSolidObject
{
   typedef PMSolidObject Base;
public:
   /**
    * Creates an empty PMMesh object
    */
   PMMesh( PMPart* part );
   /**
    * Copy constructor
    */
   PMMesh( const PMMesh& m );

   /**
    * deletes the PMMesh object
    */
   virtual ~PMMesh( );

   /** */
   virtual PMObject* copy( ) const { return new PMMesh( *this ); }
   /** */
   virtual TQString description( ) const;

   /** */
   virtual PMMetaObject* tqmetaObject( ) const;
   /** */
   virtual void cleanUp( ) const;

   /** */
   virtual void serialize( TQDomElement& e, TQDomDocument& doc ) const;
   /** */
   virtual void readAttributes( const PMXMLHelper& h );

   /**
    * Returns a new @ref PMMeshEdit
    */
   virtual PMDialogEditBase* editWidget( TQWidget* tqparent ) const;
   /**
    * Returns the name of the pixmap that is displayed in the tree view
    * and dialog view
    */
   virtual TQString pixmap( ) const { return TQString( "pmmesh" ); }

   /**
    * Returns the hierarchy flag
    */
   bool hierarchy( ) const { return m_hierarchy; }
   /**
    * Sets the type of the csg
    */
   void setHierarchy( bool h );

   /**
    * Returns true if the inside vector is enabled
    */
   bool isInsideVectorEnabled( ) const { return m_enableInsideVector; }
   /**
    * Sets the inside vector flag
    */
   void enableInsideVector( bool eiv );

   /**
    * Returns the inside vector
    */
   PMVector insideVector( ) const { return m_insideVector; }
   /**
    * Sets the inside vector
    */
   void setInsideVector( const PMVector& iv );

   /** */
   virtual void createMemento( );
   /** */
   virtual void restoreMemento( PMMemento* s );
   /** */
   virtual void controlPoints( PMControlPointList& list );
   /** */
   virtual void controlPointsChangedList( PMControlPointList& list, PMObjectList& objList );

private:
   /**
    * IDs for @ref PMMementoData
    */
   enum PMMeshMementoID { PMHierarchyID, PMEnableInsideVectorID,
                          PMInsideVectorID };

   bool m_hierarchy;
   bool m_enableInsideVector;
   PMVector m_insideVector;

   static PMMetaObject* s_pMetaObject;

   /**
    * Point to point structure for changes with control points
    */
   struct pointToPoint {
      PMTriangle *object;
      int pointID;
      int listID;
   };

   /**
    * List of point to point structures
    */
   TQValueList<pointToPoint> m_pointToPointList;
};

#endif