![]() |
VR-Forces 4.0.4 Class Documentation
|
00001 /****************************************************************************** 00002 ** Copyright (c) 2012 MAK Technologies, Inc. 00003 ** All rights reserved. 00004 ******************************************************************************/ 00005 /****************************************************************************** 00006 ** $RCSfile: DtCircleVertexVisualizer.h,v $ $Revision: 1.2 $ $State: Exp $ 00007 ******************************************************************************/ 00008 00011 00012 #pragma once 00013 00014 #include <vrfVrlSharedSource/vrfProtocol.h> 00015 #include <vrfGuiCore/DtCircleVertexVisualizer.h> 00016 #include <vrvVrl/DtVrlinkConnection.h> 00017 #include <vrvVrl/DtVrlinkTacticalGraphicIndicatorVisualizer.h> 00018 #include <vrvCore/DtControlPointWidget.h> 00019 #include <vrvCore/DtWidgetAgent.hpp> 00020 00021 namespace makVrf 00022 { 00023 namespace VRF_PROTOCOL_NAMESPACE 00024 { 00025 class DtVrfVrlinkCircleVertexVisualizer : public DtCircleVertexVisualizer 00026 { 00027 public: 00028 DtVrfVrlinkCircleVertexVisualizer(makVrv::DtBaseConnection& simulation, makVrv::DtStateListener& listener, 00029 int modelSet) 00030 : DtCircleVertexVisualizer(simulation, listener, modelSet) 00031 { 00032 } 00033 00034 virtual ~DtVrfVrlinkCircleVertexVisualizer() 00035 { 00036 } 00037 00038 virtual const makVrv::DtCoordinateSystem* coordinateSystem() const 00039 { 00040 return &((makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkConnection&)mySimulation).coordinateSystem(); 00041 } 00042 00043 virtual DtVector xPoint() const 00044 { 00045 if (coordinateSystem()) 00046 { 00047 DtVector geoc; 00048 00049 coordinateSystem()->netToLocalPos(DtCircleVertexVisualizer::xPoint(), geoc); 00050 00051 return geoc; 00052 } 00053 00054 return DtCircleVertexVisualizer::xPoint(); 00055 } 00056 00057 virtual DtVector yPoint() const 00058 { 00059 if (coordinateSystem()) 00060 { 00061 DtVector geoc; 00062 00063 coordinateSystem()->netToLocalPos(DtCircleVertexVisualizer::yPoint(), geoc); 00064 00065 return geoc; 00066 } 00067 00068 return DtCircleVertexVisualizer::yPoint(); 00069 } 00070 00071 virtual void setControlPoints( 00072 const makVrv::DtEnvironmentalStateListener::ControlPointsList& pts) 00073 { 00074 if (coordinateSystem()) 00075 { 00076 int iLimit = std::min(myVertexList.size(), pts.size()); 00077 int i; 00078 00079 for (i = 0; i < iLimit; i++) 00080 { 00081 DtVector local; 00082 00083 coordinateSystem()->netToLocalPos(pts[i], local); 00084 00085 if (pointIsDifferent(local, myControlPoints[i])) 00086 { 00087 moveControlPoint(i, local); 00088 } 00089 } 00090 } 00091 else 00092 { 00093 DtCircleVertexVisualizer::setControlPoints(pts); 00094 } 00095 } 00096 00097 virtual void setControlPoints() 00098 { 00099 while (myVertexList.size()) 00100 { 00101 removeControlPoint(0); 00102 } 00103 00104 std::vector<makVrv::DtUniqueID>::const_iterator idIter = myVertexElementIDs.begin(); 00105 std::vector<makVrv::DtUniqueID>::const_iterator idIterEnd = myVertexElementIDs.end(); 00106 std::vector<DtVector>::const_iterator i = environmentalStateListener().controlPoints().begin(); 00107 std::vector<DtVector>::const_iterator e = environmentalStateListener().controlPoints().end(); 00108 DtVector local; 00109 00110 for(; i != e && idIter != idIterEnd;++i, ++idIter) 00111 { 00112 coordinateSystem()->netToLocalPos(*i, local); 00113 00114 addControlPoint(local, *idIter); 00115 } 00116 } 00117 }; 00118 00119 typedef makVrv::DtStateVisualizerCreatorTemplate<DtVrfVrlinkCircleVertexVisualizer> 00120 DtVrfVrlinkCircleVertexVisualizerCreator; 00121 } 00122 00124 class MyControlPointWidget : public makVrv::DtControlPointWidget 00125 { 00126 public: 00127 MyControlPointWidget(int modelSet, makVrv::DtAgentManagerInterface& sceneInterface) : DtControlPointWidget(modelSet, sceneInterface) {}; 00128 00129 void setOrderGroup(int i) 00130 { 00131 if (myWidgetAgent) 00132 { 00133 myWidgetAgent->setOrderGroup(i); 00134 myPointWidgetAgent->setOrderGroup(i); 00135 } 00136 } 00137 }; 00138 00139 00140 class DtVrfVrlinkEnvironmentalIndicatorVisualizer : public makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkTacticalGraphicIndicatorVisualizer 00141 { 00142 public: 00144 DtVrfVrlinkEnvironmentalIndicatorVisualizer( makVrv::DtBaseConnection& conn, makVrv::DtStateListener& listener, int modelSet) 00145 : makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkTacticalGraphicIndicatorVisualizer(conn, listener, modelSet) 00146 { 00147 } 00148 00150 virtual ~DtVrfVrlinkEnvironmentalIndicatorVisualizer() 00151 { 00152 } 00153 00154 protected: 00155 virtual void createIndicator() 00156 { 00157 makVrv::DT_PROTOCOL_NAMESPACE::DtVrlinkTacticalGraphicIndicatorVisualizer::createIndicator(); 00158 00159 if (myIndicator) 00160 { 00161 ((MyControlPointWidget*)myIndicator)->setOrderGroup(3); 00162 } 00163 } 00164 }; 00165 00166 typedef makVrv::DtStateVisualizerCreatorTemplate<DtVrfVrlinkEnvironmentalIndicatorVisualizer> 00167 DtVrfVrlinkEnvironmentalIndicatorVisualizerCreator; 00168 }