"Unevenly" curved isolines on a surface

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:

image

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:
Circular Weave With Attractor

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 :stuck_out_tongue:

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 :slight_smile:

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 :slight_smile: it needs a bit more tweaking though, but it’s getting closer. Thx again

2 Likes