Hi!
Is there an easy way to achieve this kind of effect with the isolines of a surface?
I hope the illustration is clear… the idea is to “push” the isolines around a hole, while leaving the rest of them straight. I was able to achieve a similar effect by selecting only one or several rows of points on a horizontal isoline and moving them along, by their UV coordinates and creating nurbscurves afterwards:

The next thing would be creating a formula, that is only selecting a number of points and generating a sequence, which would do the trick. I was just curious if there is an easier way to do that?
Here are the sample files:
Home.dyn (84.6 KB)
Project1.rvt (5.1 MB)
Hello, if you make a circle and determine from its center a deformation factor according to the center, (like a dart board and the points belonging to said zones) can be a track to dig
edit: If you have a faculty, you can imprint books (as a free listener if the faculty allows it) on flows and obstacles.
I had followed this kind of course at the time (with the equipotentials)
in fluid dynamics and also in soil mechanics
Cordially
christian.stan
1 Like
On one of the machines I’m using lately I have a graph which utilized a few attractor points to deform points on a surface to generate openings like this… Will try to dig it up later today.
1 Like
This should help with some ideas.
Attractors in linear path.dyn (31.3 KB)
Can be expanded upon to do stuff like this too:

3 Likes
Thanks, Jacob!
I modified it for my case, it’s exactly what I needed.
Thx for all the explanations in the code as well. I think it’s also worth having the deformationScaler as a slider, just to be able to play around with it. I’m now excited to experiment further with this graph
3 Likes
been playing around with this graph a bit 
I was just curious if it would be possible to create a more elliptical distortion, like that?
I suppose I should measure the vectors’ angles in the Python script and try to introduce an additional multiplier, depending on the angle, it’s the best approach I could think of at the moment
I think that would best be attained by weighting the distortion vector by the vector’s angle to the U (or V - not sure which direction things are oriented) isoline vector.
Something like weight = (90-angleToIsolineVector)/90*weightingFactor
1 Like
I tried it and it seems to work 
Here’s how i modified the code:
basePntRows = IN[0]
attractorPnts = IN[1]
maxAttractionLen = IN[2]
deformationScaler = IN[3]
ellipticalFactor = IN[7]
isoVectX = IN[4]
isoVectY = IN[5]
isoVectZ = IN[6]
isoVector = Vector.ByCoordinates(isoVectX, isoVectY, isoVectZ)
newPntPaths = []
angleslist = []
for basePnts in basePntRows:
newPnts = []
for bPnt in basePnts:
baseVects = [Vector.ByTwoPoints(aPnt, bPnt) for aPnt in attractorPnts]
summedVect = Vector.ByCoordinates(0,0,0)
for vect in baseVects:
angle = math.degrees(isoVector.AngleWithVector(vect))/100
angleslist.append(angle)
ellipticStretch = (90*ellipticalFactor)/(90-angle)
if vect.Length > maxAttractionLen: scale = 0
else: scale = (maxAttractionLen - vect.Length)*deformationScaler*ellipticStretch
scaledVect = vect.Normalized().Scale(scale)
summedVect = summedVect.Add(scaledVect)
newPnt = bPnt.Translate(summedVect)
newPnts.append(newPnt)
newPntPaths.append(newPnts)
OUT = newPntPaths, angleslist
I added as many things as inputs, as possible
it needs a bit more tweaking though, but it’s getting closer. Thx again
2 Likes