Developer Documentation

- Main Page
- Related Pages
- Modules
- Namespaces
- Classes
- Files

- File List
- File Members

All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Modules Pages
FaceSelection.cc
1 /*===========================================================================*\
2 * *
3 * OpenFlipper *
4 * Copyright (c) 2001-2015, RWTH-Aachen University *
5 * Department of Computer Graphics and Multimedia *
6 * All rights reserved. *
7 * www.openflipper.org *
8 * *
9 *---------------------------------------------------------------------------*
10 * This file is part of OpenFlipper. *
11 *---------------------------------------------------------------------------*
12 * *
13 * Redistribution and use in source and binary forms, with or without *
14 * modification, are permitted provided that the following conditions *
15 * are met: *
16 * *
17 * 1. Redistributions of source code must retain the above copyright notice, *
18 * this list of conditions and the following disclaimer. *
19 * *
20 * 2. Redistributions in binary form must reproduce the above copyright *
21 * notice, this list of conditions and the following disclaimer in the *
22 * documentation and/or other materials provided with the distribution. *
23 * *
24 * 3. Neither the name of the copyright holder nor the names of its *
25 * contributors may be used to endorse or promote products derived from *
26 * this software without specific prior written permission. *
27 * *
28 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS *
29 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED *
30 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
31 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER *
32 * OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, *
33 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, *
34 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR *
35 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF *
36 * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING *
37 * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS *
38 * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
39 * *
40 \*===========================================================================*/
41
42 /*===========================================================================*\
43 * *
44 * $Revision$ *
45 * $Author$ *
46 * $Date$ *
47 * *
48 \*===========================================================================*/
49
50 #include "MeshObjectSelectionPlugin.hh"
51
52 #include <MeshTools/MeshSelectionT.hh>
53
54 //=========================================================
55 //==== Face selections
56 //=========================================================
57
58 void MeshObjectSelectionPlugin::selectFaces(int objectId , IdList _faceList) {
59
60 if(_faceList.empty() ) return;
61
62 BaseObjectData* object = 0;
63 if (! PluginFunctions::getObject(objectId,object)) {
64 emit log(LOGERR,tr("selectFaces : unable to get object"));
65 return;
66 }
67
68 if (object->dataType() == DATA_TRIANGLE_MESH)
69 MeshSelection::selectFaces(PluginFunctions::triMesh(object), _faceList);
70 else if (object->dataType() == DATA_POLY_MESH)
71 MeshSelection::selectFaces(PluginFunctions::polyMesh(object), _faceList);
72 else {
73 emit log(LOGERR,tr("selectFaces : Unsupported object Type"));
74 return;
75 }
76
77 QString selection = "selectFaces(ObjectId(" + QString::number(objectId) + ") , [ " + QString::number(_faceList[0]);
78
79 for (uint i = 1 ; i < _faceList.size(); ++i) {
80 selection += " , " + QString::number(_faceList[i]);
81 }
82
83 selection += " ])";
84
85 emit updatedObject(object->id(), UPDATE_SELECTION_FACES);
86 emit scriptInfo(selection);
87 }
88
89 //=========================================================
90
91 void MeshObjectSelectionPlugin::unselectFaces(int objectId , IdList _faceList) {
92
93 if(_faceList.empty() ) return;
94
95 BaseObjectData* object = 0;
96 if (! PluginFunctions::getObject(objectId,object)) {
97 emit log(LOGERR,tr("unselectFaces : unable to get object"));
98 return;
99 }
100
101 if (object->dataType() == DATA_TRIANGLE_MESH)
102 MeshSelection::unselectFaces(PluginFunctions::triMesh(object), _faceList);
103 else if (object->dataType() == DATA_POLY_MESH)
104 MeshSelection::unselectFaces(PluginFunctions::polyMesh(object), _faceList);
105 else {
106 emit log(LOGERR,tr("unselectFaces : Unsupported object Type"));
107 return;
108 }
109
110 QString selection = "unselectFaces(ObjectId(" + QString::number(objectId) + ") , [ " + QString::number(_faceList[0]);
111
112 for (uint i = 1 ; i < _faceList.size(); ++i) {
113 selection += " , " + QString::number(_faceList[i]);
114 }
115
116 selection += " ])";
117
118 emit updatedObject(object->id(), UPDATE_SELECTION_FACES);
119 emit scriptInfo(selection);
120 }
121
122 //=========================================================
123
124 void MeshObjectSelectionPlugin::selectAllFaces(int objectId) {
125
126 BaseObjectData* object;
127 if (! PluginFunctions::getObject(objectId,object)) {
128 emit log(LOGERR,tr("selectAllFaces : unable to get object"));
129 return;
130 }
131
132 if (object->dataType() == DATA_TRIANGLE_MESH)
133 MeshSelection::selectAllFaces(PluginFunctions::triMesh(object));
134 else if (object->dataType() == DATA_POLY_MESH)
135 MeshSelection::selectAllFaces(PluginFunctions::polyMesh(object));
136 else {
137 emit log(LOGERR,tr("selectAllFaces : Unsupported object Type"));
138 return;
139 }
140
141 emit updatedObject(object->id(), UPDATE_SELECTION_FACES);
142 emit scriptInfo("selectAllFaces(ObjectId(" + QString::number(objectId) + "))");
143 }
144
145 //=========================================================
146
147 void MeshObjectSelectionPlugin::clearFaceSelection(int objectId) {
148
149 BaseObjectData* object;
150 if (! PluginFunctions::getObject(objectId,object)) {
151 emit log(LOGERR,tr("clearFaceSelection : unable to get object"));
152 return;
153 }
154
155 if (object->dataType() == DATA_TRIANGLE_MESH)
156 MeshSelection::clearFaceSelection(PluginFunctions::triMesh(object));
157 else if (object->dataType() == DATA_POLY_MESH)
158 MeshSelection::clearFaceSelection(PluginFunctions::polyMesh(object));
159 else {
160 emit log(LOGERR,tr("clearFaceSelection : Unsupported object Type"));
161 return;
162 }
163
164 emit updatedObject(object->id(), UPDATE_SELECTION_FACES);
165 emit scriptInfo("clearFaceSelection(ObjectId(" + QString::number(objectId) + "))");
166 }
167
168 //=========================================================
169
170 void MeshObjectSelectionPlugin::invertFaceSelection(int objectId) {
171
172 BaseObjectData* object;
173 if (! PluginFunctions::getObject(objectId,object)) {
174 emit log(LOGERR,tr("invertFaceSelection : unable to get object"));
175 return;
176 }
177
178 if (object->dataType() == DATA_TRIANGLE_MESH)
179 MeshSelection::invertFaceSelection(PluginFunctions::triMesh(object));
180 else if (object->dataType() == DATA_POLY_MESH)
181 MeshSelection::invertFaceSelection(PluginFunctions::polyMesh(object));
182 else {
183 emit log(LOGERR,tr("invertFaceSelection : Unsupported object Type"));
184 return;
185 }
186
187 emit updatedObject(object->id(), UPDATE_SELECTION_FACES);
188 emit scriptInfo("invertFaceSelection(ObjectId(" + QString::number(objectId) + "))");
189 }
190
191 //=========================================================
192
193 void MeshObjectSelectionPlugin::deleteFaceSelection(int _objectId) {
194
195 BaseObjectData* object = 0;
196 if (!PluginFunctions::getObject(_objectId,object)) {
197 emit log(LOGERR,tr("deleteFaceSelection: unable to get object"));
198 return;
199 }
200
201 if (object->dataType() == DATA_TRIANGLE_MESH)
202 deleteSelection(PluginFunctions::triMesh(object), faceType_);
203 else if (object->dataType() == DATA_POLY_MESH)
204 deleteSelection(PluginFunctions::polyMesh(object), faceType_);
205 else {
206 emit log(LOGERR,tr("deleteFaceSelection: Unsupported object Type"));
207 return;
208 }
209
210 emit updatedObject(object->id(), UPDATE_ALL);
211 emit scriptInfo("deleteFaceSelection(ObjectId(" + QString::number(_objectId) + "))");
212 }
213
214 //=========================================================
215
216 int MeshObjectSelectionPlugin::createMeshFromFaceSelection( int _objectId) {
217 return createMeshFromSelection(_objectId, faceType_ );
218 }
219
220 //=========================================================
221
222 void MeshObjectSelectionPlugin::selectBoundaryFaces(int objectId) {
223
224 BaseObjectData* object;
225 if (! PluginFunctions::getObject(objectId,object)) {
226 emit log(LOGERR,tr("selectBoundaryFaces : unable to get object"));
227 return;
228 }
229
230 if (object->dataType() == DATA_TRIANGLE_MESH)
231 MeshSelection::selectBoundaryFaces(PluginFunctions::triMesh(object));
232 else if (object->dataType() == DATA_POLY_MESH)
233 MeshSelection::selectBoundaryFaces(PluginFunctions::polyMesh(object));
234 else {
235 emit log(LOGERR,tr("selectBoundaryFaces : Unsupported object Type"));
236 return;
237 }
238
239 emit updatedObject(object->id(), UPDATE_SELECTION_FACES);
240 emit scriptInfo("selectBoundaryFaces(ObjectId(" + QString::number(objectId) + "))");
241 }
242
243
244 //=========================================================
245
246 void MeshObjectSelectionPlugin::shrinkFaceSelection(int objectId) {
247
248 BaseObjectData* object;
249 if (! PluginFunctions::getObject(objectId,object)) {
250 emit log(LOGERR,tr("shrinkFaceSelection : unable to get object"));
251 return;
252 }
253
254 if (object->dataType() == DATA_TRIANGLE_MESH)
255 MeshSelection::shrinkFaceSelection(PluginFunctions::triMesh(object));
256 else if (object->dataType() == DATA_POLY_MESH)
257 MeshSelection::shrinkFaceSelection(PluginFunctions::polyMesh(object));
258 else {
259 emit log(LOGERR,tr("shrinkFaceSelection : Unsupported object Type"));
260 return;
261 }
262
263 emit updatedObject(object->id(), UPDATE_SELECTION_FACES);
264 emit scriptInfo("shrinkFaceSelection(ObjectId(" + QString::number(objectId) + "))");
265 }
266
267 //=========================================================
268
269 void MeshObjectSelectionPlugin::growFaceSelection(int objectId) {
270
271 BaseObjectData* object;
272 if (! PluginFunctions::getObject(objectId,object)) {
273 emit log(LOGERR,tr("growFaceSelection : unable to get object"));
274 return;
275 }
276
277 if (object->dataType() == DATA_TRIANGLE_MESH)
278 MeshSelection::growFaceSelection(PluginFunctions::triMesh(object));
279 else if (object->dataType() == DATA_POLY_MESH)
280 MeshSelection::growFaceSelection(PluginFunctions::polyMesh(object));
281 else {
282 emit log(LOGERR,tr("growFaceSelection : Unsupported object Type"));
283 return;
284 }
285
286 emit updatedObject(object->id(), UPDATE_SELECTION_FACES);
287 emit scriptInfo("growFaceSelection(ObjectId(" + QString::number(objectId) + "))");
288 }
289
290 //=========================================================
291
292 IdList MeshObjectSelectionPlugin::getFaceSelection(int objectId) {
293
294 BaseObjectData* object;
295 if (! PluginFunctions::getObject(objectId,object)) {
296 emit log(LOGERR,tr("getFaceSelection : unable to get object"));
297 return IdList(0);
298 }
299
300 emit scriptInfo("getFaceSelection(ObjectId(" + QString::number(objectId) + "))");
301
302 if (object->dataType() == DATA_TRIANGLE_MESH)
303 return MeshSelection::getFaceSelection(PluginFunctions::triMesh(object));
304 else if (object->dataType() == DATA_POLY_MESH)
305 return MeshSelection::getFaceSelection(PluginFunctions::polyMesh(object));
306 else {
307 emit log(LOGERR,tr("getFaceSelection : Unsupported object Type"));
308 return IdList(0);
309 }
310 }
311
312 //=========================================================
313
315 void MeshObjectSelectionPlugin::colorizeFaceSelection(int objectId, int r, int g, int b, int a) {
316
317 BaseObjectData* object;
318 if (! PluginFunctions::getObject(objectId,object)) {
319 emit log(LOGERR,"colorizeFaceSelection : unable to get object");
320 return;
321 }
322
323 if (object->dataType() == DATA_TRIANGLE_MESH) {
324 colorizeSelection(PluginFunctions::triMesh(object), faceType_, r, g, b, a);
325 } else if (object->dataType() == DATA_POLY_MESH) {
326 colorizeSelection(PluginFunctions::polyMesh(object), faceType_, r, g, b, a);
327 } else {
328 emit log(LOGERR,"colorizeFaceSelection : Unsupported object Type");
329 return;
330 }
331
332
333 emit scriptInfo("colorizeFaceSelection(ObjectId(" + QString::number(objectId) + "), "
334 + QString::number(r) + ", " + QString::number(g) + ", " + QString::number(b) + ")");
335
336 emit updatedObject(objectId, UPDATE_COLOR);
337 }
MeshObjectSelectionPlugin::colorizeSelection
void colorizeSelection(MeshT *_mesh, PrimitiveType _primitiveTypes, int _red, int _green, int _blue, int _alpha)
Colorize the selection.
Definition: MeshObjectSelectionPluginT.cc:796
MeshObjectSelectionPlugin::deleteFaceSelection
void deleteFaceSelection(int _objectId)
Delete face that are currently selected.
Definition: FaceSelection.cc:193
LOGERR
Definition: LoggingInterface.hh:107
BaseObjectData
Definition: BaseObjectData.hh:105
MeshObjectSelectionPlugin::faceType_
SelectionInterface::PrimitiveType faceType_
Handle to selection environment.
Definition: MeshObjectSelectionPlugin.hh:570
MeshObjectSelectionPlugin::deleteSelection
bool deleteSelection(MeshT *_mesh, PrimitiveType _primitiveType)
Delete all selected elements of a mesh.
Definition: MeshObjectSelectionPluginT.cc:57
UPDATE_ALL
const UpdateType UPDATE_ALL(UpdateTypeSet(1))
Identifier for all updates.
PluginFunctions::getObject
bool getObject(int _identifier, BSplineCurveObject *&_object)
Definition: PluginFunctionsBSplineCurve.cc:75
MeshObjectSelectionPlugin::selectAllFaces
void selectAllFaces(int objectId)
Select all faces.
Definition: FaceSelection.cc:124
PluginFunctions::polyMesh
PolyMesh * polyMesh(BaseObjectData *_object)
Get a poly mesh from an object.
Definition: PluginFunctionsPolyMesh.cc:134
MeshObjectSelectionPlugin::colorizeFaceSelection
void colorizeFaceSelection(int objectId, int r, int g, int b, int a)
Colorize the face selection.
Definition: FaceSelection.cc:315
MeshObjectSelectionPlugin::createMeshFromSelection
void createMeshFromSelection(MeshT &_mesh, MeshT &_newMesh, PrimitiveType _primitiveType)
Create a new mesh from the selection.
Definition: MeshObjectSelectionPluginT.cc:870
BaseObject::dataType
bool dataType(DataType _type) const
Definition: BaseObject.cc:232
MeshObjectSelectionPlugin::growFaceSelection
void growFaceSelection(int objectId)
Grow the current face selection.
Definition: FaceSelection.cc:269
MeshObjectSelectionPlugin::selectFaces
void selectFaces(int objectId, IdList _facesList)
Select given faces.
Definition: FaceSelection.cc:58
MeshObjectSelectionPlugin::shrinkFaceSelection
void shrinkFaceSelection(int objectId)
Shrink the current face selection.
Definition: FaceSelection.cc:246
PluginFunctions::triMesh
TriMesh * triMesh(BaseObjectData *_object)
Get a triangle mesh from an object.
Definition: PluginFunctionsTriangleMesh.cc:140
IdList
std::vector< int > IdList
Standard Type for id Lists used for scripting.
Definition: DataTypes.hh:192
MeshObjectSelectionPlugin::createMeshFromFaceSelection
int createMeshFromFaceSelection(int _objectId)
Create a mesh containing the face selection of the given mesh.
Definition: FaceSelection.cc:216
DATA_POLY_MESH
#define DATA_POLY_MESH
Definition: PolyMesh.hh:65
MeshObjectSelectionPlugin::unselectFaces
void unselectFaces(int objectId, IdList _facesList)
Unselect given faces.
Definition: FaceSelection.cc:91
MeshObjectSelectionPlugin::getFaceSelection
IdList getFaceSelection(int objectId)
Return a list of all selected faces.
Definition: FaceSelection.cc:292
MeshObjectSelectionPlugin::invertFaceSelection
void invertFaceSelection(int objectId)
Invert the current face selection.
Definition: FaceSelection.cc:170
MeshObjectSelectionPlugin::clearFaceSelection
void clearFaceSelection(int objectId)
Unselect all faces.
Definition: FaceSelection.cc:147
MeshObjectSelectionPlugin::selectBoundaryFaces
void selectBoundaryFaces(int objectId)
Select all boundary faces of the given object.
Definition: FaceSelection.cc:222
MeshSelectionT.hh
Functions for selection on a mesh.
UPDATE_COLOR
const UpdateType UPDATE_COLOR(UpdateTypeSet(1)<< 10)
Colors have changed.
DATA_TRIANGLE_MESH
#define DATA_TRIANGLE_MESH
Definition: TriangleMesh.hh:66
UPDATE_SELECTION_FACES
const UpdateType UPDATE_SELECTION_FACES(UpdateTypeSet(1)<< 8)
Face selection has changed.
BaseObject::id
int id() const
Definition: BaseObject.cc:201