draw_nurbs_interp_modT_draw_nurbs_interp_modDrawNurbsInterpModDrawNurbsInterpMod (Operator)
Name
draw_nurbs_interp_modT_draw_nurbs_interp_modDrawNurbsInterpModDrawNurbsInterpMod
— Interaktives Modifizieren einer NURBS-Kurve durch Interpolation.
Warnung
Dieser Operator kann nicht in HDevelop-Grafikfenstern verwendet werden, die
mit dev_open_window
geöffnet wurden.
Signatur
draw_nurbs_interp_mod( : ContOut : WindowHandle, Rotate, Move, Scale, KeepRatio, Edit, Degree, RowsIn, ColsIn, TangentsIn : ControlRows, ControlCols, Knots, Rows, Cols, Tangents)
Herror T_draw_nurbs_interp_mod(Hobject* ContOut, const Htuple WindowHandle, const Htuple Rotate, const Htuple Move, const Htuple Scale, const Htuple KeepRatio, const Htuple Edit, const Htuple Degree, const Htuple RowsIn, const Htuple ColsIn, const Htuple TangentsIn, Htuple* ControlRows, Htuple* ControlCols, Htuple* Knots, Htuple* Rows, Htuple* Cols, Htuple* Tangents)
void DrawNurbsInterpMod(HObject* ContOut, const HTuple& WindowHandle, const HTuple& Rotate, const HTuple& Move, const HTuple& Scale, const HTuple& KeepRatio, const HTuple& Edit, const HTuple& Degree, const HTuple& RowsIn, const HTuple& ColsIn, const HTuple& TangentsIn, HTuple* ControlRows, HTuple* ControlCols, HTuple* Knots, HTuple* Rows, HTuple* Cols, HTuple* Tangents)
void HXLDCont::DrawNurbsInterpMod(const HWindow& WindowHandle, const HString& Rotate, const HString& Move, const HString& Scale, const HString& KeepRatio, const HString& Edit, Hlong Degree, const HTuple& RowsIn, const HTuple& ColsIn, const HTuple& TangentsIn, HTuple* ControlRows, HTuple* ControlCols, HTuple* Knots, HTuple* Rows, HTuple* Cols, HTuple* Tangents)
void HXLDCont::DrawNurbsInterpMod(const HWindow& WindowHandle, const char* Rotate, const char* Move, const char* Scale, const char* KeepRatio, const char* Edit, Hlong Degree, const HTuple& RowsIn, const HTuple& ColsIn, const HTuple& TangentsIn, HTuple* ControlRows, HTuple* ControlCols, HTuple* Knots, HTuple* Rows, HTuple* Cols, HTuple* Tangents)
void HXLDCont::DrawNurbsInterpMod(const HWindow& WindowHandle, const wchar_t* Rotate, const wchar_t* Move, const wchar_t* Scale, const wchar_t* KeepRatio, const wchar_t* Edit, Hlong Degree, const HTuple& RowsIn, const HTuple& ColsIn, const HTuple& TangentsIn, HTuple* ControlRows, HTuple* ControlCols, HTuple* Knots, HTuple* Rows, HTuple* Cols, HTuple* Tangents)
(Nur Windows)
HXLDCont HWindow::DrawNurbsInterpMod(const HString& Rotate, const HString& Move, const HString& Scale, const HString& KeepRatio, const HString& Edit, Hlong Degree, const HTuple& RowsIn, const HTuple& ColsIn, const HTuple& TangentsIn, HTuple* ControlRows, HTuple* ControlCols, HTuple* Knots, HTuple* Rows, HTuple* Cols, HTuple* Tangents) const
HXLDCont HWindow::DrawNurbsInterpMod(const char* Rotate, const char* Move, const char* Scale, const char* KeepRatio, const char* Edit, Hlong Degree, const HTuple& RowsIn, const HTuple& ColsIn, const HTuple& TangentsIn, HTuple* ControlRows, HTuple* ControlCols, HTuple* Knots, HTuple* Rows, HTuple* Cols, HTuple* Tangents) const
HXLDCont HWindow::DrawNurbsInterpMod(const wchar_t* Rotate, const wchar_t* Move, const wchar_t* Scale, const wchar_t* KeepRatio, const wchar_t* Edit, Hlong Degree, const HTuple& RowsIn, const HTuple& ColsIn, const HTuple& TangentsIn, HTuple* ControlRows, HTuple* ControlCols, HTuple* Knots, HTuple* Rows, HTuple* Cols, HTuple* Tangents) const
(Nur Windows)
static void HOperatorSet.DrawNurbsInterpMod(out HObject contOut, HTuple windowHandle, HTuple rotate, HTuple move, HTuple scale, HTuple keepRatio, HTuple edit, HTuple degree, HTuple rowsIn, HTuple colsIn, HTuple tangentsIn, out HTuple controlRows, out HTuple controlCols, out HTuple knots, out HTuple rows, out HTuple cols, out HTuple tangents)
void HXLDCont.DrawNurbsInterpMod(HWindow windowHandle, string rotate, string move, string scale, string keepRatio, string edit, int degree, HTuple rowsIn, HTuple colsIn, HTuple tangentsIn, out HTuple controlRows, out HTuple controlCols, out HTuple knots, out HTuple rows, out HTuple cols, out HTuple tangents)
HXLDCont HWindow.DrawNurbsInterpMod(string rotate, string move, string scale, string keepRatio, string edit, int degree, HTuple rowsIn, HTuple colsIn, HTuple tangentsIn, out HTuple controlRows, out HTuple controlCols, out HTuple knots, out HTuple rows, out HTuple cols, out HTuple tangents)
Beschreibung
draw_nurbs_interp_moddraw_nurbs_interp_modDrawNurbsInterpModDrawNurbsInterpModDrawNurbsInterpMod
liefert die Kontur ContOutContOutContOutContOutcontOut
einer
NURBS-Kurve, die interaktiv durch den Benutzer im Fenster
WindowHandleWindowHandleWindowHandleWindowHandlewindowHandle
durch Interpolation modifiziert worden ist.
Zusätzlich zu ContOutContOutContOutContOutcontOut
werden die Kontrollinformation der Kurve
(ControlRowsControlRowsControlRowsControlRowscontrolRows
,ControlColsControlColsControlColsControlColscontrolCols
und KnotsKnotsKnotsKnotsknots
), die vom
Benutzer bestimmten Interpolationspunkte (RowsRowsRowsRowsrows
und ColsColsColsColscols
)
und die Tangenten im ersten und letzten Punkt der Kurve (TangentsTangentsTangentsTangentstangents
)
zurückgegeben. TangentsTangentsTangentsTangentstangents
besteht aus den Y- (Zeilen) und X- (Spalten)
Werten der Tangente im Startpunkt, gefolgt von den beiden Werten der
Tangente im Endpunkt der Kurve.
Ein Gewichtsvektor wird nicht zurückgegeben, da dieser aus gleichen
Einträgen besteht. Das heißt, dass 'auto'"auto""auto""auto""auto" als Gewichtsvektor
verwendet werden kann, wenn die Kontrollinformationen im Operator
gen_contour_nurbs_xldgen_contour_nurbs_xldGenContourNurbsXldGenContourNurbsXldGenContourNurbsXld
verwendet werden. Mehr Informationen über
NURBS-Kurven befinden sich in der Dokumentation des Operators
gen_contour_nurbs_xldgen_contour_nurbs_xldGenContourNurbsXldGenContourNurbsXldGenContourNurbsXld
.
Die Eingabekurve wird durch die Interpolationspunkte RowsInRowsInRowsInRowsInrowsIn
,
ColsInColsInColsInColsIncolsIn
, den Grad DegreeDegreeDegreeDegreedegree
und die Tangenten
TangentsInTangentsInTangentsInTangentsIntangentsIn
beschrieben, so dass draw_nurbs_interp_moddraw_nurbs_interp_modDrawNurbsInterpModDrawNurbsInterpModDrawNurbsInterpMod
mit den Ausgabedaten des Operators draw_nurbs_interpdraw_nurbs_interpDrawNurbsInterpDrawNurbsInterpDrawNurbsInterp
verwendet
werden kann.
Die Kurve kann auf zwei Arten modifiziert werden: Durch Editieren, zum
Beispiel durch Einfügen oder Verschieben von Punkten, oder durch das
Transformieren der Kurve als Ganzes, zum Beispiel durch Rotieren,
Verschieben oder Skalieren. Die Kontur kann jedoch nur editiert werden, wenn
der Parameter EditEditEditEditedit
auf 'true'"true""true""true""true" gesetzt wurde. Die Parameter
RotateRotateRotateRotaterotate
, MoveMoveMoveMovemove
und ScaleScaleScaleScalescale
müssen auf 'true'"true""true""true""true"
gesetzt werden, damit die entsprechende Bearbeitung durchgeführt werden kann.
draw_nurbs_interp_moddraw_nurbs_interp_modDrawNurbsInterpModDrawNurbsInterpModDrawNurbsInterpMod
beginnt im Modus zum Transformieren.
Durch Drücken der Umschalttaste kann in den Modus zum Editieren gewechselt
werden; durch erneutes Drücken der Taste wechselt man zurück in den Modus
zum Transformieren.
Transformieren
In diesem Modus kann die Kurve rotiert, verschoben und skaliert werden,
jedoch nur, wenn der entsprechenden Parameter (RotateRotateRotateRotaterotate
,
MoveMoveMoveMovemove
, ScaleScaleScaleScalescale
) auf 'true'"true""true""true""true" gesetzt wurde. Die Kurve
wird zusammen mit einem Kreuz in der Mitte, einem Pfeil nach rechts, falls
RotateRotateRotateRotaterotate
auf 'true'"true""true""true""true" gesetzt wurde, und einem Doppelpfeil,
falls ScaleScaleScaleScalescale
auf 'true'"true""true""true""true" gesetzt wurde, dargestellt.
-
Zum Verschieben der Kurve klickt man mit der linken Maustaste auf das Kreuz in
der Mitte und bewegt die Maus dann mit gedrückter Taste zur neuen Position.
-
Zum Rotieren der Kurve klickt man mit der linke Maustaste auf den Pfeil
und bewegt die Maus anschließend mit gedrückter Taste solange, bis sich die
Kurve in der gewünschten Lage befindet.
-
Zum Skalieren der Kurve muss der Doppelpfeil bewegt werden. Um das
Seitenverhältnis beim Skalieren beizubehalten, muss der Parameter
KeepRatioKeepRatioKeepRatioKeepRatiokeepRatio
auf 'true'"true""true""true""true" gesetzt werden.
Editieren
In diesem Modus wird die Kurve zusammen mit den Interpolationspunkten, der
Starttangente und der Endtangente dargestellt. Start- und Endpunkt sind mit
einem zusätzlichen Quadrat markiert. Folgende Modifikationen können
vorgenommen werden.
-
Um Punkte anzuhängen, muss mit der linken Maustaste ins
Fenster geklickt werden. Hierdurch wird ein neuer Punkt an dieser
Position eingefügt.
-
Der zuletzt angehängte Punkt kann durch Drücken der Steuerungstaste
(Strg, Ctrl) gelöscht werden.
-
Punkte können durch Ziehen mit der Maus verschoben werden.
-
Neue Punkte auf der Kurve werden eingefügt, indem auf die gewünschte
Stelle auf der Kurve geklickt wird.
-
Um die Kurve zu schließen bzw. zu öffnen, muss auf den ersten oder
letzten Punkt geklickt werden.
-
Die Tangenten können verändert werden, indem ihr Ende mit der Maus
verschoben wird.
Ein Klick mit der rechten Maustaste beendet die Prozedur. Unter macOS
kann draw_nurbs_interp_moddraw_nurbs_interp_modDrawNurbsInterpModDrawNurbsInterpModDrawNurbsInterpMod
auch durch Drücken der Escape-Taste
beendet werden.
Das Aussehen der Kurve beim Zeichnen wird durch die Linienbreite, den
Linienstil und die Farbe bestimmt, die mit den Operatoren set_colorset_colorSetColorSetColorSetColor
,
set_coloredset_coloredSetColoredSetColoredSetColored
, set_line_widthset_line_widthSetLineWidthSetLineWidthSetLineWidth
und set_line_styleset_line_styleSetLineStyleSetLineStyleSetLineStyle
gesetzt werden können. Die Tangenten und alle Anfasser werden in
der zweiten Farbe gezeichnet, die via set_colorset_colorSetColorSetColorSetColor
oder
set_coloredset_coloredSetColoredSetColoredSetColored
gesetzt wurde. Ihre Linienbreite ist fest auf 1 gesetzt,
außerdem werden ihre Linien durchgezogen gezeichnet.
Achtung
Im Gegensatz zu draw_nurbsdraw_nurbsDrawNurbsDrawNurbsDrawNurbs
hat jeder Punkt, der vom Nutzer vorgegeben
wird, Einfluss auf die ganze Kurve. Wird ein Punkt bewegt, kann und wird sich
die ganze Kurve ändern. Um diesen Effekt zu minimieren, empfehlen wir die
Verwendung eines niedrigen Grades (3-5). Im Allgemeinen sind die Ergebnisse
bei ungeradem Grad etwas besser als bei geradem. Außerdem ist es vorteilhaft,
die Abstände aufeinanderfolgender Punkte ungefähr gleich zu wählen.
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
ContOutContOutContOutContOutcontOut
(output_object) xld_cont →
objectHXLDContHXLDContHobject *
Kontur der modifizierten Kurve.
WindowHandleWindowHandleWindowHandleWindowHandlewindowHandle
(input_control) window →
HWindow, HTupleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)
Fenster-Handle.
RotateRotateRotateRotaterotate
(input_control) string →
HTupleHTupleHtuple (string) (string) (HString) (char*)
Rotation ermöglichen?
Defaultwert:
'true'
"true"
"true"
"true"
"true"
Werteliste: 'false'"false""false""false""false", 'true'"true""true""true""true"
MoveMoveMoveMovemove
(input_control) string →
HTupleHTupleHtuple (string) (string) (HString) (char*)
Verschieben ermöglichen?
Defaultwert:
'true'
"true"
"true"
"true"
"true"
Werteliste: 'false'"false""false""false""false", 'true'"true""true""true""true"
ScaleScaleScaleScalescale
(input_control) string →
HTupleHTupleHtuple (string) (string) (HString) (char*)
Skalieren ermöglichen?
Defaultwert:
'true'
"true"
"true"
"true"
"true"
Werteliste: 'false'"false""false""false""false", 'true'"true""true""true""true"
KeepRatioKeepRatioKeepRatioKeepRatiokeepRatio
(input_control) string →
HTupleHTupleHtuple (string) (string) (HString) (char*)
Seitenverhältnis beim Skalieren beibehalten?
Defaultwert:
'true'
"true"
"true"
"true"
"true"
Werteliste: 'false'"false""false""false""false", 'true'"true""true""true""true"
EditEditEditEditedit
(input_control) string →
HTupleHTupleHtuple (string) (string) (HString) (char*)
Editieren ermöglichen?
Defaultwert:
'true'
"true"
"true"
"true"
"true"
Werteliste: 'false'"false""false""false""false", 'true'"true""true""true""true"
DegreeDegreeDegreeDegreedegree
(input_control) integer →
HTupleHTupleHtuple (integer) (int / long) (Hlong) (Hlong)
Grad p der Kurve. Vernünftige Werte liegen zwischen 3
und 5.
Defaultwert: 3
Wertevorschläge: 2, 3, 4, 5
Restriktion: Degree >= 2 && Degree <= 9
RowsInRowsInRowsInRowsInrowsIn
(input_control) coordinates.y-array →
HTupleHTupleHtuple (real) (double) (double) (double)
Zeilenkoordinaten der Eingabeinterpolationspunkte.
ColsInColsInColsInColsIncolsIn
(input_control) coordinates.x-array →
HTupleHTupleHtuple (real) (double) (double) (double)
Spaltenkoordinaten der Eingabeinterpolationspunkte.
TangentsInTangentsInTangentsInTangentsIntangentsIn
(input_control) real-array →
HTupleHTupleHtuple (real) (double) (double) (double)
Eingabetangenten.
ControlRowsControlRowsControlRowsControlRowscontrolRows
(output_control) coordinates.y-array →
HTupleHTupleHtuple (real) (double) (double) (double)
Zeilenkoordinaten des Kontrollpolygons.
ControlColsControlColsControlColsControlColscontrolCols
(output_control) coordinates.x-array →
HTupleHTupleHtuple (real) (double) (double) (double)
Spaltenkoordinaten des Kontrollpolygons
KnotsKnotsKnotsKnotsknots
(output_control) real-array →
HTupleHTupleHtuple (real) (double) (double) (double)
Knotenvektor.
RowsRowsRowsRowsrows
(output_control) coordinates.y-array →
HTupleHTupleHtuple (real) (double) (double) (double)
Zeilenkoordinaten der vom Benutzer bestimmten Punkte.
ColsColsColsColscols
(output_control) coordinates.x-array →
HTupleHTupleHtuple (real) (double) (double) (double)
Spaltenkoordinaten der vom Benutzer bestimmten Punkte.
TangentsTangentsTangentsTangentstangents
(output_control) real-array →
HTupleHTupleHtuple (real) (double) (double) (double)
Vom Benutzer bestimmte Tangenten.
Ergebnis
draw_nurbs_interp_moddraw_nurbs_interp_modDrawNurbsInterpModDrawNurbsInterpModDrawNurbsInterpMod
liefert den Wert 2 (H_MSG_TRUE), falls das Fenster
gültig ist.
Ansonsten wird eine Fehlerbehandlung durchgeführt.
Vorgänger
open_windowopen_windowOpenWindowOpenWindowOpenWindow
Nachfolger
set_coloredset_coloredSetColoredSetColoredSetColored
,
set_line_widthset_line_widthSetLineWidthSetLineWidthSetLineWidth
,
set_drawset_drawSetDrawSetDrawSetDraw
,
set_insertset_insertSetInsertSetInsertSetInsert
Alternativen
draw_xld_moddraw_xld_modDrawXldModDrawXldModDrawXldMod
,
draw_nurbs_moddraw_nurbs_modDrawNurbsModDrawNurbsModDrawNurbsMod
Siehe auch
draw_nurbs_interpdraw_nurbs_interpDrawNurbsInterpDrawNurbsInterpDrawNurbsInterp
,
gen_contour_nurbs_xldgen_contour_nurbs_xldGenContourNurbsXldGenContourNurbsXldGenContourNurbsXld
Modul
Foundation