simplify_object_model_3dT_simplify_object_model_3dSimplifyObjectModel3dSimplifyObjectModel3d (Operator)

Name

simplify_object_model_3dT_simplify_object_model_3dSimplifyObjectModel3dSimplifyObjectModel3d — Vereinfacht ein trianguliertes 3D-Objektmodell.

Signatur

simplify_object_model_3d( : : ObjectModel3D, Method, Amount, GenParamName, GenParamValue : SimplifiedObjectModel3D)

Herror T_simplify_object_model_3d(const Htuple ObjectModel3D, const Htuple Method, const Htuple Amount, const Htuple GenParamName, const Htuple GenParamValue, Htuple* SimplifiedObjectModel3D)

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)

Beschreibung

simplify_object_model_3dsimplify_object_model_3dSimplifyObjectModel3dSimplifyObjectModel3dSimplifyObjectModel3d vereinfacht das triangulierte 3D-Objektmodell ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3D, indem sukzessiv Modellpunkte eliminiert werden und gibt das Ergebnis in SimplifiedObjectModel3DSimplifiedObjectModel3DSimplifiedObjectModel3DSimplifiedObjectModel3DsimplifiedObjectModel3D zurück. Im Gegensatz zu sample_object_model_3dsample_object_model_3dSampleObjectModel3dSampleObjectModel3dSampleObjectModel3d 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_3dSampleObjectModel3dSampleObjectModel3dSampleObjectModel3d erhalten, der Oberflächen abtastet und dabei äquidistante, unverbundene Punkte erzeugt.

Aktuell wird nur eine Vereinfachungsmethode ('preserve_point_coordintates'"preserve_point_coordintates""preserve_point_coordintates""preserve_point_coordintates""preserve_point_coordintates") unterstützt, die in MethodMethodMethodMethodmethod ausgewählt werden kann. Bei dieser Methode haben die Punkte im vereinfachten Objektmodell SimplifiedObjectModel3DSimplifiedObjectModel3DSimplifiedObjectModel3DSimplifiedObjectModel3DsimplifiedObjectModel3D die gleichen Koordinaten wie die entsprechenden Punkte im Eingabe-Objektmodell ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3D.

simplify_object_model_3dsimplify_object_model_3dSimplifyObjectModel3dSimplifyObjectModel3dSimplifyObjectModel3d setzt voraus, dass die Punkte im Eingabe-Objektmodell trianguliert sind. Dies kann mit get_object_model_3d_paramsget_object_model_3d_paramsGetObjectModel3dParamsGetObjectModel3dParamsGetObjectModel3dParams (GenParamNameGenParamNameGenParamNameGenParamNamegenParamName='has_triangles''has_triangles''has_triangles''has_triangles''hasTriangles') abgefragt werden. Objektmodelle, die keine Triangulierung enthalten, können mit triangulate_object_model_3dtriangulate_object_model_3dTriangulateObjectModel3dTriangulateObjectModel3dTriangulateObjectModel3d oder prepare_object_model_3dprepare_object_model_3dPrepareObjectModel3dPrepareObjectModel3dPrepareObjectModel3d (PurposePurposePurposePurposepurpose='segmentation''segmentation''segmentation''segmentation''segmentation') zuvor trianguliert werden.

Der Grad der Vereinfachung kann mit AmountAmountAmountAmountamount festgelegt werden. Standardmäßig wird in AmountAmountAmountAmountamount der Prozentsatz der Punkte des Eingabe-Objektmodells übergeben, die im Ausgabe-Objektmodell enthalten sein sollen. Je kleiner der Wert für AmountAmountAmountAmountamount in diesem Fall gewählt wird, desto stärker wird das Objektmodell vereinfacht.

Alternativ kann die Bedeutung des Parameters AmountAmountAmountAmountamount verändert werden. Dazu kann der generische Parameter 'amount_type'"amount_type""amount_type""amount_type""amount_type" auf die folgenden Werte gesetzt werden:

