44#include "MovePlugin.hh"
46#ifdef ENABLE_POLYLINE_SUPPORT
49#ifdef ENABLE_TSPLINEMESH_SUPPORT
50#include <ObjectTypes/TSplineMesh/TSplineMesh.hh>
54#ifdef ENABLE_HEXAHEDRALMESH_SUPPORT
57#ifdef ENABLE_TETRAHEDRALMESH_SUPPORT
60#ifdef ENABLE_POLYHEDRALMESH_SUPPORT
69 emit setSlotDescription(
"translate(int,Vector)",tr(
"Translate object by given vector."),
70 QString(tr(
"objectId,Vector")).split(
","), QString(tr(
"ID of an object, translation vector")).split(
","));
72 emit setSlotDescription(
"translate(int,idList,Vector)",tr(
"Translate vertices by given vector."),
73 QString(tr(
"objectId,VertexHandles,Vector")).split(
","),
74 QString(tr(
"ID of an object, List of vertex handles, translation vector")).split(
","));
76 emit setSlotDescription(
"translateVertexSelection(int,Vector)",tr(
"Translate current vertex selection of an object by given vector."),
77 QString(tr(
"objectId,Vector")).split(
","), QString(tr(
"ID of an object, translation vector")).split(
","));
79 emit setSlotDescription(
"translateFaceSelection(int,Vector)",tr(
"Translate current face selection of an object by given vector."),
80 QString(tr(
"objectId,Vector")).split(
","), QString(tr(
"ID of an object, translation vector")).split(
","));
82 emit setSlotDescription(
"translateEdgeSelection(int,Vector)",tr(
"Translate current edge selection of an object by given vector."),
83 QString(tr(
"objectId,Vector")).split(
","), QString(tr(
"ID of an object, translation vector")).split(
","));
85 emit setSlotDescription(
"transformHandleRegion(int,Matrix4x4)",tr(
"Transform handle region using the specified matrix."),
86 QString(tr(
"objectId,Matrix")).split(
","), QString(tr(
"ID of an object, transformation matrix")).split(
","));
88 emit setSlotDescription(
"transform(int,Matrix4x4)",tr(
"transform object by given matrix."),
89 QString(tr(
"objectId,Matrix")).split(
","), QString(tr(
"ID of an object, transformation matrix")).split(
","));
91 emit setSlotDescription(
"transform(int,IdList,Matrix4x4)",tr(
"transform vertices by given matrix."),
92 QString(tr(
"objectId,VertexHandles,Matrix")).split(
","),
93 QString(tr(
"ID of an object, List of vertex handles, transformation matrix")).split(
","));
95 emit setSlotDescription(
"transformSelection(int,Matrix4x4)",tr(
"transform current selection of an object by given matrix."),
96 QString(tr(
"objectId,Matrix")).split(
","), QString(tr(
"ID of an object, transformation matrix")).split(
","));
98 emit setSlotDescription(
"transformCellSelection(int,Matrix4x4)",tr(
"transform selected cells by given matrix."),
99 QString(tr(
"objectId,Matrix")).split(
","),
100 QString(tr(
"ID of an object, transformation matrix")).split(
","));
102 emit setSlotDescription(
"transformVertexSelection(int,Matrix4x4)",tr(
"transform selected vertices by given matrix."),
103 QString(tr(
"objectId,Matrix")).split(
","),
104 QString(tr(
"ID of an object, transformation matrix")).split(
","));
106 emit setSlotDescription(
"transformFaceSelection(int,Matrix4x4)",tr(
"transform selected faces by given matrix."),
107 QString(tr(
"objectId,Matrix")).split(
","),
108 QString(tr(
"ID of an object, transformation matrix")).split(
","));
110 emit setSlotDescription(
"transformEdgeSelection(int,Matrix4x4)",tr(
"transform selected edges by given matrix."),
111 QString(tr(
"objectId,Matrix")).split(
","),
112 QString(tr(
"ID of an object, transformation matrix")).split(
","));
114 emit setSlotDescription(
"setManipulatorPosition(int,Vector)",tr(
"Set the position of the manipulator."),
115 QString(tr(
"objectId,Position")).split(
","), QString(tr(
"ID of an object, 3D point")).split(
","));
117 emit setSlotDescription(
"setManipulatorDirection(int,Vector, Vector)",tr(
"Set the direction of the manipulator."),
118 QString(tr(
"objectId,Direction, Direction")).split(
","), QString(tr(
"ID of an object, x-direction, y-direction")).split(
","));
120 emit setSlotDescription(
"manipulatorPosition(int)",tr(
"Returns the position of an object's manipulator."),
121 QStringList(tr(
"objectId")), QStringList(tr(
"ID of an object")));
123 emit setSlotDescription(
"manipulatorDirectionX(int)",tr(
"Returns the x-direction of an object's manipulator."),
124 QStringList(tr(
"objectId")), QStringList(tr(
"ID of an object")));
126 emit setSlotDescription(
"manipulatorDirectionY(int)",tr(
"Returns the y-direction of an object's manipulator."),
127 QStringList(tr(
"objectId")), QStringList(tr(
"ID of an object")));
129 emit setSlotDescription(
"manipulatorDirectionZ(int)",tr(
"Returns the z-direction of an object's manipulator."),
130 QStringList(tr(
"objectId")), QStringList(tr(
"ID of an object")));
133 emit setSlotDescription(
"objectRenderingMatrixIdentity(int)",tr(
"Resets the objects rendering matrix to identity."),
134 QStringList(tr(
"objectId")), QStringList(tr(
"ID of an object")));
137 emit setSlotDescription(
"objectRenderingMatrixScale(int,double)",tr(
"Adds a scaling factor to the Object rendering Matrix in the scenegraph."),
138 QStringList(tr(
"objectId;Scaling Factor").split(
";")), QStringList(tr(
"ID of an object; Scaling factor").split(
";")));
140 emit setSlotDescription(
"objectRenderingMatrixTranslate(int,Vector)",tr(
"Adds a translation to the Object rendering Matrix in the scenegraph."),
141 QStringList(tr(
"objectId;translation vector").split(
";")), QStringList(tr(
"ID of an object;Translation vector").split(
";")));
143 emit setSlotDescription(
"objectRenderingMatrixRotate(int,Vector,double)",tr(
"Adds a Rotation to the Object rendering Matrix in the scenegraph."),
144 QStringList(tr(
"objectId;rotation axis;angle").split(
";")), QStringList(tr(
"ID of an object;Rotation axis;angle").split(
";")));
146 emit setSlotDescription(
"getObjectRenderingMatrix(int)",tr(
"Returns the current object transformation matrix from the scenegraph."),
147 QStringList(tr(
"objectId").split(
";")), QStringList(tr(
"ID of an object").split(
";")));
164 emit log(
LOGERR,tr(
"translate : unable to get object") );
171 for (
auto v_it : mesh.vertices())
172 mesh.set_point(v_it,mesh.point(v_it) + _vector );
177 for (
auto v_it : mesh.vertices())
178 mesh.set_point(v_it,mesh.point(v_it) + _vector );
181#ifdef ENABLE_TSPLINEMESH_SUPPORT
182 else if ( object->
dataType( DATA_TSPLINE_MESH ) ) {
184 TSplineMesh& mesh = (*PluginFunctions::tsplineMesh(
object));
185 for (
auto v_it : mesh.vertices())
186 mesh.set_point(v_it,mesh.point(v_it) + _vector );
190#ifdef ENABLE_POLYLINE_SUPPORT
195 for (
int i = 0 ; i < (int)line.
n_vertices(); ++i )
199#ifdef ENABLE_HEXAHEDRALMESH_SUPPORT
203 for (
auto v_it : mesh.vertices())
204 mesh.set_vertex(v_it, mesh.vertex(v_it) + _vector );
207#ifdef ENABLE_TETRAHEDRALMESH_SUPPORT
211 for (
auto v_it : mesh.vertices())
212 mesh.set_vertex(v_it, mesh.vertex(v_it) + _vector );
215#ifdef ENABLE_POLYHEDRALMESH_SUPPORT
219 for (
auto v_it : mesh.vertices())
220 mesh.set_vertex(v_it, mesh.vertex(v_it) + _vector );
223#ifdef ENABLE_BSPLINE_CURVE_SUPPORT
225 std::cerr <<
"Todo : translate BSplineCurve" << std::endl;
231 emit scriptInfo(
"translate( ObjectId , Vector(" +
232 QString::number( _vector[0] ) +
" , " +
233 QString::number( _vector[1] ) +
" , " +
234 QString::number( _vector[2] ) +
" ) )" );
249 emit log(
LOGERR,tr(
"translate : unable to get object") );
257 for (uint i=0; i < _vHandles.size(); i++){
259 mesh.set_point(vh ,mesh.point( vh ) + _vector );
266 for (uint i=0; i < _vHandles.size(); i++){
268 mesh.set_point(vh ,mesh.point( vh ) + _vector );
271#ifdef ENABLE_TSPLINEMESH_SUPPORT
272 else if ( object->
dataType( DATA_TSPLINE_MESH ) ) {
274 TSplineMesh& mesh = (*PluginFunctions::tsplineMesh(
object));
276 for (uint i=0; i < _vHandles.size(); i++){
277 TSplineMesh::VertexHandle vh( _vHandles[i] );
278 mesh.set_point(vh ,mesh.point( vh ) + _vector );
282#ifdef ENABLE_POLYLINE_SUPPORT
289 for (
unsigned int i = 0 ; i < _vHandles.size(); ++i )
290 if ( (_vHandles[i] > 0) && ( _vHandles[i] < max ) )
291 line.
point( _vHandles[i] ) = line.
point( _vHandles[i] ) + _vector;
294#ifdef ENABLE_HEXAHEDRALMESH_SUPPORT
298 for (
unsigned int i = 0; i < _vHandles.size(); ++i) {
300 mesh.set_vertex(v, mesh.vertex(v) + _vector );
304#ifdef ENABLE_TETRAHEDRALMESH_SUPPORT
308 for (
unsigned int i = 0; i < _vHandles.size(); ++i) {
310 mesh.set_vertex(v, mesh.vertex(v) + _vector );
314#ifdef ENABLE_POLYHEDRALMESH_SUPPORT
318 for (
unsigned int i = 0; i < _vHandles.size(); ++i) {
320 mesh.set_vertex(v, mesh.vertex(v) + _vector );
324#ifdef ENABLE_BSPLINE_CURVE_SUPPORT
326 std::cerr <<
"Todo : translate BSplineCurve" << std::endl;
332 emit scriptInfo(
"translate( ObjectId , Vector(" +
333 QString::number( _vector[0] ) +
" , " +
334 QString::number( _vector[1] ) +
" , " +
335 QString::number( _vector[2] ) +
" ) )" );
351 emit log(
LOGERR,tr(
"translate : unable to get object" ));
355 bool noneSelected =
true;
360 for (
auto v_it : mesh.vertices())
361 if ( mesh.status(v_it).selected() ) {
362 noneSelected =
false;
363 mesh.set_point(v_it,mesh.point(v_it) + _vector );
369 for (
auto v_it : mesh.vertices())
370 if ( mesh.status(v_it).selected() ) {
371 noneSelected =
false;
372 mesh.set_point(v_it,mesh.point(v_it) + _vector );
375#ifdef ENABLE_TSPLINEMESH_SUPPORT
376 else if ( object->
dataType( DATA_TSPLINE_MESH ) ) {
378 TSplineMesh& mesh = (*PluginFunctions::tsplineMesh(
object));
379 for (
auto v_it : mesh.vertices())
380 if ( mesh.status(v_it).selected() ) {
381 noneSelected =
false;
382 mesh.set_point(v_it,mesh.point(v_it) + _vector );
386#ifdef ENABLE_POLYLINE_SUPPORT
391 for (
int i = 0 ; i < (int)line.
n_vertices(); ++i )
392 if ( line.vertex_selection(i) ) {
393 noneSelected =
false;
398#ifdef ENABLE_HEXAHEDRALMESH_SUPPORT
403 for (
auto v_it : mesh.vertices())
404 if (statusAttrib[v_it].selected()) {
405 noneSelected =
false;
406 mesh.set_vertex(v_it, mesh.vertex(v_it) + _vector );
410#ifdef ENABLE_TETRAHEDRALMESH_SUPPORT
415 for (
auto v_it : mesh.vertices())
416 if (statusAttrib[v_it].selected()) {
417 noneSelected =
false;
418 mesh.set_vertex(v_it, mesh.vertex(v_it) + _vector );
422#ifdef ENABLE_POLYHEDRALMESH_SUPPORT
427 for (
auto v_it : mesh.vertices())
428 if (statusAttrib[v_it].selected()) {
429 noneSelected =
false;
430 mesh.set_vertex(v_it, mesh.vertex(v_it) + _vector );
434#ifdef ENABLE_BSPLINE_CURVE_SUPPORT
436 std::cerr <<
"Todo : translate BSplineCurve" << std::endl;
445 emit scriptInfo(
"translate( ObjectId , Vector(" +
446 QString::number( _vector[0] ) +
" , " +
447 QString::number( _vector[1] ) +
" , " +
448 QString::number( _vector[2] ) +
" ) )" );
463 emit log(
LOGERR,tr(
"translate : unable to get object" ));
467 bool noneSelected =
true;
474 for (
auto v_it : mesh.vertices())
475 mesh.status(v_it).set_tagged(
false);
477 for (
auto f_it : mesh.faces())
478 if ( mesh.status(f_it).selected() )
480 for(
auto fv_it : f_it.vertices()) {
481 noneSelected =
false;
482 mesh.status(fv_it).set_tagged(
true);
489 for (
auto v_it : mesh.vertices())
490 if ( mesh.status(v_it).tagged() )
491 mesh.set_point(v_it,mesh.point(v_it) + _vector );
498 for (
auto v_it : mesh.vertices())
499 mesh.status(v_it).set_tagged(
false);
501 for (
auto f_it : mesh.faces())
502 if ( mesh.status(f_it).selected() )
504 for(
auto fv_it : f_it.vertices()) {
505 noneSelected =
false;
506 mesh.status(fv_it).set_tagged(
true);
513 for (
auto v_it : mesh.vertices())
514 if ( mesh.status(v_it).tagged() )
515 mesh.set_point(v_it,mesh.point(v_it) + _vector );
517#ifdef ENABLE_TSPLINEMESH_SUPPORT
518 else if ( object->
dataType( DATA_TSPLINE_MESH ) ) {
520 TSplineMesh& mesh = (*PluginFunctions::tsplineMesh(
object));
523 for (
auto v_it : mesh.vertices())
524 mesh.status(v_it).set_tagged(
false);
526 for (
auto f_it : mesh.faces())
527 if ( mesh.status(f_it).selected() )
529 for(
auto fv_it : f_it.vertices()) {
530 noneSelected =
false;
531 mesh.status(fv_it).set_tagged(
true);
538 for (
auto v_it : mesh.vertices())
539 if ( mesh.status(v_it).tagged() )
540 mesh.set_point(v_it,mesh.point(v_it) + _vector );
544 #ifdef ENABLE_POLYLINE_SUPPORT
549 for (
int i = 0 ; i < (int)line.
n_vertices(); ++i )
550 if ( line.vertex_selection(i) ) {
551 noneSelected =
false;
559 #ifdef ENABLE_BSPLINE_CURVE_SUPPORT
561 std::cerr <<
"Todo : translate BSplineCurve" << std::endl;
567 emit scriptInfo(
"translate( ObjectId , Vector(" +
568 QString::number( _vector[0] ) +
" , " +
569 QString::number( _vector[1] ) +
" , " +
570 QString::number( _vector[2] ) +
" ) )" );
586 emit log(
LOGERR,tr(
"translate : unable to get object" ));
590 bool noneSelected =
true;
597 for (
auto v_it : mesh.vertices())
598 mesh.status(v_it).set_tagged(
false);
600 for (
auto e_it : mesh.edges())
601 if ( mesh.status(e_it).selected() )
603 noneSelected =
false;
606 mesh.status( hh.
from() ).set_tagged(
true);
607 mesh.status( hh.
to() ).set_tagged(
true);
613 for (
auto v_it : mesh.vertices())
614 if ( mesh.status(v_it).tagged() ){
615 mesh.set_point(v_it,mesh.point(v_it) + _vector );
623 for (
auto v_it : mesh.vertices())
624 mesh.status(v_it).set_tagged(
false);
626 for (
auto e_it : mesh.edges())
627 if ( mesh.status(e_it).selected() )
629 noneSelected =
false;
632 mesh.status( hh.
from() ).set_tagged(
true);
633 mesh.status( hh.
to() ).set_tagged(
true);
639 for (
auto v_it : mesh.vertices())
640 if ( mesh.status(v_it).tagged() ){
641 mesh.set_point(v_it,mesh.point(v_it) + _vector );
644#ifdef ENABLE_TSPLINEMESH_SUPPORT
645 else if ( object->
dataType( DATA_TSPLINE_MESH ) ) {
647 TSplineMesh& mesh = (*PluginFunctions::tsplineMesh(
object));
650 for (
auto v_it : mesh.vertices())
651 mesh.status(v_it).set_tagged(
false);
653 for (
auto e_it : mesh.edges())
654 if ( mesh.status(e_it).selected() )
656 noneSelected =
false;
659 mesh.status( hh.
from() ).set_tagged(
true);
660 mesh.status( hh.
to() ).set_tagged(
true);
666 for (
auto v_it : mesh.vertices())
667 if ( mesh.status(v_it).tagged() ){
668 mesh.set_point(v_it,mesh.point(v_it) + _vector );
673 #ifdef ENABLE_POLYLINE_SUPPORT
678 for (
int i = 0 ; i < (int)line.
n_vertices(); ++i )
679 if ( line.vertex_selection(i) ) {
680 noneSelected =
false;
688 #ifdef ENABLE_BSPLINE_CURVE_SUPPORT
690 std::cerr <<
"Todo : translate BSplineCurve" << std::endl;
696 emit scriptInfo(
"translate( ObjectId , Vector(" +
697 QString::number( _vector[0] ) +
" , " +
698 QString::number( _vector[1] ) +
" , " +
699 QString::number( _vector[2] ) +
" ) )" );
708 emit log(
LOGERR, tr(
"transformHandleRegion: Unable to get object!"));
739 emit log(
LOGERR,tr(
"transform : unable to get object" ));
750 for (
auto v_it : mesh.vertices()){
758 for (
auto v_it : mesh.vertices()){
763#ifdef ENABLE_TSPLINEMESH_SUPPORT
764 else if ( object->
dataType( DATA_TSPLINE_MESH ) ) {
766 TSplineMesh& mesh = (*PluginFunctions::tsplineMesh(
object));
767 for (
auto v_it : mesh.vertices()){
773#ifdef ENABLE_POLYLINE_SUPPORT
778 for (
int i = 0 ; i < (int)line.
n_vertices(); ++i )
782#ifdef ENABLE_HEXAHEDRALMESH_SUPPORT
787 for (
auto v_it : mesh.vertices()) {
793#ifdef ENABLE_TETRAHEDRALMESH_SUPPORT
798 for (
auto v_it : mesh.vertices()) {
804#ifdef ENABLE_POLYHEDRALMESH_SUPPORT
809 for (
auto v_it : mesh.vertices()) {
815#ifdef ENABLE_BSPLINE_CURVE_SUPPORT
817 std::cerr <<
"Todo : transform BSplineCurve" << std::endl;
824 for (
int i=0; i < 4; i++)
825 for (
int j=0; j < 4; j++)
826 matString +=
" , " + QString::number( _matrix(i,j) );
828 matString = matString.right( matString.length()-3 );
830 emit scriptInfo(
"transform( ObjectId , Matrix4x4(" + matString +
" ) )" );
846 emit log(
LOGERR,tr(
"transform : unable to get object" ));
858 for (uint i=0; i < _vHandles.size(); i++){
868 for (uint i=0; i < _vHandles.size(); i++){
874#ifdef ENABLE_TSPLINEMESH_SUPPORT
875 else if ( object->
dataType( DATA_TSPLINE_MESH ) ) {
877 TSplineMesh& mesh = (*PluginFunctions::tsplineMesh(
object));
879 for (uint i=0; i < _vHandles.size(); i++){
880 TSplineMesh::VertexHandle vh( _vHandles[i] );
886#ifdef ENABLE_POLYLINE_SUPPORT
893 for (
unsigned int i = 0 ; i < _vHandles.size(); ++i )
894 if ( (_vHandles[i] > 0) && ( _vHandles[i] < max ) )
899#ifdef ENABLE_HEXAHEDRALMESH_SUPPORT
904 for (
unsigned int i = 0; i < _vHandles.size(); ++i) {
911#ifdef ENABLE_TETRAHEDRALMESH_SUPPORT
916 for (
unsigned int i = 0; i < _vHandles.size(); ++i) {
923#ifdef ENABLE_POLYHEDRALMESH_SUPPORT
928 for (
unsigned int i = 0; i < _vHandles.size(); ++i) {
935#ifdef ENABLE_BSPLINE_CURVE_SUPPORT
937 std::cerr <<
"Todo : transform BSplineCurve" << std::endl;
944 for (
int i=0; i < 4; i++)
945 for (
int j=0; j < 4; j++)
946 matString +=
" , " + QString::number( _matrix(i,j) );
948 matString = matString.right( matString.length()-3 );
950 emit scriptInfo(
"transform( ObjectId , Matrix4x4(" + matString +
" ) )" );
967 emit log(
LOGERR,tr(
"transform : unable to get object") );
975 bool noneSelected =
true;
979 for (
auto v_it : mesh.vertices())
980 if ( mesh.status(v_it).selected() )
982 noneSelected =
false;
990 for (
auto v_it : mesh.vertices())
991 if ( mesh.status(v_it).selected() )
993 noneSelected =
false;
998#ifdef ENABLE_TSPLINEMESH_SUPPORT
999 else if ( object->
dataType( DATA_TSPLINE_MESH ) ) {
1001 TSplineMesh& mesh = (*PluginFunctions::tsplineMesh(
object));
1002 for (
auto v_it : mesh.vertices())
1003 if ( mesh.status(v_it).selected() )
1005 noneSelected =
false;
1007 mesh.set_normal(v_it, normalMatrix.
transform_vector( mesh.normal(v_it) ) );
1011#ifdef ENABLE_POLYLINE_SUPPORT
1016 for (
int i = 0 ; i < (int)line.
n_vertices(); ++i )
1017 if ( line.vertex_selection(i) ) {
1018 noneSelected =
false;
1023#ifdef ENABLE_BSPLINE_CURVE_SUPPORT
1025 std::cerr <<
"Todo : transform BSplineCurve" << std::endl;
1028#ifdef ENABLE_HEXAHEDRALMESH_SUPPORT
1033 for (
auto v_it : mesh.vertices())
1034 if ( statusAttrib[v_it].selected() )
1036 noneSelected =
false;
1037 mesh.set_vertex(v_it, _matrix.
transform_point ( mesh.vertex(v_it) ) );
1042#ifdef ENABLE_TETRAHEDRALMESH_SUPPORT
1047 for (
auto v_it : mesh.vertices())
1048 if ( statusAttrib[v_it].selected() )
1050 noneSelected =
false;
1051 mesh.set_vertex(v_it, _matrix.
transform_point ( mesh.vertex(v_it) ) );
1056#ifdef ENABLE_POLYHEDRALMESH_SUPPORT
1061 for (
auto v_it : mesh.vertices())
1062 if ( statusAttrib[v_it].selected() )
1064 noneSelected =
false;
1065 mesh.set_vertex(v_it, _matrix.
transform_point ( mesh.vertex(v_it) ) );
1077 for (
int i=0; i < 4; i++)
1078 for (
int j=0; j < 4; j++)
1079 matString +=
" , " + QString::number( _matrix(i,j) );
1081 matString = matString.right( matString.length()-3 );
1083 emit scriptInfo(
"transformVertexSelection( ObjectId , Matrix4x4(" + matString +
" ) )" );
1101 emit log(
LOGERR,tr(
"transform : unable to get object") );
1109 bool noneSelected =
true;
1115 for (
auto v_it : mesh.vertices())
1116 mesh.status(v_it).set_tagged(
false);
1118 for (
auto f_it : mesh.faces())
1119 if ( mesh.status(f_it).selected() )
1121 noneSelected =
false;
1122 for(
auto fv_it : f_it.vertices())
1123 mesh.status(fv_it).set_tagged(
true);
1126 for (
auto v_it : mesh.vertices())
1127 if ( mesh.status(v_it).tagged() ){
1129 mesh.set_normal(v_it, normalMatrix.
transform_vector( mesh.normal(v_it) ) );
1137 for (
auto v_it : mesh.vertices())
1138 mesh.status(v_it).set_tagged(
false);
1140 for (
auto f_it : mesh.faces())
1141 if ( mesh.status(f_it).selected() )
1143 noneSelected =
false;
1144 for(
auto fv_it : f_it.vertices())
1145 mesh.status(fv_it).set_tagged(
true);
1148 for (
auto v_it : mesh.vertices())
1149 if ( mesh.status(v_it).tagged() ){
1151 mesh.set_normal(v_it, normalMatrix.
transform_vector( mesh.normal(v_it) ) );
1154#ifdef ENABLE_TSPLINEMESH_SUPPORT
1155 else if ( object->
dataType( DATA_TSPLINE_MESH ) ) {
1157 TSplineMesh& mesh = (*PluginFunctions::tsplineMesh(
object));
1160 for (
auto v_it : mesh.vertices())
1161 mesh.status(v_it).set_tagged(
false);
1163 for (
auto f_it : mesh.faces())
1164 if ( mesh.status(f_it).selected() )
1166 noneSelected =
false;
1167 for(
auto fv_it : f_it.verices())
1168 mesh.status(fv_it).set_tagged(
true);
1171 for (
auto v_it : mesh.vertices())
1172 if ( mesh.status(v_it).tagged() ){
1174 mesh.set_normal(v_it, normalMatrix.
transform_vector( mesh.normal(v_it) ) );
1178#ifdef ENABLE_HEXAHEDRALMESH_SUPPORT
1186 for (
auto v_it : mesh.vertices())
1187 statusAttrib[v_it].set_tagged(
false);
1190 for (
auto f_it : mesh.faces())
1191 if ( statusAttrib[f_it].selected() )
1193 noneSelected =
false;
1195 statusAttrib[*hfv_it].set_tagged(
true);
1198 for (
auto v_it : mesh.vertices())
1199 if ( statusAttrib[v_it].tagged() )
1201 mesh.set_vertex(v_it, _matrix.
transform_point ( mesh.vertex(v_it) ) );
1207#ifdef ENABLE_TETRAHEDRALMESH_SUPPORT
1215 for (
auto v_it : mesh.vertices())
1216 statusAttrib[v_it].set_tagged(
false);
1218 for (
auto f_it : mesh.faces())
1219 if ( statusAttrib[f_it].selected() )
1221 noneSelected =
false;
1223 statusAttrib[*hfv_it].set_tagged(
true);
1226 for (
auto v_it : mesh.vertices())
1227 if ( statusAttrib[v_it].tagged() )
1229 mesh.set_vertex(v_it, _matrix.
transform_point ( mesh.vertex(v_it) ) );
1235#ifdef ENABLE_POLYHEDRALMESH_SUPPORT
1243 for (
auto v_it : mesh.vertices())
1244 statusAttrib[v_it].set_tagged(
false);
1246 for (
auto f_it : mesh.faces())
1247 if ( statusAttrib[f_it].selected() )
1249 noneSelected =
false;
1251 statusAttrib[*hfv_it].set_tagged(
true);
1254 for (
auto v_it : mesh.vertices())
1255 if ( statusAttrib[v_it].tagged() )
1257 mesh.set_vertex(v_it, _matrix.
transform_point ( mesh.vertex(v_it) ) );
1269 for (
int i=0; i < 4; i++)
1270 for (
int j=0; j < 4; j++)
1271 matString +=
" , " + QString::number( _matrix(i,j) );
1273 matString = matString.right( matString.length()-3 );
1275 emit scriptInfo(
"transformFaceSelection( ObjectId , Matrix4x4(" + matString +
" ) )" );
1293 emit log(
LOGERR,tr(
"transform : unable to get object" ) );
1301 bool noneSelected =
true;
1307 for (
auto v_it : mesh.vertices())
1308 mesh.status(v_it).set_tagged(
false);
1310 for (
auto e_it : mesh.edges())
1311 if ( mesh.status(e_it).selected() )
1313 noneSelected =
false;
1316 mesh.status( hh.
from() ).set_tagged(
true);
1317 mesh.status( hh.
to() ).set_tagged(
true);
1320 for (
auto v_it : mesh.vertices())
1321 if ( mesh.status(v_it).tagged() ){
1323 mesh.set_normal(v_it, normalMatrix.
transform_vector( mesh.normal(v_it) ) );
1331 for (
auto v_it : mesh.vertices())
1332 mesh.status(v_it).set_tagged(
false);
1334 for (
auto e_it : mesh.edges())
1335 if ( mesh.status(e_it).selected() )
1337 noneSelected =
false;
1340 mesh.status( hh.
from() ).set_tagged(
true);
1341 mesh.status( hh.
to() ).set_tagged(
true);
1344 for (
auto v_it : mesh.vertices())
1345 if ( mesh.status(v_it).tagged() ){
1347 mesh.set_normal(v_it, normalMatrix.
transform_vector( mesh.normal(v_it) ) );
1350#ifdef ENABLE_TSPLINEMESH_SUPPORT
1351 else if ( object->
dataType( DATA_TSPLINE_MESH ) ) {
1353 TSplineMesh& mesh = (*PluginFunctions::tsplineMesh(
object));
1356 for (
auto v_it : mesh.vertices())
1357 mesh.status(v_it).set_tagged(
false);
1359 for (
auto e_it : mesh.edges())
1360 if ( mesh.status(e_it).selected() )
1362 noneSelected =
false;
1365 mesh.status( hh.
from() ).set_tagged(
true);
1366 mesh.status( hh.
to() ).set_tagged(
true);
1369 for (
auto v_it : mesh.vertices())
1370 if ( mesh.status(v_it).tagged() ){
1372 mesh.set_normal(v_it, normalMatrix.
transform_vector( mesh.normal(v_it) ) );
1376#ifdef ENABLE_HEXAHEDRALMESH_SUPPORT
1384 for (
auto v_it : mesh.vertices())
1385 statusAttrib[v_it].set_tagged(
false);
1387 for (
auto e_it : mesh.edges())
1388 if ( statusAttrib[e_it].selected() )
1390 noneSelected =
false;
1392 statusAttrib[e.from_vertex()].set_tagged(
true);
1393 statusAttrib[e.to_vertex()].set_tagged(
true);
1396 for (
auto v_it : mesh.vertices())
1397 if ( statusAttrib[v_it].tagged() )
1399 mesh.set_vertex(v_it, _matrix.
transform_point ( mesh.vertex(v_it) ) );
1405#ifdef ENABLE_TETRAHEDRALMESH_SUPPORT
1413 for (
auto v_it : mesh.vertices())
1414 statusAttrib[v_it].set_tagged(
false);
1416 for (
auto e_it : mesh.edges())
1417 if ( statusAttrib[e_it].selected() )
1419 noneSelected =
false;
1421 statusAttrib[e.from_vertex()].set_tagged(
true);
1422 statusAttrib[e.to_vertex()].set_tagged(
true);
1425 for (
auto v_it : mesh.vertices())
1426 if ( statusAttrib[v_it].tagged() )
1428 mesh.set_vertex(v_it, _matrix.
transform_point ( mesh.vertex(v_it) ) );
1434#ifdef ENABLE_POLYHEDRALMESH_SUPPORT
1442 for (
auto v_it : mesh.vertices())
1443 statusAttrib[v_it].set_tagged(
false);
1445 for (
auto e_it : mesh.edges())
1446 if ( statusAttrib[e_it].selected() )
1448 noneSelected =
false;
1450 statusAttrib[e.from_vertex()].set_tagged(
true);
1451 statusAttrib[e.to_vertex()].set_tagged(
true);
1454 for (
auto v_it : mesh.vertices())
1455 if ( statusAttrib[v_it].tagged() )
1457 mesh.set_vertex(v_it, _matrix.
transform_point ( mesh.vertex(v_it) ) );
1464 #ifdef ENABLE_POLYLINE_SUPPORT
1466 std::cerr <<
"Todo : transform PolyLine" << std::endl;
1469 #ifdef ENABLE_BSPLINE_CURVE_SUPPORT
1471 std::cerr <<
"Todo : transform BSplineCurve" << std::endl;
1481 for (
int i=0; i < 4; i++)
1482 for (
int j=0; j < 4; j++)
1483 matString +=
" , " + QString::number( _matrix(i,j) );
1485 matString = matString.right( matString.length()-3 );
1487 emit scriptInfo(
"transformEdgeSelection( ObjectId , Matrix4x4(" + matString +
" ) )" );
1504 emit log(
LOGERR,tr(
"transform : unable to get object") );
1512 bool noneSelected =
true;
1514#ifdef ENABLE_HEXAHEDRALMESH_SUPPORT
1522 for (
auto v_it : mesh.vertices())
1523 statusAttrib[v_it].set_tagged(
false);
1525 for (
auto c_it : mesh.cells())
1526 if ( statusAttrib[c_it].selected() )
1528 noneSelected =
false;
1530 statusAttrib[*cv_it].set_tagged(
true);
1533 for (
auto v_it : mesh.vertices())
1534 if ( statusAttrib[v_it].tagged() )
1536 mesh.set_vertex(v_it, _matrix.
transform_point ( mesh.vertex(v_it) ) );
1542#ifdef ENABLE_TETRAHEDRALMESH_SUPPORT
1550 for (
auto v_it : mesh.vertices())
1551 statusAttrib[v_it].set_tagged(
false);
1553 for (
auto c_it : mesh.cells())
1554 if ( statusAttrib[c_it].selected() )
1556 noneSelected =
false;
1558 statusAttrib[*cv_it].set_tagged(
true);
1561 for (
auto v_it : mesh.vertices())
1562 if ( statusAttrib[v_it].tagged() )
1564 mesh.set_vertex(v_it, _matrix.
transform_point ( mesh.vertex(v_it) ) );
1570#ifdef ENABLE_POLYHEDRALMESH_SUPPORT
1578 for (
auto v_it : mesh.vertices())
1579 statusAttrib[v_it].set_tagged(
false);
1581 for (
auto c_it : mesh.cells())
1582 if ( statusAttrib[c_it].selected() )
1584 noneSelected =
false;
1586 statusAttrib[*cv_it].set_tagged(
true);
1589 for (
auto v_it : mesh.vertices())
1590 if ( statusAttrib[v_it].tagged() )
1592 mesh.set_vertex(v_it, _matrix.
transform_point ( mesh.vertex(v_it) ) );
1604 for (
int i=0; i < 4; i++)
1605 for (
int j=0; j < 4; j++)
1606 matString +=
" , " + QString::number( _matrix(i,j) );
1608 matString = matString.right( matString.length()-3 );
1610 emit scriptInfo(
"transformCellSelection( ObjectId , Matrix4x4(" + matString +
" ) )" );
1627 emit log(
LOGERR,tr(
"setManipulatorPosition : unable to get object") );
1635 object->manipPlaced(
true );
1637 object->manipulatorNode()->loadIdentity();
1638 object->manipulatorNode()->set_center(_position);
1639 object->manipulatorNode()->set_draw_cylinder(
true);
1641 object->manipulatorNode()->show();
1653 emit scriptInfo(
"setManipulatorPosition( ObjectId , Vector(" +
1654 QString::number( _position[0] ) +
" , " +
1655 QString::number( _position[1] ) +
" , " +
1656 QString::number( _position[2] ) +
" ) )" );
1671 emit log(
LOGERR,tr(
"manipulatorPosition : unable to get object" ));
1675 return (
Vector)
object->manipulatorNode()->center();
1691 emit log(
LOGERR,tr(
"setManipulatorDirection : unable to get object") );
1696 emit log(
LOGERR,tr(
"setManipulatorDirection : manipulator position has to be set first" ));
1700 object->manipulatorNode()->set_direction(_directionX, _directionY);
1702 emit scriptInfo(
"setManipulatorDirection( ObjectId , Vector(" +
1703 QString::number( _directionX[0] ) +
" , " +
1704 QString::number( _directionX[1] ) +
" , " +
1705 QString::number( _directionX[2] ) +
" ), Vector(" +
1706 QString::number( _directionY[0] ) +
" , " +
1707 QString::number( _directionY[1] ) +
" , " +
1708 QString::number( _directionY[2] ) +
" ) )" );
1723 emit log(
LOGERR,tr(
"manipulatorDirection : unable to get object" ));
1727 return (
Vector)
object->manipulatorNode()->directionX();
1742 emit log(
LOGERR,tr(
"manipulatorDirection : unable to get object" ));
1746 return (
Vector)
object->manipulatorNode()->directionY();
1761 emit log(
LOGERR,tr(
"manipulatorDirection : unable to get object" ));
1765 return (
Vector)
object->manipulatorNode()->directionZ();
1774 emit log(
LOGERR,tr(
"objectRenderingMatrixIdentity : unable to get object" ));
1778 object->manipulatorNode()->loadIdentity();
1789 emit log(
LOGERR,tr(
"objectRenderingMatrixScale : unable to get object" ));
1793 object->manipulatorNode()->scale(_s);
1804 emit log(
LOGERR,tr(
"objectRenderingMatrixTranslate : unable to get object" ));
1808 object->manipulatorNode()->translate(_translation);
1819 emit log(
LOGERR,tr(
"objectRenderingMatrixRotate : unable to get object" ));
1823 object->manipulatorNode()->rotate(_angle,_axis);
1834 emit log(
LOGERR,tr(
"getObjectRenderingMatrix : unable to get object" ));
1838 return object->manipulatorNode()->matrix();
#define DATA_BSPLINE_CURVE
ACG::Matrix4x4d Matrix4x4
Standard Type for a 4x4 Matrix used for scripting.
ACG::Vec3d Vector
Standard Type for 3d Vector used for scripting.
std::vector< int > IdList
Standard Type for id Lists used for scripting.
Functions for modifying a Mesh.
#define DATA_HEXAHEDRAL_MESH
#define DATA_POLYHEDRAL_MESH
#define DATA_TETRAHEDRAL_MESH
#define DATA_TRIANGLE_MESH
VectorT< T, 3 > transform_vector(const VectorT< T, 3 > &_v) const
transform vector (x',y',z',0) = A * (x,y,z,0)
bool invert()
matrix inversion (returns true on success)
void transpose()
transpose matrix
VectorT< T, 3 > transform_point(const VectorT< T, 3 > &_v) const
transform point (x',y',z',1) = M * (x,y,z,1)
size_t n_vertices() const
Get number of vertices.
Point & point(unsigned int _i)
Get a point of the polyline.
QtTranslationManipulatorNode * manipulatorNode()
bool manipPlaced()
Check if the manipulator has been placed.
bool dataType(DataType _type) const
void objectRenderingMatrixTranslate(int _objectId, Vector _translation)
Adds a scaling factor to the Object rendering Matrix in the scenegraph.
void translateEdgeSelection(int _objectId, Vector _vector)
translate current edge selection of an Object by a given vector
void objectRenderingMatrixIdentity(int _objectId)
Sets the Object Matrix in the scenegraph to identity.
void setDescriptions()
Set Descriptions for scriptable functions.
Vector manipulatorDirectionX(int _objectId)
Get the x-direction of the manipulator.
bool transformCellSelection(int _objectId, Matrix4x4 _matrix)
transform current selection of an Object by a given matrix
void translate(int _objectId, Vector _vector)
translate an Object by a given vector
Matrix4x4 getObjectRenderingMatrix(int _objectId)
Gets the Object Matrix in the scenegraph.
Vector manipulatorPosition(int _objectId)
Get the position of the manipulator.
double manip_size_modifier_
Modifier for the Size (changed by Mousewheel Events)
void objectRenderingMatrixRotate(int _objectId, Vector _axis, double _angle)
Adds a scaling factor to the Object rendering Matrix in the scenegraph.
void objectRenderingMatrixScale(int _objectId, double _s)
Adds a scaling factor to the Object rendering Matrix in the scenegraph.
bool transformVertexSelection(int _objectId, Matrix4x4 _matrix)
transform current selection of an Object by a given matrix
Vector manipulatorDirectionY(int _objectId)
Get the y-direction of the manipulator.
void ManipulatorPositionChanged(QtTranslationManipulatorNode *_node)
update object when its manipulator changes position
bool transformEdgeSelection(int _objectId, Matrix4x4 _matrix)
transform current selection of an Object by a given matrix
int lastActiveManipulator_
Stores the last manipulator which has been clicked ( used for the toolbox dialog)
Vector manipulatorDirectionZ(int _objectId)
Get the z-direction of the manipulator.
void manipulatorMoved(QtTranslationManipulatorNode *_node, QMouseEvent *_event)
move the object when its manipulator moves
double manip_size_
Size for the manipulators.
void translateFaceSelection(int _objectId, Vector _vector)
translate current face selection of an Object by a given vector
void setManipulatorPosition(int _objectId, Vector _position)
Set the position of the manipulator.
void setManipulatorDirection(int _objectId, Vector _directionX, Vector _directionY)
Set the direction of the manipulator.
void transformHandleRegion(int _objectId, Matrix4x4 _matrix)
Transform handle region using the given transformation matrix.
void translateVertexSelection(int _objectId, Vector _vector)
translate current vertex selection of an Object by a given vector
void transform(int _objectId, Matrix4x4 _matrix)
transform an Object by a given matrix
bool transformFaceSelection(int _objectId, Matrix4x4 _matrix)
transform current selection of an Object by a given matrix
Kernel::VertexHandle VertexHandle
Handle for referencing the corresponding item.
const UpdateType UPDATE_VISIBILITY(UpdateTypeSet(2))
This is the update identifier for global Object visibility ( show/hide )
const UpdateType UPDATE_GEOMETRY(UpdateTypeSet(4))
Geometry updated.
void transformHandleVertices(ACG::Matrix4x4d _matrix, MeshT &_mesh)
double sceneRadius()
Returns the current scene radius from the active examiner widget.
PolyLine * polyLine(BaseObjectData *_object)
Get a poly Line from an object.
bool getObject(const int _identifier, BaseObject *&_object)
Get the object which has the given identifier.
TriMesh * triMesh(BaseObjectData *_object)
Get a triangle mesh from an object.
PolyhedralMesh * polyhedralMesh(BaseObjectData *_object)
Get an PolyhedralMesh from an object.
PolyMesh * polyMesh(BaseObjectData *_object)
Get a poly mesh from an object.
HexahedralMesh * hexahedralMesh(BaseObjectData *_object)
Get an HexahedralMesh from an object.
TetrahedralMesh * tetrahedralMesh(BaseObjectData *_object)
Get an TetrahedralMesh from an object.
SmartVertexHandle from() const
Returns vertex at start of halfedge.
SmartVertexHandle to() const
Returns vertex pointed to by halfedge.