diff --git a/OMEdit/OMEditGUI/Annotations/LineAnnotation.cpp b/OMEdit/OMEditGUI/Annotations/LineAnnotation.cpp index da8126bed03..ba348b91d60 100644 --- a/OMEdit/OMEditGUI/Annotations/LineAnnotation.cpp +++ b/OMEdit/OMEditGUI/Annotations/LineAnnotation.cpp @@ -748,6 +748,21 @@ void LineAnnotation::setAligned(bool aligned) update(); } +QVariant LineAnnotation::itemChange(GraphicsItemChange change, const QVariant &value) +{ + ShapeAnnotation::itemChange(change, value); +#if !defined(WITHOUT_OSG) + if (change == QGraphicsItem::ItemSelectedHasChanged) { + + // if connection selection is changed in CompositeModel + if (mpGraphicsView->getModelWidget()->getLibraryTreeItem()->getLibraryType() == LibraryTreeItem::CompositeModel) { + MainWindow::instance()->getModelWidgetContainer()->updateThreeDViewer(mpGraphicsView->getModelWidget()); + } + } +#endif + return value; +} + /*! * \brief LineAnnotation::handleComponentMoved * If the component associated with the connection is moved then update the connection accordingly.\n diff --git a/OMEdit/OMEditGUI/Annotations/LineAnnotation.h b/OMEdit/OMEditGUI/Annotations/LineAnnotation.h index ff667e07a80..f7b60e42309 100644 --- a/OMEdit/OMEditGUI/Annotations/LineAnnotation.h +++ b/OMEdit/OMEditGUI/Annotations/LineAnnotation.h @@ -103,7 +103,10 @@ class LineAnnotation : public ShapeAnnotation void setShapeFlags(bool enable); void updateShape(ShapeAnnotation *pShapeAnnotation); void setAligned(bool aligned); -private: +protected: + QVariant itemChange(GraphicsItemChange change, const QVariant &value); + + private: LineType mLineType; Component *mpStartComponent; QString mStartComponentName; diff --git a/OMEdit/OMEditGUI/Modeling/ModelWidgetContainer.cpp b/OMEdit/OMEditGUI/Modeling/ModelWidgetContainer.cpp index b7614594cf0..dfd92d22521 100644 --- a/OMEdit/OMEditGUI/Modeling/ModelWidgetContainer.cpp +++ b/OMEdit/OMEditGUI/Modeling/ModelWidgetContainer.cpp @@ -3666,10 +3666,185 @@ bool ModelWidget::writeVisualXMLFile(QString fileName, bool canWriteVisualXMLFil } bool visited = false; foreach (Component *pInterfaceComponent, pSubModelComponent->getComponentsList()) { + QString name = QString("%1.%2").arg(pSubModelComponent->getName()).arg(pInterfaceComponent->getName()); + + + + + //Draw interface vectors + bool interfaceSelected=false; + foreach(LineAnnotation* pConnection, pInterfaceComponent->getGraphicsView()->getConnectionsList()) { + if(pConnection->isSelected()) { + if(pConnection->getStartComponent() == pInterfaceComponent || + pConnection->getEndComponent() == pInterfaceComponent) { + interfaceSelected = true; + } + } + } + + //Draw X-axis + visualFile << " \n"; + visualFile << " " << name << ".x\n"; + visualFile << " cylinder\n"; + visualFile << " \n"; + visualFile << " " << name << ".A(1,1)\n"; + visualFile << " " << name << ".A(1,2)\n"; + visualFile << " " << name << ".A(1,3)\n"; + visualFile << " " << name << ".A(2,1)\n"; + visualFile << " " << name << ".A(2,2)\n"; + visualFile << " " << name << ".A(2,3)\n"; + visualFile << " " << name << ".A(3,1)\n"; + visualFile << " " << name << ".A(3,2)\n"; + visualFile << " " << name << ".A(3,3)\n"; + visualFile << " \n"; + visualFile << " \n"; + visualFile << " " << name << ".R[cG][cG](1)\n"; + visualFile << " " << name << ".R[cG][cG](2)\n"; + visualFile << " " << name << ".R[cG][cG](3)\n"; + visualFile << " \n"; + visualFile << " \n"; + visualFile << " 0\n"; + visualFile << " 0\n"; + visualFile << " 0\n"; + visualFile << " \n"; + visualFile << " \n"; + visualFile << " 1\n"; + visualFile << " 0\n"; + visualFile << " 0\n"; + visualFile << " \n"; + visualFile << " \n"; + visualFile << " 0\n"; + visualFile << " 1\n"; + visualFile << " 0\n"; + visualFile << " \n"; + visualFile << " 0.5\n"; + visualFile << " 0.0025\n"; + visualFile << " 0.0025\n"; + visualFile << " 0.0\n"; + visualFile << " \n"; + if(interfaceSelected) { + visualFile << " " << selectedColor.red() << "\n"; + visualFile << " " << selectedColor.green() << "\n"; + visualFile << " " << selectedColor.blue() << "\n"; + } else { + visualFile << " 255\n"; + visualFile << " 0\n"; + visualFile << " 0\n"; + } + visualFile << " \n"; + visualFile << " 0.7\n"; + visualFile << " \n"; + + //Draw Y-axis + visualFile << " \n"; + visualFile << " " << name << ".x\n"; + visualFile << " cylinder\n"; + visualFile << " \n"; + visualFile << " " << name << ".A(1,1)\n"; + visualFile << " " << name << ".A(1,2)\n"; + visualFile << " " << name << ".A(1,3)\n"; + visualFile << " " << name << ".A(2,1)\n"; + visualFile << " " << name << ".A(2,2)\n"; + visualFile << " " << name << ".A(2,3)\n"; + visualFile << " " << name << ".A(3,1)\n"; + visualFile << " " << name << ".A(3,2)\n"; + visualFile << " " << name << ".A(3,3)\n"; + visualFile << " \n"; + visualFile << " \n"; + visualFile << " " << name << ".R[cG][cG](1)\n"; + visualFile << " " << name << ".R[cG][cG](2)\n"; + visualFile << " " << name << ".R[cG][cG](3)\n"; + visualFile << " \n"; + visualFile << " \n"; + visualFile << " 0\n"; + visualFile << " 0\n"; + visualFile << " 0\n"; + visualFile << " \n"; + visualFile << " \n"; + visualFile << " 0\n"; + visualFile << " 1\n"; + visualFile << " 0\n"; + visualFile << " \n"; + visualFile << " \n"; + visualFile << " 0\n"; + visualFile << " 0\n"; + visualFile << " 1\n"; + visualFile << " \n"; + visualFile << " 0.5\n"; + visualFile << " 0.0025\n"; + visualFile << " 0.0025\n"; + visualFile << " 0.0\n"; + visualFile << " \n"; + if(interfaceSelected) { + visualFile << " " << selectedColor.red() << "\n"; + visualFile << " " << selectedColor.green() << "\n"; + visualFile << " " << selectedColor.blue() << "\n"; + } else { + visualFile << " 0\n"; + visualFile << " 255\n"; + visualFile << " 0\n"; + } + visualFile << " \n"; + visualFile << " 0.7\n"; + visualFile << " \n"; + + //Draw Z-axis + visualFile << " \n"; + visualFile << " " << name << ".x\n"; + visualFile << " cylinder\n"; + visualFile << " \n"; + visualFile << " " << name << ".A(1,1)\n"; + visualFile << " " << name << ".A(1,2)\n"; + visualFile << " " << name << ".A(1,3)\n"; + visualFile << " " << name << ".A(2,1)\n"; + visualFile << " " << name << ".A(2,2)\n"; + visualFile << " " << name << ".A(2,3)\n"; + visualFile << " " << name << ".A(3,1)\n"; + visualFile << " " << name << ".A(3,2)\n"; + visualFile << " " << name << ".A(3,3)\n"; + visualFile << " \n"; + visualFile << " \n"; + visualFile << " " << name << ".R[cG][cG](1)\n"; + visualFile << " " << name << ".R[cG][cG](2)\n"; + visualFile << " " << name << ".R[cG][cG](3)\n"; + visualFile << " \n"; + visualFile << " \n"; + visualFile << " 0\n"; + visualFile << " 0\n"; + visualFile << " 0\n"; + visualFile << " \n"; + visualFile << " \n"; + visualFile << " 0\n"; + visualFile << " 0\n"; + visualFile << " 1\n"; + visualFile << " \n"; + visualFile << " \n"; + visualFile << " 1\n"; + visualFile << " 0\n"; + visualFile << " 0\n"; + visualFile << " \n"; + visualFile << " 0.5\n"; + visualFile << " 0.0025\n"; + visualFile << " 0.0025\n"; + visualFile << " 0.0\n"; + visualFile << " \n"; + if(interfaceSelected) { + visualFile << " " << selectedColor.red() << "\n"; + visualFile << " " << selectedColor.green() << "\n"; + visualFile << " " << selectedColor.blue() << "\n"; + } else { + visualFile << " 0\n"; + visualFile << " 0\n"; + visualFile << " 255\n"; + } + visualFile << " \n"; + visualFile << " 0.7\n"; + visualFile << " \n"; + //End new code + if (visited) { break; } - QString name = QString("%1.%2").arg(pSubModelComponent->getName()).arg(pInterfaceComponent->getName()); /*! * \note Don't check for connection. * If we check for connection then only connected submodels can be seen in the ThreeDViewer Browser.