I have a single curve (white) and I would like to create a tangent line as black in C++
Help me
Hi Luciano,
You must adjust the length but there you go
import Rhino
import scriptcontext
import rhinoscriptsyntax as rs
def create_tangent_line():
curve_id = rs.GetObject("Select a curve", rs.filter.curve)
if not curve_id: return
point_on_curve = rs.GetPointOnCurve(curve_id, "Pick a point on the curve for the tangent")
if not point_on_curve: return
curve = rs.coercecurve(curve_id)
if not curve: return
param = curve.ClosestPoint(point_on_curve)[1]
tangent = curve.TangentAt(param)
if not tangent: return
tangent_length = 100
start_point = point_on_curve
end_point = rs.PointAdd(point_on_curve, tangent * tangent_length)
# Add the tangent line to the document
tangent_line_id = rs.AddLine(start_point, end_point)
if tangent_line_id:
rs.SelectObject(tangent_line_id)
print("Tangent line added to the document.")
create_tangent_line()
in RhinoCommon there is
TryCreateBetweenCurves
not sure what the underlaying c++ funciton is
If I divide this curve in half, could I use this option to create the tangent line between the curves?
Has anyone used this option??
bool TryCreateBetweenCurves(ON_Curve* curva0, ON_Curve* curva1, double t0, double t1, bool perpendicular0, bool perpendicular1, ON_Line* linha);
Thanks
line_tangent_00.gh (9.5 KB)
double t0,t1;
if ( ! crv.ClosestPoint(p0,out t0) || !crv.ClosestPoint(p1,out t1))
return;
Line li;
if (Line.TryCreateBetweenCurves(crv,crv,ref t0, ref t1,false,false, out li))
a = li;
see attached script (in grasshopper)
you can pass the same curve twice. - with 2 different parameters close to where you expect the tangent-tangent line.
A good starting point for the 2 Points that are close to the curve might be a convex hull.
Hi Tom_P
I need to use in C++…
yes i know, but did you test passing the same curve in c++ twice and 2 parameters ? - as far as I understand Rhinocommon calls those underlaying C++ functionality - so it should not behave to much different.
EDIT … i might be wrong… not sure at which technology-layer TryCreateBetweenCurves is implemented.
@Dale is the right person to ask I think.
in some older (Rhino 5) sourcecode you can see that Rhinocommon calls some RHC_RhGetTanPerpPoint - maybe this helps for your search ?
The function behind TryCreateBetweenCurves is not exposed to the C++ SDK. I’ve logged an issue so we can fix.
https://mcneel.myjetbrains.com/youtrack/issue/RH-78612
Thanks,
– Dale
Hi Dale,
Do you have any updates about this question? Some new function on the SDK?
@Luciano_Luiz_da_Silv - in C++, use RhinoGetTanPerpPoint
. See rhinoSdkUtilities.h for details.
– Dale
Is there in Rhino 7 SDK?
@Luciano_Luiz_da_Silv - this is in Rhino 8 and above.
– Dale