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.