44#include <wx/mstream.h>
58 CNavigation3D( false, false ), m_viewport2D( aViewport ), m_isMoving( false )
63 PutProfileHint(
"KiCAD PCB" );
67 EnableNavigation(
true );
70 PutFrameTimingSource( TimingSource::SpaceMouse );
78 EnableNavigation(
false );
84 wxLogTrace(
m_logTrace, wxT(
"NL_PCBNEW_PLUGIN_IMPL::SetFocus %d" ), aFocus );
85 NAV_3D::Write( navlib::focus_k, aFocus );
100static CATEGORY_STORE::iterator
add_category( std::string aCategoryPath,
103 using TDx::SpaceMouse::CCategory;
105 CATEGORY_STORE::iterator parent_iter = aCategoryStore.begin();
106 std::string::size_type pos = aCategoryPath.find_last_of(
'.' );
108 if( pos != std::string::npos )
110 std::string parentPath = aCategoryPath.substr( 0, pos );
111 parent_iter = aCategoryStore.find( parentPath );
113 if( parent_iter == aCategoryStore.end() )
115 parent_iter =
add_category( parentPath, aCategoryStore );
119 std::string
name = aCategoryPath.substr( pos + 1 );
120 std::unique_ptr<CCategory> categoryNode =
121 std::make_unique<CCategory>( aCategoryPath.c_str(),
name.c_str() );
123 CATEGORY_STORE::iterator iter = aCategoryStore.insert(
124 aCategoryStore.end(), CATEGORY_STORE::value_type( aCategoryPath, categoryNode.get() ) );
126 parent_iter->second->push_back( std::move( categoryNode ) );
133 wxLogTrace(
m_logTrace, wxT(
"NL_PCBNEW_PLUGIN_IMPL::exportCommandsAndImages" ) );
137 if( actions.size() == 0 )
142 using TDx::SpaceMouse::CCommand;
143 using TDx::SpaceMouse::CCommandSet;
146 CCommandSet commandSet(
"PCB_DRAW_PANEL_GAL",
"PCB Viewer" );
149 NAV_3D::PutActiveCommands( commandSet.GetId() );
154 std::vector<TDx::CImage> vImages;
157 categoryStore.insert( categoryStore.end(), CATEGORY_STORE::value_type(
".", &commandSet ) );
159 std::list<TOOL_ACTION*>::const_iterator it;
161 for( it = actions.begin(); it != actions.end(); ++it )
164 std::string label = action->
GetLabel().ToStdString();
175 if(
name.rfind(
"3DViewer.", 0 ) == 0 )
181 CATEGORY_STORE::iterator iter = categoryStore.find( strCategory );
183 if( iter == categoryStore.end() )
185 iter =
add_category( std::move( strCategory ), categoryStore );
191 wxMemoryOutputStream imageStream;
193 if( action->
GetIcon() != BITMAPS::INVALID_BITMAP )
196 image.SaveFile( imageStream, wxBitmapType::wxBITMAP_TYPE_PNG );
199 if( imageStream.GetSize() )
201 wxStreamBuffer* streamBuffer = imageStream.GetOutputStreamBuffer();
202 TDx::CImage tdxImage = TDx::CImage::FromData(
"", 0,
name.c_str() );
203 tdxImage.AssignImage( std::string(
reinterpret_cast<const char*
>(
204 streamBuffer->GetBufferStart() ),
205 streamBuffer->GetBufferSize() ),
209 vImages.push_back( std::move( tdxImage ) );
213 wxLogTrace(
m_logTrace, wxT(
"Inserting command: %s, description: %s, in category: %s" ),
214 name, description, iter->first );
216 iter->second->push_back(
217 CCommand( std::move(
name ), std::move( label ), std::move( description ) ) );
220 NAV_3D::AddCommandSet( commandSet );
221 NAV_3D::AddImages( vImages );
229 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
242 matrix = { x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0,
m_viewPosition.
x,
m_viewPosition.
y, 0, 1 };
251 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
256 position.
x = mouse_pointer.
x;
257 position.y = mouse_pointer.
y;
268 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
276 extents = navlib::box_t{ -box.
GetWidth() / 2.0,
298 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
302 VECTOR2D viewPos( matrix.m4x4[3][0], matrix.m4x4[3][1] );
308 result = navlib::make_result_code( navlib::navlib_errc::error );
325 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
332 result = navlib::make_result_code( navlib::navlib_errc::error );
343 result = navlib::make_result_code( navlib::navlib_errc::error );
352 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
358 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
366 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
379 extents = {
static_cast<double>( box.
GetOrigin().
x ),
382 static_cast<double>( box.
GetEnd().
x ),
383 static_cast<double>( box.
GetEnd().
y ),
393 matrix = { 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1 };
400 matrix = { 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1 };
421 if( commandId.empty() )
429 for( std::list<TOOL_ACTION*>::const_iterator it = actions.begin(); it != actions.end(); it++ )
432 std::string nm = action->
GetName();
434 if( commandId == nm )
440 if( context !=
nullptr )
447 if( parent->IsEnabled() )
454 bool runAction =
true;
459 runAction = aCond->enableCondition( sel );
467 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
502 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
508 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
514 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
520 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
526 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
532 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
538 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
544 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
550 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
556 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
562 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
568 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
574 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
580 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
586 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
592 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.
BOX2< Vec > & Normalize()
Ensure that the height and width are positive.
const Vec & GetOrigin() const
coord_type GetHeight() const
coord_type GetWidth() const
KIGFX::VIEW_CONTROLS * GetViewControls() const
Return a pointer to the #VIEW_CONTROLS 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.
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).
virtual void SetScale(double aScale, VECTOR2D aAnchor={ 0, 0 })
Set the scaling factor, zooming around a given anchor point.
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.
virtual ~NL_PCBNEW_PLUGIN_IMPL()
long GetIsViewRotatable(navlib::bool_t &isRotatable) const override
long SetCameraMatrix(const navlib::matrix_t &aMatrix) override
long GetPivotVisible(navlib::bool_t &aVisible) const override
long GetPointerPosition(navlib::point_t &aPosition) const override
long SetHitLookFrom(const navlib::point_t &aPosition) override
long GetFrontView(navlib::matrix_t &aMatrix) const override
long SetHitSelectionOnly(bool aSelectionOnly) override
long SetViewFOV(double aFov) override
long GetViewFOV(double &aFov) const override
long IsUserPivot(navlib::bool_t &aUserPivot) const override
long SetSettingsChanged(long aChangeNumber) override
void SetFocus(bool aFocus)
Set the connection to the 3Dconnexion driver to the focus state so that 3DMouse data is routed here.
long SetTransaction(long aValue) override
long GetViewExtents(navlib::box_t &aExtents) const override
long GetPivotPosition(navlib::point_t &aPosition) const override
long GetCoordinateSystem(navlib::matrix_t &aMatrix) const override
long SetPivotVisible(bool aVisible) override
long SetPivotPosition(const navlib::point_t &aPosition) override
long GetIsViewPerspective(navlib::bool_t &aPerspective) const override
NL_PCBNEW_PLUGIN_IMPL(PCB_DRAW_PANEL_GAL *aViewport)
Initializes a new instance of the NL_PCBNEW_PLUGIN_IMPL.
long GetHitLookAt(navlib::point_t &aPosition) const override
long GetSelectionTransform(navlib::matrix_t &aTransform) const override
long SetViewExtents(const navlib::box_t &aExtents) override
void exportCommandsAndImages()
Export the invocable actions and images to the 3Dconnexion UI.
long SetCameraTarget(const navlib::point_t &aPosition) override
long GetCameraMatrix(navlib::matrix_t &aMatrix) const override
long SetMotionFlag(bool aValue) override
long GetViewFrustum(navlib::frustum_t &aFrustum) const override
long GetModelExtents(navlib::box_t &aExtents) const override
long SetViewFrustum(const navlib::frustum_t &aFrustum) override
long GetSelectionExtents(navlib::box_t &aExtents) const override
long SetSelectionTransform(const navlib::matrix_t &aMatrix) override
PCB_DRAW_PANEL_GAL * m_viewport2D
long SetHitAperture(double aAperture) override
long SetHitDirection(const navlib::vector_t &aDirection) override
long GetIsSelectionEmpty(navlib::bool_t &aEmpty) const override
long SetActiveCommand(std::string aCommandId) override
Base PCB main window class for Pcbnew, Gerbview, and CvPcb footprint viewer.
virtual KIGFX::PCB_VIEW * GetView() const override
Return a pointer to the #VIEW instance used in the panel.
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.
std::map< std::string, TDx::CCommandTreeNode * > CATEGORY_STORE
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
static CATEGORY_STORE::iterator add_category(std::string aCategoryPath, CATEGORY_STORE &aCategoryStore)
Add a category to the store.
Declaration of the NL_PCBNEW_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.