Skip to content

Commit

Permalink
#5310: Add CameraInterface to python scripting module
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Oct 2, 2020
1 parent b016b34 commit d8b7878
Show file tree
Hide file tree
Showing 6 changed files with 147 additions and 0 deletions.
1 change: 1 addition & 0 deletions plugins/script/Makefile.am
Expand Up @@ -25,6 +25,7 @@ script_la_SOURCES = ScriptingSystem.cpp \
interfaces/DialogInterface.cpp \
interfaces/EClassInterface.cpp \
interfaces/BrushInterface.cpp \
interfaces/CameraInterface.cpp \
interfaces/RadiantInterface.cpp \
interfaces/PatchInterface.cpp \
interfaces/SelectionInterface.cpp \
Expand Down
2 changes: 2 additions & 0 deletions plugins/script/ScriptingSystem.cpp
Expand Up @@ -42,6 +42,7 @@
#include "interfaces/DialogInterface.h"
#include "interfaces/SelectionSetInterface.h"
#include "interfaces/SelectionGroupInterface.h"
#include "interfaces/CameraInterface.h"

#include "PythonModule.h"

Expand Down Expand Up @@ -446,6 +447,7 @@ void ScriptingSystem::initialiseModule(const IApplicationContext& ctx)
addInterface("DialogInterface", std::make_shared<DialogManagerInterface>());
addInterface("SelectionSetInterface", std::make_shared<SelectionSetInterface>());
addInterface("SelectionGroupInterface", std::make_shared<SelectionGroupInterface>());
addInterface("CameraInterface", std::make_shared<CameraInterface>());

