draw_nurbs_interpT_draw_nurbs_interpDrawNurbsInterpDrawNurbsInterpdraw_nurbs_interp (Operator)
Name
draw_nurbs_interpT_draw_nurbs_interpDrawNurbsInterpDrawNurbsInterpdraw_nurbs_interp — Interaktives Erstellen 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( : ContOut : WindowHandle, Rotate, Move, Scale, KeepRatio, Degree : ControlRows, ControlCols, Knots, Rows, Cols, Tangents)
Herror T_draw_nurbs_interp(Hobject* ContOut, const Htuple WindowHandle, const Htuple Rotate, const Htuple Move, const Htuple Scale, const Htuple KeepRatio, const Htuple Degree, Htuple* ControlRows, Htuple* ControlCols, Htuple* Knots, Htuple* Rows, Htuple* Cols, Htuple* Tangents)
void DrawNurbsInterp(HObject* ContOut, const HTuple& WindowHandle, const HTuple& Rotate, const HTuple& Move, const HTuple& Scale, const HTuple& KeepRatio, const HTuple& Degree, HTuple* ControlRows, HTuple* ControlCols, HTuple* Knots, HTuple* Rows, HTuple* Cols, HTuple* Tangents)
void HXLDCont::DrawNurbsInterp(const HWindow& WindowHandle, const HString& Rotate, const HString& Move, const HString& Scale, const HString& KeepRatio, Hlong Degree, HTuple* ControlRows, HTuple* ControlCols, HTuple* Knots, HTuple* Rows, HTuple* Cols, HTuple* Tangents)
void HXLDCont::DrawNurbsInterp(const HWindow& WindowHandle, const char* Rotate, const char* Move, const char* Scale, const char* KeepRatio, Hlong Degree, HTuple* ControlRows, HTuple* ControlCols, HTuple* Knots, HTuple* Rows, HTuple* Cols, HTuple* Tangents)
void HXLDCont::DrawNurbsInterp(const HWindow& WindowHandle, const wchar_t* Rotate, const wchar_t* Move, const wchar_t* Scale, const wchar_t* KeepRatio, Hlong Degree, HTuple* ControlRows, HTuple* ControlCols, HTuple* Knots, HTuple* Rows, HTuple* Cols, HTuple* Tangents)
(Nur Windows)
HXLDCont HWindow::DrawNurbsInterp(const HString& Rotate, const HString& Move, const HString& Scale, const HString& KeepRatio, Hlong Degree, HTuple* ControlRows, HTuple* ControlCols, HTuple* Knots, HTuple* Rows, HTuple* Cols, HTuple* Tangents) const
HXLDCont HWindow::DrawNurbsInterp(const char* Rotate, const char* Move, const char* Scale, const char* KeepRatio, Hlong Degree, HTuple* ControlRows, HTuple* ControlCols, HTuple* Knots, HTuple* Rows, HTuple* Cols, HTuple* Tangents) const
HXLDCont HWindow::DrawNurbsInterp(const wchar_t* Rotate, const wchar_t* Move, const wchar_t* Scale, const wchar_t* KeepRatio, Hlong Degree, HTuple* ControlRows, HTuple* ControlCols, HTuple* Knots, HTuple* Rows, HTuple* Cols, HTuple* Tangents) const
(Nur Windows)
static void HOperatorSet.DrawNurbsInterp(out HObject contOut, HTuple windowHandle, HTuple rotate, HTuple move, HTuple scale, HTuple keepRatio, HTuple degree, out HTuple controlRows, out HTuple controlCols, out HTuple knots, out HTuple rows, out HTuple cols, out HTuple tangents)
void HXLDCont.DrawNurbsInterp(HWindow windowHandle, string rotate, string move, string scale, string keepRatio, int degree, out HTuple controlRows, out HTuple controlCols, out HTuple knots, out HTuple rows, out HTuple cols, out HTuple tangents)
HXLDCont HWindow.DrawNurbsInterp(string rotate, string move, string scale, string keepRatio, int degree, out HTuple controlRows, out HTuple controlCols, out HTuple knots, out HTuple rows, out HTuple cols, out HTuple tangents)
def draw_nurbs_interp(window_handle: HHandle, rotate: str, move: str, scale: str, keep_ratio: str, degree: int) -> Tuple[HObject, Sequence[float], Sequence[float], Sequence[float], Sequence[float], Sequence[float], Sequence[float]]
Beschreibung
draw_nurbs_interpdraw_nurbs_interpDrawNurbsInterpDrawNurbsInterpDrawNurbsInterpdraw_nurbs_interp liefert die Kontur ContOutContOutContOutContOutcontOutcont_out einer
NURBS-Kurve, die interaktiv durch den Benutzer im Fenster
WindowHandleWindowHandleWindowHandleWindowHandlewindowHandlewindow_handle durch Interpolation erzeugt worden ist. Mit dem
Operator draw_nurbsdraw_nurbsDrawNurbsDrawNurbsDrawNurbsdraw_nurbs ist es möglich eine NURBS-Kurve durch Zeichnen
des Kontrollpolygons zu erzeugen.
Zusätzlich zu ContOutContOutContOutContOutcontOutcont_out werden die Kontrollinformation der Kurve
(ControlRowsControlRowsControlRowsControlRowscontrolRowscontrol_rows,ControlColsControlColsControlColsControlColscontrolColscontrol_cols und KnotsKnotsKnotsKnotsknotsknots), die vom
Benutzer bestimmten Interpolationspunkte (RowsRowsRowsRowsrowsrows und ColsColsColsColscolscols)
und die Tangenten im ersten und letzten Punkt der Kurve (TangentsTangentsTangentsTangentstangentstangents)
zurückgegeben. Tangents 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""auto" als Gewichtsvektor
verwendet werden kann, wenn die Kontrollinformationen im Operator
gen_contour_nurbs_xldgen_contour_nurbs_xldGenContourNurbsXldGenContourNurbsXldGenContourNurbsXldgen_contour_nurbs_xld verwendet werden. Mehr Informationen über
NURBS-Kurven befinden sich in der Dokumentation des Operators
gen_contour_nurbs_xldgen_contour_nurbs_xldGenContourNurbsXldGenContourNurbsXldGenContourNurbsXldgen_contour_nurbs_xld.
Direkt nach dem Aufruf von draw_nurbs_interpdraw_nurbs_interpDrawNurbsInterpDrawNurbsInterpDrawNurbsInterpdraw_nurbs_interp kann man durch
Drücken der linken Maustaste an den gewünschten Positionen
Interpolationspunkte hinzufügen. Sind genug Punkte vorhanden
(mindestens DegreeDegreeDegreeDegreedegreedegree-1), wird eine NURBS-Kurve, die durch alle
Punkte geht berechnet und angezeigt.
Der zuletzt angehängte
Punkt kann durch Drücken der Steuerungstaste (Strg, Ctrl) gelöscht werden.
Sobald 3 Punkte vorhanden sind, werden der erste und der letzte
Punkt durch ein zusätzliches Quadrat markiert. Durch Klicken darauf wird
die Kontur geschlossen bzw. wieder geöffnet.
Außerdem werden die Tangenten (d.h. die erste Ableitung der Kurve) im
ersten und im letzten Punkt der Kurve angezeigt. Diese Tangenten können durch
Verschieben ihrer Endpunkte mit der Maus verändert werden.
Vorhandene Punkte können durch Ziehen mit der Maus bewegt werden. Außerdem
können neue Punkte auf der Kurve eingefügt werden, indem man auf die
gewünschte Position auf der Kurve mit der linken Maustaste klickt.
Durch Drücken der Umschalttaste kann in den Modus zum Transformieren der
Kurve gewechselt werden.
In diesem Modus kann die Kurve rotiert, verschoben und skaliert werden,
jedoch nur wenn der entsprechende Parameter (RotateRotateRotateRotaterotaterotate, MoveMoveMoveMovemovemove,
ScaleScaleScaleScalescalescale) auf 'true'"true""true""true""true""true" gesetzt wurde. Die Kurve wird
zusammen mit einem Kreuz in der Mitte und einem Pfeil nach rechts, falls
RotateRotateRotateRotaterotaterotate auf 'true'"true""true""true""true""true" gesetzt wurde, und einem Doppelpfeil,
falls ScaleScaleScaleScalescalescale auf 'true'"true""true""true""true""true" gesetzt wurde, dargestellt.
Die Kurve kann
-
verschoben werden, indem man mit der linken Maustaste auf das Kreuz
im Mittelpunkt klickt und dann die Kurve an die neue Position schiebt,
-
rotiert werden, indem man mit der linken Maustaste auf den Pfeil
klickt und die Maus bewegt bis die Kurve die gewünschte Lage eingenommen
hat, und
-
skaliert werden, indem der Doppelpfeil verschoben wird. Um das
Seitenverhältnis beim Skalieren beizubehalten, muss der Parameter
KeepRatioKeepRatioKeepRatioKeepRatiokeepRatiokeep_ratio auf 'true'"true""true""true""true""true" gesetzt werden.
Durch ein weiteres Drücken der Umschalttaste wechselt man zurück in den
Editiermodus. Ein Klick mit der rechten Maustaste beendet die Prozedur.
Unter macOS kann draw_nurbs_moddraw_nurbs_modDrawNurbsModDrawNurbsModDrawNurbsModdraw_nurbs_mod 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_colorSetColorSetColorSetColorset_color,
set_coloredset_coloredSetColoredSetColoredSetColoredset_colored, set_line_widthset_line_widthSetLineWidthSetLineWidthSetLineWidthset_line_width und set_line_styleset_line_styleSetLineStyleSetLineStyleSetLineStyleset_line_style
gesetzt werden können. Die Tangenten und alle Anfasser werden in
der zweiten Farbe gezeichnet, die via set_colorset_colorSetColorSetColorSetColorset_color oder
set_coloredset_coloredSetColoredSetColoredSetColoredset_colored gesetzt wurde. Ihre Linienbreite ist fest auf 1 gesetzt,
außerdem werden ihre Linien durchgezogen gezeichnet.
Achtung
Im Gegensatz zu draw_nurbsdraw_nurbsDrawNurbsDrawNurbsDrawNurbsdraw_nurbs 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
ContOutContOutContOutContOutcontOutcont_out (output_object) xld_cont → objectHXLDContHObjectHXLDContHobject *
Kontur der Kurve.
WindowHandleWindowHandleWindowHandleWindowHandlewindowHandlewindow_handle (input_control) window → HWindow, HTupleHHandleHTupleHtuple (handle) (IntPtr) (HHandle) (handle)
Fenster-Handle.
RotateRotateRotateRotaterotaterotate (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Rotation ermöglichen?
Defaultwert:
'true'
"true"
"true"
"true"
"true"
"true"
Werteliste: 'false'"false""false""false""false""false", 'true'"true""true""true""true""true"
MoveMoveMoveMovemovemove (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Verschieben ermöglichen?
Defaultwert:
'true'
"true"
"true"
"true"
"true"
"true"
Werteliste: 'false'"false""false""false""false""false", 'true'"true""true""true""true""true"
ScaleScaleScaleScalescalescale (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Skalieren ermöglichen?
Defaultwert:
'true'
"true"
"true"
"true"
"true"
"true"
Werteliste: 'false'"false""false""false""false""false", 'true'"true""true""true""true""true"
KeepRatioKeepRatioKeepRatioKeepRatiokeepRatiokeep_ratio (input_control) string → HTuplestrHTupleHtuple (string) (string) (HString) (char*)
Seitenverhältnis beim Skalieren beibehalten?
Defaultwert:
'true'
"true"
"true"
"true"
"true"
"true"
Werteliste: 'false'"false""false""false""false""false", 'true'"true""true""true""true""true"
DegreeDegreeDegreeDegreedegreedegree (input_control) integer → HTupleintHTupleHtuple (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
ControlRowsControlRowsControlRowsControlRowscontrolRowscontrol_rows (output_control) coordinates.y-array → HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Zeilenkoordinaten des Kontrollpolygons.
ControlColsControlColsControlColsControlColscontrolColscontrol_cols (output_control) coordinates.x-array → HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Spaltenkoordinaten des Kontrollpolygons
KnotsKnotsKnotsKnotsknotsknots (output_control) real-array → HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Knotenvektor.
RowsRowsRowsRowsrowsrows (output_control) coordinates.y-array → HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Zeilenkoordinaten der vom Benutzer bestimmten Punkte.
ColsColsColsColscolscols (output_control) coordinates.x-array → HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Spaltenkoordinaten der vom Benutzer bestimmten Punkte.
TangentsTangentsTangentsTangentstangentstangents (output_control) real-array → HTupleSequence[float]HTupleHtuple (real) (double) (double) (double)
Vom Benutzer bestimmte Tangenten.
Ergebnis
draw_nurbs_interpdraw_nurbs_interpDrawNurbsInterpDrawNurbsInterpDrawNurbsInterpdraw_nurbs_interp liefert den Wert TRUE, falls das Fenster gültig
ist.
Ansonsten wird eine Fehlerbehandlung durchgeführt.
Vorgänger
open_windowopen_windowOpenWindowOpenWindowOpenWindowopen_window
Nachfolger
set_coloredset_coloredSetColoredSetColoredSetColoredset_colored,
set_line_widthset_line_widthSetLineWidthSetLineWidthSetLineWidthset_line_width,
set_drawset_drawSetDrawSetDrawSetDrawset_draw,
set_insertset_insertSetInsertSetInsertSetInsertset_insert
Alternativen
draw_xlddraw_xldDrawXldDrawXldDrawXlddraw_xld,
draw_nurbsdraw_nurbsDrawNurbsDrawNurbsDrawNurbsdraw_nurbs
Siehe auch
draw_nurbs_interp_moddraw_nurbs_interp_modDrawNurbsInterpModDrawNurbsInterpModDrawNurbsInterpModdraw_nurbs_interp_mod,
draw_nurbsdraw_nurbsDrawNurbsDrawNurbsDrawNurbsdraw_nurbs,
gen_contour_nurbs_xldgen_contour_nurbs_xldGenContourNurbsXldGenContourNurbsXldGenContourNurbsXldgen_contour_nurbs_xld
Modul
Foundation