Skip to content

Commit ad35d85

Browse files
committed
Prepare create mesh
1 parent b4982b1 commit ad35d85

File tree

14 files changed

+2043
-35
lines changed

14 files changed

+2043
-35
lines changed

Python3Scripting_examples/tools_create_mesh/main.py

Lines changed: 775 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
{
2+
"enabled": true,
3+
"for": "tools",
4+
"id": "tools_create_mesh",
5+
"name": "create_mesh"
6+
}

PythonWrapperGenerator/gen_editor_wrapper.py

Lines changed: 45 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -397,15 +397,47 @@ def write_source_type(self):
397397
def prepare_parse_tuple_args_const_char_pointer(self, _arg, var_name):
398398
ret = ""
399399
ret += " if (!PyUnicode_Check(" + var_name + ")) {\n"
400-
ret += " // TODO - error\n"
401-
ret += " std::cout << \"ERROR: " + var_name + " No unicoode \" << std::endl;\n"
402-
ret += " Py_INCREF(Py_None);\n"
403-
ret += " ret = Py_None;\n"
404-
ret += " return ret;\n"
400+
ret += " PyErr_Format(PyExc_TypeError,\n"
401+
ret += " \"Argument \\\"" + _arg["name"] + "\\\" to %s must be a strint object not a \\\"%s\\\"\",\n"
402+
ret += " __FUNCTION__, Py_TYPE(" + var_name + ")->tp_name);\n"
403+
ret += " return NULL;\n"
405404
ret += " }\n"
406405
ret += " " + _arg["type"] + " " + _arg["name"] + " = PyUnicode_AsUTF8(" + var_name + ");\n"
407406
return ret
408407

