44#include <wx/mstream.h>
58 CNavigation3D( false, false ),
59 m_viewport2D( aViewport ),
65 PutProfileHint(
"KiCAD PCB" );
69 EnableNavigation(
true );
72 PutFrameTimingSource( TimingSource::SpaceMouse );
80 EnableNavigation(
false );
86 wxLogTrace(
m_logTrace, wxT(
"NL_PCBNEW_PLUGIN_IMPL::SetFocus %d" ), aFocus );
87 NAV_3D::Write( navlib::focus_k, aFocus );
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() )
116 parent_iter = aCategoryStore.find( parentPath );
120 std::string
name = aCategoryPath.substr( pos + 1 );
121 auto categoryNode = std::make_unique<CCategory>( aCategoryPath.c_str(),
name.c_str() );
123 aCategoryStore.insert( aCategoryStore.end(), { aCategoryPath, categoryNode.get() } );
125 parent_iter->second->push_back( std::move( categoryNode ) );
131 wxLogTrace(
m_logTrace, wxT(
"NL_PCBNEW_PLUGIN_IMPL::exportCommandsAndImages" ) );
135 if( actions.size() == 0 )
138 using TDx::SpaceMouse::CCommand;
139 using TDx::SpaceMouse::CCommandSet;
142 CCommandSet commandSet(
"PCB_DRAW_PANEL_GAL",
"PCB Viewer" );
145 NAV_3D::PutActiveCommands( commandSet.GetId() );
150 std::vector<TDx::CImage> vImages;
153 categoryStore.insert( categoryStore.end(), CATEGORY_STORE::value_type(
".", &commandSet ) );
155 std::list<TOOL_ACTION*>::const_iterator it;
157 for( it = actions.begin(); it != actions.end(); ++it )
160 std::string label = action->
GetMenuLabel().ToStdString();
169 if(
name.rfind(
"3DViewer.", 0 ) == 0 )
173 CATEGORY_STORE::iterator iter = categoryStore.find( strCategory );
175 if( iter == categoryStore.end() )
178 iter = categoryStore.find( strCategory );
184 wxMemoryOutputStream imageStream;
186 if( action->
GetIcon() != BITMAPS::INVALID_BITMAP )
189 image.SaveFile( imageStream, wxBitmapType::wxBITMAP_TYPE_PNG );
192 if( imageStream.GetSize() )
194 wxStreamBuffer* streamBuffer = imageStream.GetOutputStreamBuffer();
195 TDx::CImage tdxImage = TDx::CImage::FromData(
"", 0,
name.c_str() );
196 tdxImage.AssignImage( std::string(
reinterpret_cast<const char*
>(
197 streamBuffer->GetBufferStart() ),
198 streamBuffer->GetBufferSize() ),
202 vImages.push_back( std::move( tdxImage ) );
206 wxLogTrace(
m_logTrace, wxT(
"Inserting command: %s, description: %s, in category: %s" ),
207 name, description, iter->first );
209 iter->second->push_back( CCommand( std::move(
name ), std::move( label ),
210 std::move( description ) ) );
213 NAV_3D::AddCommandSet( commandSet );
214 NAV_3D::AddImages( vImages );
221 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
233 matrix = { { { x, 0, 0, 0, 0, y, 0, 0, 0, 0, z, 0,
m_viewPosition.
x,
m_viewPosition.
y, 0, 1 } } };
241 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
245 position.
x = mouse_pointer.
x;
246 position.y = mouse_pointer.
y;
256 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
263 extents.min_x = -box.
GetWidth() / 2.0;
266 extents.max_x = box.
GetWidth() / 2.0;
285 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
288 VECTOR2D viewPos( matrix.m4x4[3][0], matrix.m4x4[3][1] );
294 result = navlib::make_result_code( navlib::navlib_errc::error );
310 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
315 result = navlib::make_result_code( navlib::navlib_errc::error );
324 result = navlib::make_result_code( navlib::navlib_errc::error );
332 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
338 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
345 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
355 extents.min_x =
static_cast<double>( box.
GetOrigin().
x );
356 extents.min_y =
static_cast<double>( box.
GetOrigin().
y );
357 extents.min_z = -half_depth;
358 extents.max_x =
static_cast<double>( box.
GetEnd().
x );
359 extents.max_y =
static_cast<double>( box.
GetEnd().
y );
360 extents.max_z = half_depth;
369 matrix = { { { 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1 } } };
376 matrix = { { { 1, 0, 0, 0, 0, -1, 0, 0, 0, 0, -1, 0, 0, 0, 0, 1 } } };
397 if( commandId.empty() )
403 for( std::list<TOOL_ACTION*>::const_iterator it = actions.begin(); it != actions.end(); it++ )
406 std::string nm = action->
GetName();
408 if( commandId == nm )
412 if( context !=
nullptr )
419 if( parent->IsEnabled() )
426 bool runAction =
true;
431 runAction = aCond->enableCondition( sel );
439 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
472 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
478 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
484 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
490 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
496 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::invalid_operation );
520 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
526 return navlib::make_result_code( navlib::navlib_errc::invalid_operation );
532 return navlib::make_result_code( navlib::navlib_errc::no_data_available );
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::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.
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.
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_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.