Dynamo and Adaptive Components - Ordering of Points & Handing of Panels

Hi All,

I’m trying to build a facade system out of Adaptive components using Dynamo. Iam experiencing two unexpected behaviors.

The first is to do with the assignment of points for adaptive components to be placed by Dynamo.

My process involves in Revit : making a curtain wall > editing the profile > creating grid lines > assigning a placeholder system panel.

Then in Dynamo : Get the curtain wall > Get the curtainPanel hosted within the wall > get Panel boundaries (curves) > deconstruct the Poly curve > Adaptive Component by points.

As you can see in the attached image some of the panels, particularly at the edited edge of the Curtain wall the points shift counter clock wise by one resulting in horizontal patterning. We are trying to achieve vertical banding.

 

 

 

The question is how are these points being assigned and how can I control the ordering of them?

 

The second part of the question is to do with the need to “flip” the panels even though the curtain wall (in Revit) is facing the right way.

For some reason this only effects one side of the facade the other two sides are consistent / facing the right way. ( the dynamo “flip” script has been assigned to alternate panels )

 

 

Thanks a lot for your time guys, any advice / insight would be greatly appreciated!

  • Krishna

 

Thanks a lot for your advice! any help / insight is greatly appreciated :slight_smile:

For the first issue, try reordering the sub lists of points by introducing conditions like…

-if point at index 3 is lower than point at index 0 then shift indices by 1

-if point at index 2 is lower than point at index 1 then shift indices by -1

(or something like that. Hope I’m making sense)

Hi Vikram, Thanks for your response, I was working on another project temporarily. Yeah I thought I might have to do that but I wanted to make sure I was not making some fundamental mistake in there somewhere. code posted for future reference… might be a more eloquent solution out there somewhere :slight_smile: Out of curiosity is there a function for Max and Min values in an array in designscript?

Thanks

K

originalPoints[];
orderedList[];

tempPointX[];
tempPointY[];
tempPointZ[];

xMax : double;
xMin : double;
yMax : double;
yMin : double;
zMax : double;
zMin : double;

subList[];

iCount = Count(originalPoints);

[Imperative]
{

for( i in 0238)
{
subList[] = originalPoints[i];

jCount = Count(originalPoints[i]);

for( j in 03)
{

tempPoint : Point = subList[j];
tempPointX[j] = tempPoint.X;
tempPointY[j] = tempPoint.Y;
tempPointZ[j] = tempPoint.Z;

xMax = tempPointX[0];
yMax = tempPointY[0];
zMax = tempPointZ[0];

xMin = tempPointX[0];
yMin = tempPointY[0];
zMin = tempPointZ[0];

}

for( k in 03)
{
if(tempPointX[k] > xMax)
{
xMax = tempPointX[k];
}
if(tempPointX[k] < xMin)
{
xMin = tempPointX[k];
}

if(tempPointY[k] > yMax)
{
yMax = tempPointY[k];
}
if(tempPointY[k] < yMin)
{
yMin = tempPointY[k];
}

if(tempPointZ[k] > zMax)
{
zMax = tempPointZ[k];
}
if(tempPointZ[k] < zMin)
{
zMin = tempPointZ[k];
}
}

Point1 = Point.ByCoordinates(xMin,yMin,zMin);
Point2 = Point.ByCoordinates(xMin,yMin,zMax);
Point3 = Point.ByCoordinates(xMax,yMin,zMax);
Point4 = Point.ByCoordinates(xMax,yMax,zMin);

pointList ={Point1,Point2,Point3,Point4};

orderedList[i] = pointList;
}
};

List.MaximumItem and List.MinimumItem