Developer Documentation
PluginCommunication.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
45
46
47//=============================================================================
48//
49// CLASS Core - IMPLEMENTATION of Comunication with plugins
50//
51//=============================================================================
52
53
54//== INCLUDES =================================================================
55
56#include "Core.hh"
57
58#include "OpenFlipper/BasePlugin/PluginFunctionsCore.hh"
59#include <stdexcept>
60
61//== IMPLEMENTATION ==========================================================
62
63//========================================================================================
64// === Object List Communication =======================
65//========================================================================================
66
75void Core::slotObjectUpdated(int _identifier, const UpdateType& _type) {
76 if ( OpenFlipper::Options::doSlotDebugging() ) {
77 if ( sender() != 0 ) {
78 if ( sender()->metaObject() != 0 ) {
79 emit log(LOGINFO,"updatedObject( " + QString::number(_identifier) + ", " + updateTypeName(_type)
80 + tr(" ) called by ") + QString( sender()->metaObject()->className() ) );
81 }
82 } else {
83 emit log(LOGINFO,"updatedObject( " + QString::number(_identifier) + ", " + updateTypeName(_type) + tr(" ) called by Core") );
84 }
85 }
86
87 // Disable redraws as everything here has to update the object only once
88 OpenFlipper::Options::redrawDisabled(true);
89
90 // If we are called for a special object, we update it ourself so the Plugins dont need to do that.
91 BaseObject* object = 0;
92 if ( _identifier != -1 ) {
93 if ( !PluginFunctions::getObject(_identifier,object) ) {
94 emit log(LOGERR,tr("updated_objects called for non existing object with id : ") + QString::number(_identifier) );
95 return;
96 }
97 }
98
99
100 // If the identifier is -1 we force an update of all objects in the scene (Bad idea for scenes with many objects)
101 if ( _identifier == -1 ) {
102
103 if ( sender() != 0 ) {
104 if ( sender()->metaObject() != 0 ) {
105 emit log(LOGWARN,"updatedObject( " + QString::number(_identifier) + ", " + updateTypeName(_type)
106 + tr(" ) called by ") + QString( sender()->metaObject()->className() + tr(" which is inefficient)") ) );
107 }
108 } else {
109 emit log(LOGWARN,"updatedObject( " + QString::number(_identifier) + ", " + updateTypeName(_type) + tr(" ) called by Core, which is inefficient!") );
110 }
111
113
114 // just inform the plugins as we don't do anything else (Do deprecated and new updatedObjects here)
115 emit signalObjectUpdated(o_it->id());
116 emit signalObjectUpdated(o_it->id(), _type);
117
118 // Call the objects update function
119 o_it->update();
120
121 }
122 } else {
123 // just inform the plugins as we don't do anything else (Do deprecated and new updatedObjects here)
124 emit signalObjectUpdated(_identifier);
125 emit signalObjectUpdated(_identifier, _type);
126 }
127
128
129 // If we have an single object, call it's update function
130 if ( object != 0 )
131 object->update(_type);
132
133 // Reenable redraws
134 OpenFlipper::Options::redrawDisabled(false);
135
136
137 // Reset scenegraph but keep scene center!
138 resetScenegraph(false);
139
140 updateView();
141}
142
144
145 // tell plugins
146 emit visibilityChanged( _id );
147
148 // Reset scenegraph but keep scene center!
149 resetScenegraph(false);
150
151 updateView();
152}
153
157{
158 // just inform the plugins as we don't do anything else
159 emit objectSelectionChanged(_id);
160
161 // Send via second interface
163
164 updateView();
165}
166
168{
169 emit objectPropertiesChanged(_id);
170}
171
172//========================================================================================
173// === Texture Communication ===========================
174//========================================================================================
175
176
180void Core::slotAddTexture( QString _textureName , QString _filename, uint _dimension, int _id) {
181
182 if (QThread::currentThread() != QApplication::instance()->thread())
183 {
184 //execute method in main thread
185 QMetaObject::invokeMethod(this,"slotAddTexture",Qt::BlockingQueuedConnection, Q_ARG(QString, _textureName), Q_ARG(QString, _filename), Q_ARG(uint, _dimension), Q_ARG(int, _id));
186 return;
187 }
188
189 if ( OpenFlipper::Options::doSlotDebugging() ) {
190 if ( sender() != 0 ) {
191 if ( sender()->metaObject() != 0 ) {
192 emit log(LOGINFO,"addTexture( " + _textureName + "," + _filename + "," + QString::number(_dimension) + ", " + QString::number(_id) + tr(" ) called by ") +
193 QString( sender()->metaObject()->className() ) );
194 }
195 } else {
196 emit log(LOGINFO,"addTexture( " + _textureName + "," + _filename + "," + QString::number(_dimension) + ", " + QString::number(_id) + tr(" ) called by Core") );
197 }
198 }
199
200 emit addTexture(_textureName , _filename,_dimension,_id);
201}
202
206void Core::slotAddTexture( QString _textureName , QImage _image, uint _dimension, int _id) {
207
208 if (QThread::currentThread() != QApplication::instance()->thread())
209 {
210 //execute method in main thread
211 QMetaObject::invokeMethod(this,"slotAddTexture",Qt::BlockingQueuedConnection, Q_ARG(QString, _textureName), Q_ARG(QImage, _image), Q_ARG(uint, _dimension), Q_ARG(int, _id));
212 return;
213 }
214
215 if ( OpenFlipper::Options::doSlotDebugging() ) {
216 if ( sender() != 0 ) {
217 if ( sender()->metaObject() != 0 ) {
218 emit log(LOGINFO,"addTexture( " + _textureName + ",QImage," + QString::number(_dimension) + ", " + QString::number(_id) + tr(" ) called by ") +
219 QString( sender()->metaObject()->className() ) );
220 }
221 } else {
222 emit log(LOGINFO,"addTexture( " + _textureName + ",image," + QString::number(_dimension) + ", " + QString::number(_id) + tr(" ) called by Core") );
223 }
224 }
225
226 emit addTexture(_textureName , _image,_dimension,_id);
227}
228
232void Core::slotAddTexture( QString _textureName , QString _filename, uint _dimension) {
233
234 if (QThread::currentThread() != QApplication::instance()->thread())
235 {
236 //execute method in main thread
237 QMetaObject::invokeMethod(this,"slotAddTexture",Qt::BlockingQueuedConnection, Q_ARG(QString, _textureName), Q_ARG(QString, _filename), Q_ARG(uint, _dimension));
238 return;
239 }
240
241 if ( OpenFlipper::Options::doSlotDebugging() ) {
242 if ( sender() != 0 ) {
243 if ( sender()->metaObject() != 0 ) {
244 emit log(LOGINFO,"slotAddTexture( " + _textureName + "," + _filename + "," + QString::number(_dimension) + tr(" ) called by ") +
245 QString( sender()->metaObject()->className() ) );
246 }
247 } else {
248 emit log(LOGINFO,"slotAddTexture( " + _textureName + "," + _filename + "," +", " + QString::number(_dimension) + tr(" ) called by Core") );
249 }
250 }
251
252 emit addTexture(_textureName , _filename,_dimension);
253}
254
258void Core::slotAddTexture( QString _textureName , QImage _image, uint _dimension) {
259
260 if (QThread::currentThread() != QApplication::instance()->thread())
261 {
262 //execute method in main thread
263 QMetaObject::invokeMethod(this,"slotAddTexture",Qt::BlockingQueuedConnection, Q_ARG(QString, _textureName), Q_ARG(QImage, _image), Q_ARG(uint, _dimension));
264 return;
265 }
266
267 if ( OpenFlipper::Options::doSlotDebugging() ) {
268 if ( sender() != 0 ) {
269 if ( sender()->metaObject() != 0 ) {
270 emit log(LOGINFO,"slotAddTexture( " + _textureName + ",_image," + QString::number(_dimension) + tr(" ) called by ") +
271 QString( sender()->metaObject()->className() ) );
272 }
273 } else {
274 emit log(LOGINFO,"slotAddTexture( " + _textureName + ",_image," +", " + QString::number(_dimension) + tr(" ) called by Core") );
275 }
276 }
277
278 emit addTexture(_textureName , _image,_dimension);
279}
280
284void Core::slotUpdateTexture( const QString& _name , int _identifier){
285
286 if ( OpenFlipper::Options::doSlotDebugging() ) {
287 if ( sender() != 0 ) {
288 if ( sender()->metaObject() != 0 ) {
289 emit log(LOGINFO,"slotUpdateTexture( " + _name + " , " + QString::number(_identifier) + tr(" ) called by ") +
290 QString( sender()->metaObject()->className() ) );
291 }
292 }
293 }
294
295 emit updateTexture(_name, _identifier);
296}
297
298void Core::slotMultiTextureAdded( const QString& _textureGroup , const QString& _name , const QString& _filename , int _id , int* _textureId ) {
299 slotMultiTextureAdded(_textureGroup, _name, _filename, _id, *_textureId);
300}
301
302void Core::slotMultiTextureAdded( QString _textureGroup , QString _name , QString _filename , int _id , int& _textureId ) {
303
304 if (QThread::currentThread() != QApplication::instance()->thread())
305 {
306 //execute method in main thread
307 QMetaObject::invokeMethod(this,"slotMultiTextureAdded",Qt::BlockingQueuedConnection, Q_ARG(QString, _textureGroup), Q_ARG(QString, _name), Q_ARG(QString, _filename), Q_ARG(int, _id), Q_ARG(int*, &_textureId));
308 return;
309 }
310
311 if ( OpenFlipper::Options::doSlotDebugging() ) {
312 if ( sender() != 0 ) {
313 if ( sender()->metaObject() != 0 ) {
314 emit log(LOGINFO,"slotMultiTextureAdded( " + _textureGroup + ", " + _name + "," + _filename + "," + QString::number(_id) + tr(" ) called by ") +
315 QString( sender()->metaObject()->className() ) );
316 }
317 } else {
318 emit log(LOGINFO,"slotMultiTextureAdded( " + _textureGroup + ", " + _name + "," + _filename + "," + QString::number(_id) + tr(" ) called by Core") );
319 }
320 }
321
322 emit addMultiTexture( _textureGroup , _name , _filename , _id , _textureId );
323}
324
325void Core::slotMultiTextureAdded( QString _textureGroup , QString _name , QImage _image , int _id , int& _textureId ) {
326
327 if (QThread::currentThread() != QApplication::instance()->thread())
328 {
329 //execute method in main thread
330 QMetaObject::invokeMethod(this,"slotMultiTextureAdded",Qt::BlockingQueuedConnection, Q_ARG(QString, _textureGroup), Q_ARG(QString, _name), Q_ARG(QImage, _image), Q_ARG(int, _id), Q_ARG(int*, &_textureId));
331 return;
332 }
333
334 if ( OpenFlipper::Options::doSlotDebugging() ) {
335 if ( sender() != 0 ) {
336 if ( sender()->metaObject() != 0 ) {
337 emit log(LOGINFO,"slotMultiTextureAdded( " + _textureGroup + ", " + _name + ",_image," + QString::number(_id) + tr(" ) called by ") +
338 QString( sender()->metaObject()->className() ) );
339 }
340 } else {
341 emit log(LOGINFO,"slotMultiTextureAdded( " + _textureGroup + ", " + _name + ",_image," + QString::number(_id) + tr(" ) called by Core") );
342 }
343 }
344
345 emit addMultiTexture( _textureGroup , _name , _image , _id , _textureId );
346}
347
352 emit updateAllTextures();
353}
354
358void Core::slotSetTextureMode(const QString& _textureName, const QString& _mode, int _id) {
359
360 if ( OpenFlipper::Options::doSlotDebugging() ) {
361 if ( sender() != 0 ) {
362 if ( sender()->metaObject() != 0 ) {
363 emit log(LOGINFO,"slotSetTextureMode( " + _textureName + " , " + _mode + " , " + QString::number(_id) + tr(" ) called by ") +
364 QString( sender()->metaObject()->className() ) );
365 }
366 }
367 }
368
369 emit setTextureMode(_textureName,_mode,_id);
370}
371
375void Core::slotSetTextureMode(const QString& _textureName ,const QString& _mode) {
376
377 if ( OpenFlipper::Options::doSlotDebugging() ) {
378 if ( sender() != 0 ) {
379 if ( sender()->metaObject() != 0 ) {
380 emit log(LOGINFO,"slotSetTextureMode( " + _textureName + " , " + _mode + tr(" ) called by ") +
381 QString( sender()->metaObject()->className() ) );
382 }
383 }
384 }
385
386 emit setTextureMode(_textureName,_mode);
387}
388
392void Core::slotTextureUpdated(const QString& _textureName , int _identifier ) {
393 if ( OpenFlipper::Options::doSlotDebugging() ) {
394 if ( sender() != 0 ) {
395 if ( sender()->metaObject() != 0 ) {
396 emit log(LOGINFO,"slotTextureUpdated( " + _textureName + " , " + QString::number(_identifier) + tr(" ) called by ") +
397 QString( sender()->metaObject()->className() ) );
398 }
399 }
400 }
401 emit updatedTextures(_textureName,_identifier);
402}
403
406void Core::slotSwitchTexture( const QString& _textureName, int _id ) {
407 if ( OpenFlipper::Options::doSlotDebugging() ) {
408 if ( sender() != 0 ) {
409 if ( sender()->metaObject() != 0 ) {
410 emit log(LOGINFO,"switchTexture( " + _textureName + " , " + QString::number(_id) + tr(" ) called by ") +
411 QString( sender()->metaObject()->className() ) );
412 }
413 }
414 }
415 emit switchTexture(_textureName, _id);
416}
417
420void Core::slotSwitchTexture( const QString& _textureName ) {
421 if ( OpenFlipper::Options::doSlotDebugging() ) {
422 if ( sender() != 0 ) {
423 if ( sender()->metaObject() != 0 ) {
424 emit log(LOGINFO,"switchTexture( " + _textureName + tr(" ) called by ") +
425 QString( sender()->metaObject()->className() ) );
426 }
427 }
428 }
429 emit switchTexture(_textureName);
430}
431
432
435void Core::slotTextureChangeImage( const QString& _textureName , QImage& _image ) {
436 emit textureChangeImage( _textureName ,_image );
437}
438
441void Core::slotTextureChangeImage( const QString &_textureName , QImage& _image , int _id ) {
442 emit textureChangeImage( _textureName , _image , _id );
443}
444
447void Core::slotTextureGetImage( const QString& _textureName , QImage& _image ) {
448 emit textureGetImage( _textureName ,_image );
449}
450
453void Core::slotTextureGetImage( const QString& _textureName , QImage& _image , int _id ) {
454 emit textureGetImage( _textureName , _image , _id );
455}
456
459void Core::slotTextureIndex( const QString& _textureName, int _id, int& _index){
460 emit textureIndex( _textureName, _id, _index);
461}
462
465void Core::slotTextureIndexPropertyName( int _id, QString& _propertyName){
466 emit textureIndexPropertyName( _id, _propertyName);
467}
468
471void Core::slotTextureName( int _id, int _textureIndex, QString& _textureName){
472 emit textureName( _id, _textureIndex, _textureName);
473}
474
477void Core::slotTextureFilename( int _id, const QString& _textureName, QString& _textureFilename){
478 emit textureFilename( _id, _textureName, _textureFilename);
479}
480
483void Core::slotGetCurrentTexture( int _id, QString& _textureName ){
484 emit getCurrentTexture( _id, _textureName );
485}
486
489void Core::slotGetSubTextures( int _id, const QString& _multiTextureName, QStringList& _subTextures ){
490 emit getSubTextures( _id, _multiTextureName, _subTextures );
491}
492
493//========================================================================================
494// === Object Manager ============================
495//========================================================================================
496
498void Core::newObject(int _objectId) {
499
500 BaseObject* baseObject = 0;
501 PluginFunctions::getObject(_objectId,baseObject);
502
503 if ( baseObject ) {
504 connect( baseObject, SIGNAL(visibilityChanged(int)), this, SLOT(slotVisibilityChanged(int)), Qt::DirectConnection) ;
505 connect( baseObject, SIGNAL(objectSelectionChanged(int)), this, SLOT(slotObjectSelectionChanged(int)), Qt::DirectConnection );
506 connect( baseObject, SIGNAL(objectPropertiesChanged(int)), this, SLOT(slotObjectPropertiesChanged(int)), Qt::DirectConnection );
507 } else {
508 emit log(LOGERR,tr("newObject received from objectManager with invalid id! This should not happen. The new Object will not work correctly!"));
509 }
510
511}
512
514void Core::deletedObject(int /*_objectId*/) {
515}
516
517
518//========================================================================================
519// === Cross Plugin connections ============================
520//========================================================================================
521
523void connectPlugins( Core* c, const std::vector<PluginInfo>& plugins_, QString _pluginName1, const char* _signal, QString _pluginName2, const char* _slot, bool _queued)
524{
525 QObject* plugin1 = 0;
526 QObject* plugin2 = 0;
527
528 for ( int i = 0 ; i < (int)plugins_.size(); ++i ) {
529 if ( plugins_[i].rpcName == _pluginName1 ) {
530 plugin1 = plugins_[i].plugin;
531 }
532 if ( plugins_[i].rpcName == _pluginName2 ) {
533 plugin2 = plugins_[i].plugin;
534 }
535 }
536
537 if ( plugin1 == 0 ) {
538 emit c->log(LOGERR,QObject::tr("Cross Plugin Interconnection failed because plugin %1 was not found!").arg(_pluginName1));
539 return;
540 }
541
542 if ( plugin2 == 0 ) {
543 emit c->log(LOGERR,QObject::tr("Cross Plugin Interconnection failed because plugin %1 was not found!").arg(_pluginName2));
544 return;
545 }
546
547 // now connect them
548 if(_queued)
549 QObject::connect(plugin1,_signal,plugin2,_slot, Qt::QueuedConnection);
550 else
551 QObject::connect(plugin1,_signal,plugin2,_slot);
552}
553
554void Core::slotCrossPluginConnect( const QString& _pluginName1, const char* _signal, const QString& _pluginName2, const char* _slot) {
555 connectPlugins(this, plugins(), _pluginName1, _signal, _pluginName2, _slot, false);
556}
557
558void Core::slotCrossPluginConnectQueued( const QString& _pluginName1, const char* _signal, const QString& _pluginName2, const char* _slot) {
559 connectPlugins(this, plugins(), _pluginName1, _signal, _pluginName2, _slot, true);
560}
561
562//========================================================================================
563// === Renderer Settings ============================
564//========================================================================================
565void Core::slotSetRenderer(unsigned int _viewer, QString _rendererName) {
566 renderManager().setActive(_rendererName,_viewer);
567}
568
569void Core::slotGetCurrentRenderer(unsigned int _viewer, QString& _rendererName) {
570 _rendererName = renderManager().active(_viewer)->name;
571}
572
573void Core::slotMetadataDeserialized(
574 const QVector<QPair<QString, QString> > &data) {
575
576 QString obj_metadata;
577 for (QVector<QPair<QString, QString> >::const_iterator
578 it = data.begin(); it != data.end(); ++it) {
579 if (it->first == "Mesh Comments")
580 obj_metadata = it->second;
581
582 emit genericMetadataDeserialized(it->first, it->second);
583 }
584
585 /*
586 * Now handle object metadata.
587 */
588 QRegularExpression re_begin("BEGIN Comments for object \"([^\\n]*)\"");
589 QRegularExpression re_end("\\nEND Comments for object \"([^\\n]*)\"");
590 enum STATE {
591 STATE_SEARCH_BEGIN,
592 STATE_CONSUME_INNER,
593 STATE_EOS,
594 };
595
596 int cursor = 0;
597 QString current_object_name;
598 for (STATE state = STATE_SEARCH_BEGIN; state != STATE_EOS; ) {
599 switch (state) {
600 case STATE_SEARCH_BEGIN: {
601 QRegularExpressionMatch match = re_begin.match(obj_metadata, cursor);
602 cursor = match.capturedStart();
603 if (cursor == -1) {
604 state = STATE_EOS;
605 break;
606 }
607 current_object_name = match.captured(1);
608 cursor += match.capturedLength();
609 state = STATE_CONSUME_INNER;
610 break;
611 }
612 case STATE_CONSUME_INNER:
613 {
614 QRegularExpressionMatch match = re_end.match(obj_metadata, cursor);
615 int next = match.capturedStart();
616 if (next == -1) {
617 state = STATE_EOS;
618 break;
619 }
620
621 // const QStringRef value = QStringRef(&obj_metadata, cursor, next - cursor);
622 QString value("");
623 for (int i=cursor;i<next-cursor;i++) {
624 value += obj_metadata.at(i);
625 }
626
627 emit objectMetadataDeserialized(current_object_name, value);
628 QJsonParseError json_error;
629 QJsonDocument json_doc =
630 QJsonDocument::fromJson(value.toUtf8(), &json_error);
631 if (json_error.error == QJsonParseError::NoError) {
632 emit objectMetadataDeserializedJson(
633 current_object_name, json_doc);
634 }
635 cursor = next + match.capturedLength();
636 state = STATE_SEARCH_BEGIN;
637 break;
638 }
639 default:
640 throw std::logic_error("metadataDeserialized(): Invalid state.");
641 }
642 }
643}
644
645//=============================================================================
const DataType DATA_ALL(UINT_MAX)
Identifier for all available objects.
@ LOGERR
@ LOGWARN
@ LOGINFO
Definition: Core.hh:133
void textureIndex(QString _textureName, int _id, int &_index)
get the texture index
void slotCrossPluginConnectQueued(const QString &_pluginName1, const char *_signal, const QString &_pluginName2, const char *_slot)
Called to create inter plugin connections.
void slotTextureIndexPropertyName(int _id, QString &_propertyName)
Called by plugins if texture index property name should be fetched.
void updateTexture(QString, int)
Tell the plugins to update the given texture.
void updatedTextures(QString, int)
This Signal is send to the plugins if a texture has been updated.
void addTexture(QString, QString, uint, int)
The texture with the given name and filename has been added.
void deletedObject(int _objectId)
This slot is called by the object manager when an object is deleted.
void slotAddTexture(QString _textureName, QString _filename, uint _dimension, int _id)
Called by a plugin if it creates a texture.
void slotObjectPropertiesChanged(int _id)
Called by plugins if object properties like names have changed.
void slotTextureName(int _id, int _textureIndex, QString &_textureName)
Called by plugins if texture name should be fetched.
void switchTexture(QString, int)
Switch Texture Plugins to a given Mode.
void slotTextureUpdated(const QString &_textureName, int _identifier)
A Texture has been updated.
void updateAllTextures()
Update all textures in the plugins.
void textureName(int _id, int _textureIndex, QString &_textureName)
get the texture name
void slotMultiTextureAdded(QString _textureGroup, QString _name, QString _filename, int _id, int &_textureId)
Called by a plugin if it creates a multitexture.
void slotSetTextureMode(const QString &_textureName, const QString &_mode, int _id)
A texture mode should be changed.
void slotTextureIndex(const QString &_textureName, int _id, int &_index)
Called by plugins if texture index should be fetched.
void visibilityChanged(int _id)
Tell plugins that the visibility of an object has changed.
void slotUpdateAllTextures()
Update all textures in the plugins.
void slotObjectSelectionChanged(int _id)
Called by Plugins if they changed the active object.
void objectSelectionChanged(int)
This signal is emitted if the object has been changed (source/target)
void slotTextureGetImage(const QString &_textureName, QImage &_image)
Called by plugins if texture image should be fetched.
void getSubTextures(int _id, QString _multiTextureName, QStringList &_subTextures)
get a multi-texture's sub textures
void objectPropertiesChanged(int _id)
Tell plugins that object properties such as object names have been changed.
std::vector< PluginInfo > & plugins()
Index of Plugins toolbox widget.
Definition: Core.cc:770
void slotCrossPluginConnect(const QString &_pluginName1, const char *_signal, const QString &_pluginName2, const char *_slot)
Called to create inter plugin connections.
void getCurrentTexture(int _id, QString &_textureName)
get current texture
void newObject(int _objectId)
This slot is called by the object manager when a new object is created.
void resetScenegraph(bool _resetTrackBall)
void slotSwitchTexture(const QString &_textureName, int _id)
Tells Plugins to switch to the given Texture.
void slotGetCurrentRenderer(unsigned int _viewer, QString &_rendererName)
called to get the currently active renderer renderer for a specific viewer
void slotUpdateTexture(const QString &_name, int _identifier)
Tell the plugins to update the given texture.
void slotObjectUpdated(int _identifier, const UpdateType &_type=UPDATE_ALL)
Called by the plugins if they changed something in the object list (deleted, added,...
void addMultiTexture(QString _textureGroup, QString _name, QString _filename, int _id, int &_textureId)
The texture with the given name and filename has been added.
void slotVisibilityChanged(int _id)
Called when a plugin changes the visibility of an object.
void updateView()
Called when a plugin requests an update in the viewer.
Definition: Core.cc:966
void log(Logtype _type, QString _message)
Logg with OUT,WARN or ERR as type.
void textureIndexPropertyName(int _id, QString &_propertyName)
get the texture index property name
void slotTextureFilename(int _id, const QString &_textureName, QString &_textureFilename)
Called by plugins if texture name should be fetched.
void textureFilename(int _id, QString _textureName, QString &_textureFilename)
get the texture's filename
void textureChangeImage(QString _textureName, QImage &_image)
Change the image for a given texture.
void slotSetRenderer(unsigned int _viewer, QString _rendererName)
called to switch the renderer for a specific viewer
void textureGetImage(QString _textureName, QImage &_image)
fetch texture image
void slotGetCurrentTexture(int _id, QString &_textureName)
Called by plugins if current texture should be retrieved.
void slotTextureChangeImage(const QString &_textureName, QImage &_image)
Called by plugins if texture image should be changed.
void slotGetSubTextures(int _id, const QString &_multiTextureName, QStringList &_subTextures)
Called by plugins if a multi-texture's sub textures should be fetched.
void signalObjectUpdated(int)
When this Signal is emitted all Plugins are informed that the object list changed.
void setTextureMode(QString _textureName, QString _mode, int _id)
A texture mode should be changed.
void setActive(unsigned int _active, int _id)
set the active renderer
RendererInfo * active(int _id)
Get the current active renderer.
QString name
Name of the plugin ( requested from the plugin on load)
Definition: RendererInfo.hh:67
Update type class.
Definition: UpdateType.hh:59
const UpdateType UPDATE_STATE(UpdateTypeSet(4096))
State has changed.
QString updateTypeName(UpdateType _id)
Get the name of a type with given id.
Definition: UpdateType.cc:270
bool getObject(const int _identifier, BaseObject *&_object)
Get the object which has the given identifier.
ObjectRange objects(IteratorRestriction _restriction, DataType _dataType)
Iterable object range.
const QStringList ALL_OBJECTS
Iterable object range.