simplify_object_model_3dT_simplify_object_model_3dSimplifyObjectModel3dSimplifyObjectModel3dsimplify_object_model_3d (Operator)
Name
simplify_object_model_3dT_simplify_object_model_3dSimplifyObjectModel3dSimplifyObjectModel3dsimplify_object_model_3d
— Vereinfacht ein trianguliertes 3D-Objektmodell.
Signatur
void SimplifyObjectModel3d(const HTuple& ObjectModel3D, const HTuple& Method, const HTuple& Amount, const HTuple& GenParamName, const HTuple& GenParamValue, HTuple* SimplifiedObjectModel3D)
static HObjectModel3DArray HObjectModel3D::SimplifyObjectModel3d(const HObjectModel3DArray& ObjectModel3D, const HString& Method, const HTuple& Amount, const HTuple& GenParamName, const HTuple& GenParamValue)
HObjectModel3D HObjectModel3D::SimplifyObjectModel3d(const HString& Method, double Amount, const HTuple& GenParamName, const HTuple& GenParamValue) const
HObjectModel3D HObjectModel3D::SimplifyObjectModel3d(const char* Method, double Amount, const HTuple& GenParamName, const HTuple& GenParamValue) const
HObjectModel3D HObjectModel3D::SimplifyObjectModel3d(const wchar_t* Method, double Amount, const HTuple& GenParamName, const HTuple& GenParamValue) const
(Nur Windows)
static void HOperatorSet.SimplifyObjectModel3d(HTuple objectModel3D, HTuple method, HTuple amount, HTuple genParamName, HTuple genParamValue, out HTuple simplifiedObjectModel3D)
static HObjectModel3D[] HObjectModel3D.SimplifyObjectModel3d(HObjectModel3D[] objectModel3D, string method, HTuple amount, HTuple genParamName, HTuple genParamValue)
HObjectModel3D HObjectModel3D.SimplifyObjectModel3d(string method, double amount, HTuple genParamName, HTuple genParamValue)
def simplify_object_model_3d(object_model_3d: MaybeSequence[HHandle], method: str, amount: Union[int, float], gen_param_name: Sequence[str], gen_param_value: Sequence[Union[str, float]]) -> Sequence[HHandle]
def simplify_object_model_3d_s(object_model_3d: MaybeSequence[HHandle], method: str, amount: Union[int, float], gen_param_name: Sequence[str], gen_param_value: Sequence[Union[str, float]]) -> HHandle
Beschreibung
simplify_object_model_3dsimplify_object_model_3dSimplifyObjectModel3dSimplifyObjectModel3dSimplifyObjectModel3dsimplify_object_model_3d
vereinfacht das triangulierte
3D-Objektmodell ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3Dobject_model_3d
, indem sukzessiv Modellpunkte
eliminiert werden und gibt das Ergebnis in SimplifiedObjectModel3DSimplifiedObjectModel3DSimplifiedObjectModel3DSimplifiedObjectModel3DsimplifiedObjectModel3Dsimplified_object_model_3d
zurück. Im Gegensatz zu sample_object_model_3dsample_object_model_3dSampleObjectModel3dSampleObjectModel3dSampleObjectModel3dsample_object_model_3d
wird dabei die
ursprüngliche Geometrie des 3D-Objektmodells so gut wie möglich bewahrt.
Dies bedeutet typischerweise, dass Kanten erhalten
bleiben, die Punktdichte in glatten Objektteilen aber gleichzeitig
stark reduziert wird. Dies ist z.B. hilfreich, um nachfolgende
Operatoren durch die reduzierte Modellkomplexität zu beschleunigen.
Die Vermaschung des Eingabe-3D-Objektmodells bleibt im Gegensatz zum
Operator sample_object_model_3dsample_object_model_3dSampleObjectModel3dSampleObjectModel3dSampleObjectModel3dsample_object_model_3d
erhalten, der Oberflächen
abtastet und dabei äquidistante, unverbundene Punkte erzeugt.
Aktuell wird nur eine Vereinfachungsmethode
('preserve_point_coordinates'"preserve_point_coordinates""preserve_point_coordinates""preserve_point_coordinates""preserve_point_coordinates""preserve_point_coordinates") unterstützt,
die in MethodMethodMethodMethodmethodmethod
ausgewählt werden kann. Bei dieser Methode haben die
Punkte im vereinfachten Objektmodell SimplifiedObjectModel3DSimplifiedObjectModel3DSimplifiedObjectModel3DSimplifiedObjectModel3DsimplifiedObjectModel3Dsimplified_object_model_3d
die gleichen Koordinaten wie die entsprechenden Punkte im
Eingabe-Objektmodell ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3Dobject_model_3d
.
simplify_object_model_3dsimplify_object_model_3dSimplifyObjectModel3dSimplifyObjectModel3dSimplifyObjectModel3dsimplify_object_model_3d
setzt voraus, dass die Punkte im
Eingabe-Objektmodell trianguliert sind. Dies kann mit
get_object_model_3d_paramsget_object_model_3d_paramsGetObjectModel3dParamsGetObjectModel3dParamsGetObjectModel3dParamsget_object_model_3d_params
(GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name
='has_triangles'"has_triangles""has_triangles""has_triangles""has_triangles""has_triangles") abgefragt
werden. Objektmodelle, die keine Triangulierung enthalten, können mit
triangulate_object_model_3dtriangulate_object_model_3dTriangulateObjectModel3dTriangulateObjectModel3dTriangulateObjectModel3dtriangulate_object_model_3d
oder prepare_object_model_3dprepare_object_model_3dPrepareObjectModel3dPrepareObjectModel3dPrepareObjectModel3dprepare_object_model_3d
(PurposePurposePurposePurposepurposepurpose
='segmentation'"segmentation""segmentation""segmentation""segmentation""segmentation") zuvor trianguliert werden.
Der Grad der Vereinfachung kann mit AmountAmountAmountAmountamountamount
festgelegt werden.
Standardmäßig wird in AmountAmountAmountAmountamountamount
der Prozentsatz der Punkte des
Eingabe-Objektmodells übergeben, die im Ausgabe-Objektmodell enthalten sein
sollen. Je kleiner der Wert für AmountAmountAmountAmountamountamount
in diesem Fall gewählt
wird, desto stärker wird das Objektmodell vereinfacht.
Alternativ kann die Bedeutung des Parameters AmountAmountAmountAmountamountamount
verändert
werden. Dazu kann der generische Parameter 'amount_type'"amount_type""amount_type""amount_type""amount_type""amount_type" auf die
folgenden Werte gesetzt werden:
'percentage_remaining' AmountAmountAmountAmountamountamount
beschreibt den Prozentsatz der
(Default) Punkte des Eingabe-Objektmodells, die im
Ausgabe-Objektmodell enthalten sein sollen.
Wertebereich: [0.0 ... 100.0]
'percentage_to_remove' AmountAmountAmountAmountamountamount
beschreibt den Prozentsatz der
Punkte des Eingabe-Objektmodells, die eliminiert
werden sollen.
Wertebereich: [0.0 ... 100.0]
'num_points_remaining' AmountAmountAmountAmountamountamount
beschreibt die Anzahl der Punkte
des Eingabe-Objektmodells, die im
Ausgabe-Objektmodell enthalten sein sollen.
Wertebereich:
[0 ... Anzahl der Punkte im Eingabe-Objektmodell]
'num_points_to_remove' AmountAmountAmountAmountamountamount
beschreibt die Anzahl der Punkte
des Eingabe-Objektmodells, die eliminiert
werden sollen.
Wertebereich:
[0 ... Anzahl der Punkte im Eingabe-Objektmodell]
Manchmal kehren sich Dreiecke der Vermaschung während der Vereinfachung
um, d.h. die Richtung ihrer Normalenvektoren ändert sich um 180 Grad.
Dies tritt insbesondere bei künstlich generierten CAD-Modellen auf,
die ebenen Teilen enthalten. Um die Umkehr
der Dreiecke zu verhindern, kann der generische Parameter
'avoid_triangle_flips'"avoid_triangle_flips""avoid_triangle_flips""avoid_triangle_flips""avoid_triangle_flips""avoid_triangle_flips" auf 'true'"true""true""true""true""true" gesetzt werden
(der Default ist 'false'"false""false""false""false""false"). In diesem Fall erhöht sich allerdings
die Laufzeit von simplify_object_model_3dsimplify_object_model_3dSimplifyObjectModel3dSimplifyObjectModel3dSimplifyObjectModel3dsimplify_object_model_3d
.
Es ist zu beachten, dass mehrfaches Aufrufen von
simplify_object_model_3dsimplify_object_model_3dSimplifyObjectModel3dSimplifyObjectModel3dSimplifyObjectModel3dsimplify_object_model_3d
mit geringem Vereinfachungsgrad zu anderen
Ergebnissen führen kann als ein einmaliger Aufruf mit stärkerem
Vereinfachungsgrad. Isolierte (d.h. nicht-triangulierte)
Punkte werden bei der Vereinfachung gelöscht. Dies kann dazu führen, dass
die Anzahl der Punkte in SimplifiedObjectModel3DSimplifiedObjectModel3DSimplifiedObjectModel3DSimplifiedObjectModel3DsimplifiedObjectModel3Dsimplified_object_model_3d
leicht vom in
AmountAmountAmountAmountamountamount
gewählten Vereinfachungsgrad abweicht.
Ausführungsinformationen
- Multithreading-Typ: reentrant (läuft parallel zu nicht-exklusiven Operatoren).
- Multithreading-Bereich: global (kann von jedem Thread aufgerufen werden).
- Wird ohne Parallelisierung verarbeitet.
Parameter
ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3Dobject_model_3d
(input_control) object_model_3d(-array) →
HObjectModel3D, HTupleMaybeSequence[HHandle]HTupleHtuple (handle) (IntPtr) (HHandle) (handle)
Handle des 3D-Objektmodells, das vereinfacht werden
soll.
MethodMethodMethodMethodmethodmethod
(input_control) string →
HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Methode, die zum Vereinfachen verwendet werden
soll.
Defaultwert:
'preserve_point_coordinates'
"preserve_point_coordinates"
"preserve_point_coordinates"
"preserve_point_coordinates"
"preserve_point_coordinates"
"preserve_point_coordinates"
Werteliste: 'preserve_point_coordinates'"preserve_point_coordinates""preserve_point_coordinates""preserve_point_coordinates""preserve_point_coordinates""preserve_point_coordinates"
AmountAmountAmountAmountamountamount
(input_control) number →
HTupleUnion[int, float]HTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)
Maß der Vereinfachung (Default: Prozentsatz der
verbleibenden Modellpunkte).
GenParamNameGenParamNameGenParamNameGenParamNamegenParamNamegen_param_name
(input_control) attribute.name-array →
HTupleSequence[str]HTupleHtuple (string) (string) (HString) (char*)
Namen der generischen Parameter.
Defaultwert: []
Werteliste: 'amount_type'"amount_type""amount_type""amount_type""amount_type""amount_type", 'avoid_triangle_flips'"avoid_triangle_flips""avoid_triangle_flips""avoid_triangle_flips""avoid_triangle_flips""avoid_triangle_flips"
GenParamValueGenParamValueGenParamValueGenParamValuegenParamValuegen_param_value
(input_control) attribute.value-array →
HTupleSequence[Union[str, float]]HTupleHtuple (string / real) (string / double) (HString / double) (char* / double)
Werte der generischen Parameter.
Defaultwert: []
Wertevorschläge: 'percentage_remaining'"percentage_remaining""percentage_remaining""percentage_remaining""percentage_remaining""percentage_remaining", 'percentage_to_remove'"percentage_to_remove""percentage_to_remove""percentage_to_remove""percentage_to_remove""percentage_to_remove", 'num_points_remaining'"num_points_remaining""num_points_remaining""num_points_remaining""num_points_remaining""num_points_remaining", 'num_points_to_remove'"num_points_to_remove""num_points_to_remove""num_points_to_remove""num_points_to_remove""num_points_to_remove", 'true'"true""true""true""true""true", 'false'"false""false""false""false""false"
SimplifiedObjectModel3DSimplifiedObjectModel3DSimplifiedObjectModel3DSimplifiedObjectModel3DsimplifiedObjectModel3Dsimplified_object_model_3d
(output_control) object_model_3d(-array) →
HObjectModel3D, HTupleSequence[HHandle]HTupleHtuple (handle) (IntPtr) (HHandle) (handle)
Handle des vereinfachten 3D-Objektmodells.
Beispiel (HDevelop)
read_object_model_3d ('mvtec_bunny.om3', 'm', [], [], ObjectModel3D, Status)
visualize_object_model_3d (WindowHandle, ObjectModel3D, [], [], [], [], \
[], [], [], Pose)
simplify_object_model_3d (ObjectModel3D, 'preserve_point_coordinates', \
5.0, 'amount_type', 'percentage_remaining', \
SimplifiedObjectModel3D)
visualize_object_model_3d (WindowHandle, SimplifiedObjectModel3D, [], \
Pose, [], [], [], [], [], Pose)
Ergebnis
simplify_object_model_3dsimplify_object_model_3dSimplifyObjectModel3dSimplifyObjectModel3dSimplifyObjectModel3dsimplify_object_model_3d
liefert den Wert TRUE wenn alle
Parameter korrekt sind. Andernfalls wird eine Fehlerbehandlung durchgeführt.
Vorgänger
prepare_object_model_3dprepare_object_model_3dPrepareObjectModel3dPrepareObjectModel3dPrepareObjectModel3dprepare_object_model_3d
,
read_object_model_3dread_object_model_3dReadObjectModel3dReadObjectModel3dReadObjectModel3dread_object_model_3d
,
triangulate_object_model_3dtriangulate_object_model_3dTriangulateObjectModel3dTriangulateObjectModel3dTriangulateObjectModel3dtriangulate_object_model_3d
,
xyz_to_object_model_3dxyz_to_object_model_3dXyzToObjectModel3dXyzToObjectModel3dXyzToObjectModel3dxyz_to_object_model_3d
Nachfolger
disp_object_model_3ddisp_object_model_3dDispObjectModel3dDispObjectModel3dDispObjectModel3ddisp_object_model_3d
,
smallest_bounding_box_object_model_3dsmallest_bounding_box_object_model_3dSmallestBoundingBoxObjectModel3dSmallestBoundingBoxObjectModel3dSmallestBoundingBoxObjectModel3dsmallest_bounding_box_object_model_3d
Alternativen
sample_object_model_3dsample_object_model_3dSampleObjectModel3dSampleObjectModel3dSampleObjectModel3dsample_object_model_3d
,
smooth_object_model_3dsmooth_object_model_3dSmoothObjectModel3dSmoothObjectModel3dSmoothObjectModel3dsmooth_object_model_3d
Literatur
Michael Garland, Paul S. Heckbert: Surface Simplification Using Quadric
Error Metrics, Proceedings of the 24th Annual Conference on Computer
Graphics and Interactive Techniques (SIGGRAPH '97), 209-216, ACM Press,
1997
Modul
3D Metrology