'percentage_remaining' AmountAmountAmountAmountamount beschreibt den Prozentsatz der (Default) Punkte des Eingabe-Objektmodells, die im Ausgabe-Objektmodell enthalten sein sollen. Wertebereich: [0.0 ... 100.0] 'percentage_to_remove' AmountAmountAmountAmountamount beschreibt den Prozentsatz der Punkte des Eingabe-Objektmodells, die eliminiert werden sollen. Wertebereich: [0.0 ... 100.0] 'num_points_remaining' AmountAmountAmountAmountamount 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' AmountAmountAmountAmountamount 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" auf 'true'"true""true""true""true" gesetzt werden (der Default ist 'false'"false""false""false""false"). In diesem Fall erhöht sich allerdings die Laufzeit von simplify_object_model_3dsimplify_object_model_3dSimplifyObjectModel3dSimplifyObjectModel3dSimplifyObjectModel3d.

Es ist zu beachten, dass mehrfaches Aufrufen von simplify_object_model_3dsimplify_object_model_3dSimplifyObjectModel3dSimplifyObjectModel3dSimplifyObjectModel3d 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 SimplifiedObjectModel3DSimplifiedObjectModel3DSimplifiedObjectModel3DSimplifiedObjectModel3DsimplifiedObjectModel3D leicht vom in AmountAmountAmountAmountamount gewählten Vereinfachungsgrad abweicht.

Ausführungsinformationen

Parameter

ObjectModel3DObjectModel3DObjectModel3DObjectModel3DobjectModel3D (input_control)  object_model_3d(-array) HObjectModel3D, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)

Handle des 3D-Objektmodells, das vereinfacht werden soll.

MethodMethodMethodMethodmethod (input_control)  string HTupleHTupleHtuple (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"

Werteliste: 'preserve_point_coordinates'"preserve_point_coordinates""preserve_point_coordinates""preserve_point_coordinates""preserve_point_coordinates"

AmountAmountAmountAmountamount (input_control)  number HTupleHTupleHtuple (real / integer) (double / int / long) (double / Hlong) (double / Hlong)

Maß der Vereinfachung (Default: Prozentsatz der verbleibenden Modellpunkte).

GenParamNameGenParamNameGenParamNameGenParamNamegenParamName (input_control)  attribute.name-array HTupleHTupleHtuple (string) (string) (HString) (char*)

Namen der generischen Parameter.

Defaultwert: []

Werteliste: '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"

GenParamValueGenParamValueGenParamValueGenParamValuegenParamValue (input_control)  attribute.value-array HTupleHTupleHtuple (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_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_to_remove'"num_points_to_remove""num_points_to_remove""num_points_to_remove""num_points_to_remove", 'true'"true""true""true""true", 'false'"false""false""false""false"

SimplifiedObjectModel3DSimplifiedObjectModel3DSimplifiedObjectModel3DSimplifiedObjectModel3DsimplifiedObjectModel3D (output_control)  object_model_3d(-array) HObjectModel3D, HTupleHTupleHtuple (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_3dSimplifyObjectModel3dSimplifyObjectModel3dSimplifyObjectModel3d liefert den Wert 2 (H_MSG_TRUE) wenn alle Parameter korrekt sind. Andernfalls wird eine Fehlerbehandlung durchgeführt.

Vorgänger

prepare_object_model_3dprepare_object_model_3dPrepareObjectModel3dPrepareObjectModel3dPrepareObjectModel3d, read_object_model_3dread_object_model_3dReadObjectModel3dReadObjectModel3dReadObjectModel3d, triangulate_object_model_3dtriangulate_object_model_3dTriangulateObjectModel3dTriangulateObjectModel3dTriangulateObjectModel3d, xyz_to_object_model_3dxyz_to_object_model_3dXyzToObjectModel3dXyzToObjectModel3dXyzToObjectModel3d

Nachfolger

disp_object_model_3ddisp_object_model_3dDispObjectModel3dDispObjectModel3dDispObjectModel3d, smallest_bounding_box_object_model_3dsmallest_bounding_box_object_model_3dSmallestBoundingBoxObjectModel3dSmallestBoundingBoxObjectModel3dSmallestBoundingBoxObjectModel3d

Alternativen

sample_object_model_3dsample_object_model_3dSampleObjectModel3dSampleObjectModel3dSampleObjectModel3d, smooth_object_model_3dsmooth_object_model_3dSmoothObjectModel3dSmoothObjectModel3dSmoothObjectModel3d

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