uprops - Universal Property, Metadata, Signaling & Serialization Engine¶
Overview¶
uprops (src/Core/uprops/) is a lightweight, zero-dependency C++20 framework component for Properties, Rich Metadata, Thread-Safe Signaling, Encoders/Decoders, and Connected Proxy Representations.
It is designed to be completely decoupled from the higher-level framework core (uLib::Core). uprops provides a universal model for representing editable properties of any C++ object, attaching rich metadata, broadcasting property updates across threads or network protocols, and synchronizing connected representations across heterogeneous environments (such as Qt GUIs, VTK 3D viewports, Python proxies, or gRPC remote clients).
graph TD
subgraph uprops ["uprops Engine (Standalone C++ Library)"]
Props["Properties & Containers (PropertyBase, Property<T>, FunctionalProperty<T>)"]
Metadata["Rich Metadata & HRP (hrp<T>, make_hrp, units, min/max, defaults)"]
Signals["Signaling System (LocalSignalBackend, boost::signals2)"]
EncDec["Encoder / Decoder Abstraction (IEncoder, IDecoder)"]
Archives["Archive Formats (XML, Text, HRT, Log)"]
end
subgraph Core ["mutomCore Layer"]
Object["uLib::Object & Context"]
uProp["uLib::Property<T>"]
end
subgraph Modules ["Downstream Framework & Applications"]
VTK["mutomVtk (Prop3D, Viewport, Gizmos)"]
GUI["app/gcompose (Qt GUI Widgets)"]
Py["Python Bindings (pybind11)"]
end
Core --> uprops
Modules --> Core
Py --> uprops
Key Features¶
- Zero Framework Dependencies:
upropsdepends solely on standard C++20 and Boost (Boost::serialization,boost::signals2). It does not include or linkuLib::Objector anymutomCoreheaders. - Rich Property Metadata: Every property carries rich metadata out-of-the-box, including:
NameandGroupUnits(e.g.m,cm,mm,rad,deg)Min/Maxrange constraintsDefaultvalueReadOnlystatusEnumLabelsfor enumeration types- Human Readable Properties (HRP):
make_hrp(...)packages values together with metadata wrappers for seamless serialization and inspection. - Encoder / Decoder Architecture: Abstract
IEncoderandIDecoderinterfaces allow property values and metadata to be serialized to file archives (XML/JSON/Text), streamed over network protocols (gRPC/WebSockets), or synchronized with UI view editors. - Thread-Safe Publish-Subscribe:
LocalSignalBackendprovides thread-safe pub/sub dispatch usingPropertyChangePayload, allowing background computations or 3D viewport interactions to update Qt GUI widgets in real time without thread locks on the main loop. - Connected Proxy Representations: Enables bidirectionally synchronized views where changing a 3D gizmo handle updates the C++ domain model (
TRS), which publishes signals to update Qt property panels in real time, and vice versa.
Documentation Sections¶
- Properties & Metadata System: Detailed guide on
PropertyBase,Property<T>,FunctionalProperty<T>,EnumProperty,PropertyContainer, andmake_hrp. - Signaling & Backend Subscribers: Pub/Sub messaging via
LocalSignalBackend, thread-safety, and Qt GUI integration. - Encoder/Decoder & Archives: Stream/File archives,
IEncoder/IDecoderinterfaces, and custom transport protocols. - Framework Integration & Connected Proxies: Integration with
uLib::Object,TRStransform synchronization, VTK gizmo handling, and Python bindings. - Algorithm: Process, Ports, and Scheduling:
uprops::Algorithm/uLib::Algorithm,ULIB_ALGORITHM_INPUT/OUTPUTconnection fields,AlgorithmTaskscheduling, and how gcompose sees an Algorithm as just another Object.