408+
def prepare_parse_tuple_args_int(self, _arg, var_name):
409+
ret = ""
410+
ret += " if (!PyLong_Check(" + var_name + ")) {\n"
411+
ret += " PyErr_Format(PyExc_TypeError,\n"
412+
ret += " \"Argument \\\"" + _arg["name"] + "\\\" to %s must be a int object not a \\\"%s\\\"\",\n"
413+
ret += " __FUNCTION__, Py_TYPE(" + var_name + ")->tp_name);\n"
414+
ret += " return NULL;\n"
415+
ret += " }\n"
416+
ret += " " + _arg["type"] + " " + _arg["name"] + " = PyLong_AsLong(" + var_name + ");\n"
417+
return ret
418+
419+
def prepare_parse_tuple_args_bool(self, _arg, var_name):
420+
ret = ""
421+
ret += " if (!PyBool_Check(" + var_name + ")) {\n"
422+
ret += " PyErr_Format(PyExc_TypeError,\n"
423+
ret += " \"Argument \\\"" + _arg["name"] + "\\\" to %s must be a bool object not a \\\"%s\\\"\",\n"
424+
ret += " __FUNCTION__, Py_TYPE(" + var_name + ")->tp_name);\n"
425+
ret += " return NULL;\n"
426+
ret += " }\n"
427+
ret += " " + _arg["type"] + " " + _arg["name"] + " = " + var_name + " == Py_True;\n"
428+
return ret
429+
430+
def prepare_parse_tuple_args_float(self, _arg, var_name):
431+
ret = ""
432+
ret += " if (!PyFloat_Check(" + var_name + ")) {\n"
433+
ret += " PyErr_Format(PyExc_TypeError,\n"
434+
ret += " \"Argument \\\"" + _arg["name"] + "\\\" to %s must be a float object not a \\\"%s\\\"\",\n"
435+
ret += " __FUNCTION__, Py_TYPE(" + var_name + ")->tp_name);\n"
436+
ret += " return NULL;\n"
437+
ret += " }\n"
438+
ret += " " + _arg["type"] + " " + _arg["name"] + " = PyFloat_AsDouble(" + var_name + ");\n"
439+
return ret
440+
409441
def prepare_parse_tuple_args(self, _args):
410442
ret = {
411443
"parse": " // parse args:\n",
@@ -419,7 +451,7 @@ def prepare_parse_tuple_args(self, _args):
419451
for _arg in _args:
420452
counter += 1
421453
var_name = "pArg" + str(counter)
422-
ret["parse"] += " PyObject *" + var_name + "; // " + _arg["type"] + " " + _arg["name"] + ";\n"
454+
ret["parse"] += " PyObject *" + var_name + " = NULL; // " + _arg["type"] + " " + _arg["name"] + ";\n"
423455
parse_tuple_o += "O"
424456
parse_tuple_args += ", &" + var_name
425457

@@ -434,6 +466,12 @@ def prepare_parse_tuple_args(self, _args):
434466
ret["parse"] += " // " + var_name + "\n"
435467
if _arg["type"] == "const char *":
436468
ret["parse"] += self.prepare_parse_tuple_args_const_char_pointer(_arg, var_name)
469+
elif _arg["type"] == "int":
470+
ret["parse"] += self.prepare_parse_tuple_args_int(_arg, var_name)
471+
elif _arg["type"] == "bool":
472+
ret["parse"] += self.prepare_parse_tuple_args_bool(_arg, var_name)
473+
elif _arg["type"] == "float":
474+
ret["parse"] += self.prepare_parse_tuple_args_float(_arg, var_name)
437475
else:
438476
ret["parse"] += "TODO for " + _arg["type"] + "\n"
439477
ret["parse"] += "\n"
@@ -738,7 +776,7 @@ def write_source_finish(self):
738776
"mat4",
739777
"ObjectMeshDynamic",
740778
"vec3",
741-
"Vec3",
779+
"vec2",
742780
"Player",
743781
# editor
744782
"AssetManager",

source/plugins/Sea5kg/Python3Scripting/CMakeLists.txt

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,8 +123,11 @@ add_library(${current_target} SHARED
123123
${PROJECT_SOURCE_DIR}/src/python3_wrapper/pytypesobjects/python3_unigine_uguid.cpp
124124
${PROJECT_SOURCE_DIR}/src/python3_wrapper/pytypesobjects/python3_unigine_material.cpp
125125
${PROJECT_SOURCE_DIR}/src/python3_wrapper/pytypesobjects/python3_unigine_materials.cpp
126+
${PROJECT_SOURCE_DIR}/src/python3_wrapper/pytypesobjects/python3_unigine_mesh.cpp
126127
${PROJECT_SOURCE_DIR}/src/python3_wrapper/pytypesobjects/python3_unigine_node.cpp
127128
${PROJECT_SOURCE_DIR}/src/python3_wrapper/pytypesobjects/python3_unigine_objectmeshdynamic.cpp
129+
${PROJECT_SOURCE_DIR}/src/python3_wrapper/pytypesobjects/python3_unigine_vec2.cpp
130+
${PROJECT_SOURCE_DIR}/src/python3_wrapper/pytypesobjects/python3_unigine_vec3.cpp
128131
)
129132

130133
IF (WIN32)

source/plugins/Sea5kg/Python3Scripting/src/RunPythonInThread.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ void RunScriptInThread::run() {
4444
auto *pRunner = new LocalRunner();
4545
Python3Runner::runInMainThread(pRunner);
4646
while(!pRunner->mutexAsync.tryLock(5)) {
47-
Unigine::Log::message("wait\n");
47+
// Unigine::Log::message("waiting...\n");
4848
}
4949
pRunner->mutexAsync.unlock();
5050
delete pRunner;

source/plugins/Sea5kg/Python3Scripting/src/python3_wrapper/pytypesobjects/python3_pytypeobjects.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,23 @@
33
#include "python3_unigine_assetmanager.h"
44
#include "python3_unigine_materials.h"
55
#include "python3_unigine_material.h"
6+
#include "python3_unigine_mesh.h"
67
#include "python3_unigine_node.h"
78
#include "python3_unigine_objectmeshdynamic.h"
89
#include "python3_unigine_uguid.h"
10+
#include "python3_unigine_vec3.h"
11+
#include "python3_unigine_vec2.h"
912

1013
Python3PyTypeObjectAll::Python3PyTypeObjectAll() {
1114
m_vPyTypesObjects.push_back(new PyUnigine::Python3UnigineUGUID());
15+
m_vPyTypesObjects.push_back(new PyUnigine::Python3Uniginevec3());
16+
m_vPyTypesObjects.push_back(new PyUnigine::Python3Uniginevec2());
1217
m_vPyTypesObjects.push_back(new PyUnigine::Python3UnigineMaterials());
1318
m_vPyTypesObjects.push_back(new PyUnigine::Python3UnigineMaterial());
1419
m_vPyTypesObjects.push_back(new PyUnigine::Python3UnigineNode());
1520
m_vPyTypesObjects.push_back(new PyUnigine::Python3UnigineAssetManager());
1621
m_vPyTypesObjects.push_back(new PyUnigine::Python3UnigineObjectMeshDynamic());
22+
m_vPyTypesObjects.push_back(new PyUnigine::Python3UnigineMesh());
1723
}
1824

1925
bool Python3PyTypeObjectAll::isReady() {

source/plugins/Sea5kg/Python3Scripting/src/python3_wrapper/pytypesobjects/python3_unigine_materials.cpp

Lines changed: 29 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -105,11 +105,10 @@ static PyObject * unigine_Materials_load_material(unigine_Materials* self_static
105105

106106
// pArg1
107107
if (!PyUnicode_Check(pArg1)) {
108-
// TODO - error
109-
std::cout << "ERROR: pArg1 No unicoode " << std::endl;
110-
Py_INCREF(Py_None);
111-
ret = Py_None;
112-
return ret;
108+
PyErr_Format(PyExc_TypeError,
109+
"Argument \"path\" to %s must be a strint object not a \"%s\"",
110+
__FUNCTION__, Py_TYPE(pArg1)->tp_name);
111+
return NULL;
113112
}
114113
const char * path = PyUnicode_AsUTF8(pArg1);
115114

@@ -228,7 +227,6 @@ static PyObject * unigine_Materials_compile_shaders(unigine_Materials* self_stat
228227
virtual void run() override {
229228
Unigine::Materials::compileShaders();
230229
};
231-
// args
232230
};
233231
auto *pRunner = new LocalRunner();
234232
Python3Runner::runInMainThread(pRunner);
@@ -261,25 +259,31 @@ static PyObject * unigine_Materials_set_precompile_all_shaders(unigine_Materials
261259
PyObject *pArg1; // bool shaders;
262260
PyArg_ParseTuple(args, "O", &pArg1);
263261

264-
// // pArg1
265-
// TODO for bool
266-
267-
268-
// class LocalRunner : public Python3Runner {
269-
// public:
270-
// virtual void run() override {
271-
// Unigine::Materials::setPrecompileAllShaders(shaders);
272-
// };
273-
// // args
274-
// bool shaders;
275-
// };
276-
// auto *pRunner = new LocalRunner();
277-
// pRunner->shaders = shaders;
278-
// Python3Runner::runInMainThread(pRunner);
279-
// while (!pRunner->mutexAsync.tryLock(5)) { // milliseconds
280-
// }
281-
// pRunner->mutexAsync.unlock();
282-
// delete pRunner;
262+
// pArg1
263+
if (!PyBool_Check(pArg1)) {
264+
PyErr_Format(PyExc_TypeError,
265+
"Argument \"shaders\" to %s must be a bool object not a \"%s\"",
266+
__FUNCTION__, Py_TYPE(pArg1)->tp_name);
267+
return NULL;
268+
}
269+
bool shaders = pArg1 == Py_True;
270+
271+
272+
class LocalRunner : public Python3Runner {
273+
public:
274+
virtual void run() override {
275+
Unigine::Materials::setPrecompileAllShaders(shaders);
276+
};
277+
// args
278+
bool shaders;
279+
};
280+
auto *pRunner = new LocalRunner();
281+
pRunner->shaders = shaders;
282+
Python3Runner::runInMainThread(pRunner);
283+
while (!pRunner->mutexAsync.tryLock(5)) { // milliseconds
284+
}
285+
pRunner->mutexAsync.unlock();
286+
delete pRunner;
283287
Py_INCREF(Py_None);
284288
ret = Py_None;
285289
assert(!PyErr_Occurred());
@@ -308,7 +312,6 @@ static PyObject * unigine_Materials_create_shaders(unigine_Materials* self_stati
308312
virtual void run() override {
309313
Unigine::Materials::createShaders();
310314
};
311-
// args
312315
};
313316
auto *pRunner = new LocalRunner();
314317
Python3Runner::runInMainThread(pRunner);

0 commit comments

Comments
 (0)