GlobalCommandSystem().addCommand(
"RunScript",
Expand Down
91 changes: 91 additions & 0 deletions plugins/script/interfaces/CameraInterface.cpp
@@ -0,0 +1,91 @@
#include "CameraInterface.h"

#include <pybind11/pybind11.h>

namespace script
{

ScriptCameraView::ScriptCameraView(camera::ICameraView& cameraView) :
_cameraView(cameraView)
{}

const Vector3& ScriptCameraView::getCameraOrigin() const
{
return _cameraView.getCameraOrigin();
}

void ScriptCameraView::setCameraOrigin(const Vector3& newOrigin)
{
_cameraView.setCameraOrigin(newOrigin);
}

const Vector3& ScriptCameraView::getCameraAngles() const
{
return _cameraView.getCameraAngles();
}

void ScriptCameraView::setCameraAngles(const Vector3& newAngles)
{
_cameraView.setCameraAngles(newAngles);
}

void ScriptCameraView::setOriginAndAngles(const Vector3& newOrigin, const Vector3& newAngles)
{
_cameraView.setOriginAndAngles(newOrigin, newAngles);
}

const Vector3& ScriptCameraView::getRightVector() const
{
return _cameraView.getRightVector();
}

const Vector3& ScriptCameraView::getUpVector() const
{
return _cameraView.getUpVector();
}

const Vector3& ScriptCameraView::getForwardVector() const
{
return _cameraView.getForwardVector();
}

float ScriptCameraView::getFarClipPlaneDistance() const
{
return _cameraView.getFarClipPlaneDistance();
}

void ScriptCameraView::setFarClipPlaneDistance(float distance)
{
_cameraView.setFarClipPlaneDistance(distance);
}

ScriptCameraView CameraInterface::getActiveView()
{
return ScriptCameraView(GlobalCameraManager().getActiveView());
}

void CameraInterface::registerInterface(py::module& scope, py::dict& globals)
{
// Define a CameraView structure
py::class_<ScriptCameraView> camera(scope, "CameraView");
camera.def(py::init<camera::ICameraView&>());
camera.def("getCameraOrigin", &ScriptCameraView::getCameraOrigin, py::return_value_policy::reference);
camera.def("setCameraOrigin", &ScriptCameraView::setCameraOrigin);
camera.def("getCameraAngles", &ScriptCameraView::getCameraAngles, py::return_value_policy::reference);
camera.def("setCameraAngles", &ScriptCameraView::setCameraAngles);
camera.def("setOriginAndAngles", &ScriptCameraView::setOriginAndAngles);
camera.def("getRightVector", &ScriptCameraView::getRightVector, py::return_value_policy::reference);
camera.def("getUpVector", &ScriptCameraView::getUpVector, py::return_value_policy::reference);
camera.def("getForwardVector", &ScriptCameraView::getForwardVector, py::return_value_policy::reference);
camera.def("getFarClipPlaneDistance", &ScriptCameraView::getFarClipPlaneDistance);
camera.def("setFarClipPlaneDistance", &ScriptCameraView::setFarClipPlaneDistance);

// Define the BrushCreator interface
py::class_<CameraInterface> cameraManager(scope, "Camera");
cameraManager.def("getActiveView", &CameraInterface::getActiveView);

// Now point the Python variable "CameraInterface" to this instance
globals["GlobalCameraManager"] = this;
}

}
45 changes: 45 additions & 0 deletions plugins/script/interfaces/CameraInterface.h
@@ -0,0 +1,45 @@
#pragma once

#include "iscript.h"
#include "icameraview.h"

#include "MathInterface.h"

namespace script
{

class ScriptCameraView
{
private:
camera::ICameraView& _cameraView;

public:
ScriptCameraView(camera::ICameraView& cameraView);

const Vector3& getCameraOrigin() const;
void setCameraOrigin(const Vector3& newOrigin);

const Vector3& getCameraAngles() const;
void setCameraAngles(const Vector3& newAngles);

void setOriginAndAngles(const Vector3& newOrigin, const Vector3& newAngles);

const Vector3& getRightVector() const;
const Vector3& getUpVector() const;
const Vector3& getForwardVector() const;

float getFarClipPlaneDistance() const;
void setFarClipPlaneDistance(float distance);
};

class CameraInterface :
public IScriptInterface
{
public:
ScriptCameraView getActiveView();

// IScriptInterface implementation
void registerInterface(py::module& scope, py::dict& globals) override;
};

} // namespace script
2 changes: 2 additions & 0 deletions tools/msvc/script.vcxproj
Expand Up @@ -216,6 +216,7 @@
</PostBuildEvent>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="..\..\plugins\script\interfaces\CameraInterface.h" />
<ClInclude Include="..\..\plugins\script\interfaces\SelectionGroupInterface.h" />
<ClInclude Include="..\..\plugins\script\precompiled.h" />
<ClInclude Include="..\..\plugins\script\PythonConsoleWriter.h" />
Expand Down Expand Up @@ -245,6 +246,7 @@
<ClInclude Include="..\..\plugins\script\interfaces\SoundInterface.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\plugins\script\interfaces\CameraInterface.cpp" />
<ClCompile Include="..\..\plugins\script\interfaces\SceneGraphInterface.cpp" />
<ClCompile Include="..\..\plugins\script\interfaces\SelectionGroupInterface.cpp" />
<ClCompile Include="..\..\plugins\script\precompiled.cpp">
Expand Down
6 changes: 6 additions & 0 deletions tools/msvc/script.vcxproj.filters
Expand Up @@ -91,6 +91,9 @@
<ClInclude Include="..\..\plugins\script\PythonModule.h">
<Filter>src</Filter>
</ClInclude>
<ClInclude Include="..\..\plugins\script\interfaces\CameraInterface.h">
<Filter>src\interfaces</Filter>
</ClInclude>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\plugins\script\SceneNodeBuffer.cpp">
Expand Down Expand Up @@ -171,5 +174,8 @@
<ClCompile Include="..\..\plugins\script\PythonModule.cpp">
<Filter>src</Filter>
</ClCompile>
<ClCompile Include="..\..\plugins\script\interfaces\CameraInterface.cpp">
<Filter>src\interfaces</Filter>
</ClCompile>
</ItemGroup>
</Project>

0 comments on commit d8b7878

Please sign in to comment.