43#include <wx/mstream.h>
57 CNavigation3D( false, false ),
58 m_viewport2D( nullptr ),
61 m_viewportWidth( 0.0 )
63 PutProfileHint(
"KiCAD Eeschema" );
69 EnableNavigation(
false );
88 EnableNavigation(
true );
91 PutFrameTimingSource( TimingSource::SpaceMouse );
101 wxLogTrace(
m_logTrace, wxT(
"NL_SCHEMATIC_PLUGIN_IMPL::SetFocus %d" ), aFocus );
102 NAV_3D::Write( navlib::focus_k, aFocus );
119 using TDx::SpaceMouse::CCategory;
121 CATEGORY_STORE::iterator parent_iter = aCategoryStore.begin();
122 std::string::size_type pos = aCategoryPath.find_last_of(
'.' );
124 if( pos != std::string::npos )
126 std::string parentPath = aCategoryPath.substr( 0, pos );
127 parent_iter = aCategoryStore.find( parentPath );
129 if( parent_iter == aCategoryStore.end() )
132 parent_iter = aCategoryStore.find( parentPath );
136 std::string
name = aCategoryPath.substr( pos + 1 );
137 auto categoryNode = std::make_unique<CCategory>( aCategoryPath.c_str(),
name.c_str() );
139 aCategoryStore.insert( aCategoryStore.end(), { aCategoryPath, categoryNode.get() } );
141 parent_iter->second->push_back( std::move( categoryNode ) );
147 wxLogTrace(
m_logTrace, wxT(
"NL_SCHEMATIC_PLUGIN_IMPL::exportCommandsAndImages" ) );
151 if( actions.size() == 0 )
154 using TDx::SpaceMouse::CCommand;
155 using TDx::SpaceMouse::CCommandSet;
158 CCommandSet commandSet(
"SCHEMATIC_EDITOR",
"Schematic Editor" );
161 NAV_3D::PutActiveCommands( commandSet.GetId() );
166 std::vector<TDx::CImage> vImages;
169 categoryStore.insert( categoryStore.end(), CATEGORY_STORE::value_type(
".", &commandSet ) );
171 std::list<TOOL_ACTION*>::const_iterator it;
173 for( it = actions.begin(); it != actions.end(); ++it )
176 std::string label = action->
GetMenuLabel().ToStdString();
185 if(
name.rfind(
"3DViewer.", 0 ) == 0 )
189 CATEGORY_STORE::iterator iter = categoryStore.find( strCategory );
191 if( iter == categoryStore.end() )
194 iter = categoryStore.find( strCategory );
200 wxMemoryOutputStream imageStream;
202 if( action->
GetIcon() != BITMAPS::INVALID_BITMAP )
205 image.SaveFile( imageStream, wxBitmapType::wxBITMAP_TYPE_PNG );
208 if( imageStream.GetSize() )
210 wxStreamBuffer* streamBuffer = imageStream.GetOutputStreamBuffer();
211 TDx::CImage tdxImage = TDx::CImage::FromData(
"", 0,
name.c_str() );
212 tdxImage.AssignImage( std::string(
reinterpret_cast<const char*
>(
213 streamBuffer->GetBufferStart() ),
214 streamBuffer->GetBufferSize() ),
218 vImages.push_back( std::move( tdxImage ) );
222 wxLogTrace(
m_logTrace, wxT(
"Inserting command: %s, description: %s, in category: %s" ),
223 name, description, iter->first );
225 iter->second->push_back(
226 CCommand( std::move(
name ), std::move( label ), std::move( description ) ) );
229 NAV_3D::AddCommandSet( commandSet );
230 NAV_3D::AddImages( vImages );
237 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
249 matrix = { { { x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0,
m_viewPosition.
x,
m_viewPosition.
y, 0, 1 } } };
257 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
261 position.
x = mouse_pointer.
x;
262 position.y = mouse_pointer.
y;
272 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
279 extents.min_x = -box.
GetWidth() / 2.0;
282 extents.max_x = box.
GetWidth() / 2.0;
300 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
303 VECTOR2D viewPos( matrix.m4x4[3][0], matrix.m4x4[3][1] );
309 result = navlib::make_result_code( navlib::navlib_errc::error );
325 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
330 result = navlib::make_result_code( navlib::navlib_errc::error );
339 result = navlib::make_result_code( navlib::navlib_errc::error );
347 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
353 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
360 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
370 extents.min_x =
static_cast<double>( box.
GetOrigin().
x );
371 extents.min_y =
static_cast<double>( box.
GetOrigin().
y );
372 extents.min_z = -half_depth;
373 extents.max_x =
static_cast<double>( box.
GetEnd().
x );
374 extents.max_y =
static_cast<double>( box.
GetEnd().
y );
375 extents.max_z = half_depth;
384 matrix = { { { 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1 } } };
391 matrix = { { { 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1 } } };
412 if( commandId.empty() )
418 for( std::list<TOOL_ACTION*>::const_iterator it = actions.begin(); it != actions.end(); it++ )
421 std::string nm = action->
GetName();
423 if( commandId == nm )
427 if( context !=
nullptr )
434 if( parent->IsEnabled() )
441 bool runAction =
true;
446 runAction = aCond->enableCondition( sel );
454 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
487 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
493 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
499 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
505 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
511 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
517 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
523 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
529 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
535 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
541 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
547 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
553 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
559 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
565 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
571 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
577 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
wxBitmap KiBitmap(BITMAPS aBitmap, int aHeightTag)
Construct a wxBitmap from an image identifier Returns the image from the active theme if the image ha...
const ACTION_CONDITIONS * GetCondition(const TOOL_ACTION &aAction) const
Get the conditions to use for a specific tool action.
static std::list< TOOL_ACTION * > & GetActionList()
Return list of TOOL_ACTIONs.
constexpr const Vec GetEnd() const
constexpr BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
constexpr size_type GetWidth() const
constexpr size_type GetHeight() const
constexpr const Vec & GetOrigin() const
KIGFX::VIEW_CONTROLS * GetViewControls() const
Return a pointer to the #VIEW_CONTROLS instance used in the panel.
virtual KIGFX::VIEW * GetView() const
Return a pointer to the #VIEW instance used in the panel.
void ForceRefresh()
Force a redraw.
KIGFX::GAL * GetGAL() const
Return a pointer to the GAL instance used in the panel.
double GetMaxDepth() const
double GetMinDepth() const
double GetWorldScale() const
Get the world scale.
void SetScale(double aScale, VECTOR2D aAnchor={ 0, 0 }) override
Set the scaling factor, zooming around a given anchor point.
virtual VECTOR2D GetMousePosition(bool aWorldCoordinates=true) const =0
Return the current mouse pointer position.
BOX2D GetViewport() const
Return the current viewport visible area rectangle.
const VECTOR2D & GetCenter() const
Return the center point of this VIEW (in world space coordinates).
bool IsMirroredX() const
Return true if view is flipped across the X axis.
bool IsMirroredY() const
Return true if view is flipped across the Y axis.
const BOX2D & GetBoundary() const
void SetCenter(const VECTOR2D &aCenter)
Set the center point of the VIEW (i.e.
long GetHitLookAt(navlib::point_t &aPosition) const override
long GetSelectionExtents(navlib::box_t &aExtents) const override
long GetCoordinateSystem(navlib::matrix_t &aMatrix) const override
long SetViewFOV(double aFov) override
virtual ~NL_SCHEMATIC_PLUGIN_IMPL()
long GetSelectionTransform(navlib::matrix_t &aTransform) const override
long GetPivotPosition(navlib::point_t &aPosition) const override
long SetPivotPosition(const navlib::point_t &aPosition) override
long SetViewFrustum(const navlib::frustum_t &aFrustum) override
long GetFrontView(navlib::matrix_t &aMatrix) const override
long GetViewFOV(double &aFov) const override
long SetHitAperture(double aAperture) override
long SetSelectionTransform(const navlib::matrix_t &aMatrix) override
void SetFocus(bool aFocus)
Set the connection to the 3Dconnexion driver to the focus state so that 3DMouse data is routed here.
long SetViewExtents(const navlib::box_t &aExtents) override
void SetCanvas(EDA_DRAW_PANEL_GAL *aViewport)
Sets the viewport controlled by the SpaceMouse.
long GetCameraMatrix(navlib::matrix_t &aMatrix) const override
long GetPointerPosition(navlib::point_t &aPosition) const override
long GetPivotVisible(navlib::bool_t &aVisible) const override
void exportCommandsAndImages()
Export the invocable actions and images to the 3Dconnexion UI.
long SetTransaction(long aValue) override
long GetIsViewPerspective(navlib::bool_t &aPerspective) const override
long SetHitSelectionOnly(bool aSelectionOnly) override
NL_SCHEMATIC_PLUGIN_IMPL()
Initializes a new instance of the NL_SCHEMATIC_PLUGIN_IMPL.
long SetHitLookFrom(const navlib::point_t &aPosition) override
long SetActiveCommand(std::string aCommandId) override
EDA_DRAW_PANEL_GAL * m_viewport2D
long GetViewExtents(navlib::box_t &aExtents) const override
long SetCameraTarget(const navlib::point_t &aPosition) override
long GetIsSelectionEmpty(navlib::bool_t &aEmpty) const override
long SetCameraMatrix(const navlib::matrix_t &aMatrix) override
long GetIsViewRotatable(navlib::bool_t &isRotatable) const override
long SetMotionFlag(bool aValue) override
long SetHitDirection(const navlib::vector_t &aDirection) override
long GetModelExtents(navlib::box_t &aExtents) const override
long IsUserPivot(navlib::bool_t &aUserPivot) const override
long SetSettingsChanged(long aChangeNumber) override
long GetViewFrustum(navlib::frustum_t &aFrustum) const override
long SetPivotVisible(bool aVisible) override
A shim class between EDA_DRAW_FRAME and several derived classes: SYMBOL_EDIT_FRAME,...
static bool empty(const wxTextEntryBase *aCtrl)
static const wxChar * m_logTrace
Trace mask used to enable or disable the trace output of this class.
bool equals(glm::mat< L, C, T, Q > const &aFirst, glm::mat< L, C, T, Q > const &aSecond, T aEpsilon=static_cast< T >(FLT_EPSILON *10))
Template to compare two glm::mat<T> values for equality within a required epsilon.
CATEGORY_STORE::iterator add_category(std::string aCategoryPath, CATEGORY_STORE &aCategoryStore)
Add a category to the store.
std::map< std::string, TDx::CCommandTreeNode * > CATEGORY_STORE
std::map< std::string, TDx::CCommandTreeNode * > CATEGORY_STORE
static void add_category(const std::string &aCategoryPath, CATEGORY_STORE &aCategoryStore)
Add a category to the store.
Declaration of the NL_SCHEMATIC_PLUGIN_IMPL class.
Functors that can be used to figure out how the action controls should be displayed in the UI and if ...
WX_VIEW_CONTROLS class definition.