MCPcopy Create free account
hub / github.com/MrNeRF/LichtFeld-Studio / apply_operator_props_to_python_instance

Function apply_operator_props_to_python_instance

src/python/lfs/py_ui.cpp:820–893  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

818 }
819
820 void apply_operator_props_to_python_instance(const std::string& operator_id,
821 const vis::op::OperatorProperties& props,
822 nb::object instance) {
823 const auto* schemas = vis::op::propertySchemas().getSchema(operator_id);
824 if (!schemas || !instance.is_valid() || instance.is_none()) {
825 return;
826 }
827
828 for (const auto& schema : *schemas) {
829 if (!props.has(schema.name)) {
830 continue;
831 }
832
833 try {
834 switch (schema.type) {
835 case vis::op::PropertyType::BOOL:
836 if (const auto value = props.get<bool>(schema.name)) {
837 nb::setattr(instance, schema.name.c_str(), nb::bool_(*value));
838 }
839 break;
840 case vis::op::PropertyType::INT:
841 if (const auto value = props.get<int>(schema.name)) {
842 nb::setattr(instance, schema.name.c_str(), nb::int_(*value));
843 }
844 break;
845 case vis::op::PropertyType::FLOAT:
846 if (const auto value = props.get<float>(schema.name)) {
847 nb::setattr(instance, schema.name.c_str(), nb::float_(*value));
848 }
849 break;
850 case vis::op::PropertyType::STRING:
851 case vis::op::PropertyType::ENUM:
852 if (const auto value = props.get<std::string>(schema.name)) {
853 nb::setattr(instance, schema.name.c_str(), nb::str(value->c_str()));
854 }
855 break;
856 case vis::op::PropertyType::FLOAT_VECTOR: {
857 nb::list values;
858 if (schema.size && *schema.size == 3) {
859 if (const auto value = props.get<glm::vec3>(schema.name)) {
860 values.append(nb::float_(value->x));
861 values.append(nb::float_(value->y));
862 values.append(nb::float_(value->z));
863 nb::setattr(instance, schema.name.c_str(), values);
864 }
865 } else if (const auto value = props.get<std::vector<float>>(schema.name)) {
866 for (float item : *value) {
867 values.append(nb::float_(item));
868 }
869 nb::setattr(instance, schema.name.c_str(), values);
870 }
871 break;
872 }
873 case vis::op::PropertyType::INT_VECTOR: {
874 if (const auto value = props.get<std::vector<int>>(schema.name)) {
875 nb::list values;
876 for (int item : *value) {
877 values.append(nb::int_(item));

Callers 1

Calls 6

getSchemaMethod · 0.80
c_strMethod · 0.80
is_validMethod · 0.45
hasMethod · 0.45
appendMethod · 0.45
whatMethod · 0.45

Tested by

no test coverage detected