Lacing Help (i think!)

Hi All

I’m creating a script which takes a 2D plan of different pavement types and produces a 3D model of the pavement which shows all the different layers of each pavement type.

It takes a Civil 3D Tin surface, and given a boundary and a list of the depths of each layer, tries to create 3D solids representing those layers.

In the dynamo graph I have created a list of dictionaries. Each dictionary holds the information for each area of pavement I want to create solids for. Each dictionary contains the boundary polygon to define the pavements plan area and a list of depths for each of the layers. In the screenshot below, you can see the list of layer depths in the first dictionary is 0.5,1,1.5,2,2.5

The createPavementLayers function is a custom function I have written which takes a surface (actually it takes a list of triangles which it turns into a surface), the boundary string, and a list of depths, and returns the 3D solids of the pavement layers I want to create.

At the moment, my dynamo graph is only producing outputs for the first dictionary in the list. Nothing is getting processed for the subsequent dictionaries.

I think its a lacing issue. I think it’s doing the “shortest” lacing by default because there is only 1 list in the “surfacePolygons” input. This is because I want the same list to be used for all the pavement areas.

I read up about “replication list” and putting after the inputs to control how they lace, but nothing I tried worked.

Can anyone help?

Just in case the issue is in my custom function, here is the code for that function

``````def createPavementLayers(surfacePolygons:Polygon[],depthList:double[],boundary:PolyCurve){
return = [Imperative]
{
surfaceSolidList = [];
translate = 0;
i = 0;

for(depth in depthList)
{
solid1 = createPavementLayer(surfacePolygons,depth);
solid2 = Geometry.Translate(solid1,0,0,-translate);
surfaceSolidList[i] = solid2;
translate = translate + depth;
i = i + 1;
}

// Create a solid from the boundary polygon
boundarySolid = Curve.ExtrudeAsSolid(boundary,100);
boundarySolid = Geometry.Translate(boundarySolid,0,0,-50);

// Get the "intersection" solid of this boundary solid
// with each surface solid
j = 0;
paveLayerList = [];
for(surfaceSolid in surfaceSolidList)
{
paveLayerList[j] = Geometry.Intersect(surfaceSolid,boundarySolid);
j = j + 1;
}

return paveLayerList;
}
};

def createPavementLayer (surfacePolygons:Polygon[],depth:double){
return = [Imperative]
{
individualSolidList = Curve.ExtrudeAsSolid(surfacePolygons, Vector.ByCoordinates(0, 0, 1), -depth);
finalSolid = DesignScript.Solid.ByUnion(individualSolidList);
return finalSolid;
}
};``````