Extracting closed Polycurves from given Surface

Hello people,

I am trying to extract, from a given Surface, all the closed polycurves that defines its perimeter. I tried using the Surface.PerimeterCurves node, however the PolyCurve.ByJoinedCurves node does not output the wanted result : indeed, the node seems to only connect curves into a unique wire and does not allow us to create as much closed curves as we need to correctly define the given surface.

Any idea on which node should replace the PolyCurve.ByJoinedCurves or on how to compute the wanted result by another way ?

Best regards

Yes you can use group curves then by joined curves as below.

You can find this node in archi-lab_grimshaw package.

and below the script from the node if you couldn’t find the package.

#Copyright(c) 2015, Konrad Sobon
# @arch_laboratory, http://archi-lab.net

import clr
clr.AddReference('ProtoGeometry')
from Autodesk.DesignScript.Geometry import *

#The inputs to this node will be stored as a list in the IN variable.
dataEnteringNode = IN

inputCurves = IN[0]

#join/group curves function
def groupCurves(Line_List): 
	ignore_distance = 0.1 # Assume points this close or closer to each other are touching 
	Grouped_Lines = [] 
	Queue = set() 
	while Line_List: 
		Shape = [] 
		Queue.add(Line_List.pop()) # Move a line from the Line_List to our queue 
		while Queue: 
			Current_Line = Queue.pop() 
			Shape.append(Current_Line) 
			for Potential_Match in Line_List: 
				Points = (Potential_Match.StartPoint, Potential_Match.EndPoint)
				for P1 in Points: 
					for P2 in (Current_Line.StartPoint, Current_Line.EndPoint): 
						distance = P1.DistanceTo(P2) 
						if distance <= ignore_distance: 
							Queue.add(Potential_Match) 
			Line_List = [item for item in Line_List if item not in Queue]
		Grouped_Lines.append(Shape) 
	return Grouped_Lines

OUT = groupCurves(inputCurves)
1 Like

Thank you very much @Mohammad_Nawar :slight_smile:

@mellouze You could also consider this …

Thanks @Vikram_Subbaiah, will take a look at it :wink: