Hi forum. I am trying to find a way of placing a point in an arc, for ex 1 mm from the beginning of the arc.
So far I have been using “array on curve”. The problem is that this gives me unwanted points.
I was wondering if its any function to place one point 1 mm from the starting point of the line .
Hello - in V5, use SubCrv, Copy=Yes, snap to the end of the arc and then type in ‘1mm’ and Enter, that will make a short arc, 1mm long that you can use as a marker,
You could use Grasshopper to achieve this as well (Curve/Analysis/Evaluate Length component), just bake the evaluated point to your Rhino document and that’s it.
@pascal
At first I wanted to suggest to use the Evaluate Curve component, but then I realised it gives a different result for curves not having a constant curvature. Could you explain what is going on? I imagined the curve domain to be homogeneous, e.g. if I want to evaluate a curve at length “a”, then t = a / L if the curve is reparameterized would do the job, but this is certainly not the case.
Hello - parameterization is not necessarily even along the curve - try rebuilding one of your input curves to say 50 points. Or make a Nurbs curve from one of the arcs (ToNurbs)
Here’s a python that will do what I think you want:
import Rhino
import scriptcontext as sc
import rhinoscriptsyntax as rs
def MarkDistanceFromEnd():
info = rs.GetCurveObject("select a curve near one end.", preselect=True)
if not info: return
id = info[0]
pres = info[1]
par = info[4]
crv = rs.coercecurve(id)
dom = crv.Domain
if par> dom.Mid:
crv.Reverse()
dist = 1
if sc.sticky.has_key('DISTANCEFROMEND'):
dist = sc.sticky['DISTANCEFROMEND']
dist = rs.GetReal("Distance from end", dist, 0, crv.GetLength())
if not dist: return
sc.sticky['DISTANCEFROMEND'] = dist
rs.AddPoint(crv.PointAtLength(dist))
if __name__ == '__main__':MarkDistanceFromEnd()
I did some testing and yes, the script does what the initial question requested.
I got that parametrisation is not even along the curve, but I still would like to understand how it goes, and I failed to find literature on the topic.
Rebuilding the curve with more and more control points converges the difference to 0 between the resulting points coming from evaluating the length or the domain, but isn’t an exact solution. For editing needs, I would prefer to keep the point count as low as possible.
Thanks! I am trying to avoid the use of GH for such a specific action.
I am not a GH experienced person, but I can say that to make a GH file for that action could be too much/
In my opinion it is good practice to extend your workflow with such small scripts – they are quite fast to make, reusable, and a fun way to introduce yourselves with Grasshopper. At least that’s what I’m doing and so far I’m convinced, that this is a viable way to go. As a next step I would like to do scripting as @Helvetosaur helped you, but that is beyond me at the moment.
Save the file anywhere you like - then to run occasionally, type RunPythonScript and browse to its location. If you want to create an alias for more regular use, you can use _-RunPythonScript "full path to file" - where the ‘full path to file’ includes the file name and is enclosed in quotes. Don’t forget the -dash in front of _-RunPythonScript.