scripting the geometry

General discussion about TexGen.

Moderators: Martin, Developers

louisepb
Project Leader
Posts: 998
Joined: Tue Dec 08, 2009 2:27 pm
Location: Nottingham

Re: scripting the geometry

Post by louisepb »

Hi Yanie,

I've just taken a quick look at this. You don't seem to have assigned the weave pattern to the second textile. You then add both the offset and the un-offset yarns from the second weave into the combined textile. This may be your problem. Basically you need to step through your code and work out exactly what you've done and what you actually want to do. As before, stepping through in a debugger would be the most effective way to debug this.

Louise
dyeyanie
Regular
Posts: 154
Joined: Thu Oct 06, 2011 10:39 am

Re: scripting the geometry

Post by dyeyanie »

Hi Louise,

I had changed the lines for the 2nd pattern generation. Some more I try to extract the yarns in X-direction and Y-direction to give some different size of yarns. I have tried like;

Code: Select all

# Adjust the yarn widths and heights
Yarns = weave.GetYarns()
for Yarn in (Yarns[0],Yarns[2],Yarns[3],Yarns[4],Yarns[5],Yarns[6],Yarns[7],Yarns[8],Yarns[9],Yarns[10],Yarns[10],Yarns[12],Yarns[13],Yarns[14],Yarns[15],Yarns[16],Yarns[17],Yarns[18],Yarns[19],Yarns[20],Yarns[21],Yarns[22],Yarns[23],Yarns[23]):
 # Set the interpolation function
    Yarn.AssignInterpolation(CInterpolationBezier())
    # Assign a constant cross-section all along the yarn of elliptical shape
    Yarn.AssignSection(CYarnSectionConstant(CSectionLenticular(yarnWidthY, yarnHeightY)))
and

Code: Select all

# Adjust the yarn widths and heights
Yarns = weave.GetYarns()
for Yarn in (patternList[0]):
 # Set the interpolation function
    Yarn.AssignInterpolation(CInterpolationBezier())
    # Assign a constant cross-section all along the yarn of elliptical shape
    Yarn.AssignSection(CYarnSectionConstant(CSectionLenticular(yarnWidthY, yarnHeightY)))
[/code]

but all give me the same error which is ;
Yarn.AssignInterpolation(CInterpolationBezier())
File ".\Python\libxtra\TexGen\Core.py", line 1742, in <lambda>
File ".\Python\libxtra\TexGen\Core.py", line 54, in _swig_getattr
AttributeError: AssignInterpolation

I've checked with the API and there are several protected files that I can't dig into it. So, what is the best way to extract the yarns in order to get the yarns in X and Y directions?

Yanie
louisepb
Project Leader
Posts: 998
Joined: Tue Dec 08, 2009 2:27 pm
Location: Nottingham

Re: scripting the geometry

Post by louisepb »

Hi Yanie,

I think that, in both cases, your loop needs to be "for Yarn in Yarns:"

Louise
dyeyanie
Regular
Posts: 154
Joined: Thu Oct 06, 2011 10:39 am

Re: scripting the geometry

Post by dyeyanie »

Hi Louise,

Yes, I know that. But then it gives similar yarn section in warp and weft. How about if I would like to have different types of section in warp direction? Or it is not possible to do so?

Yanie
louisepb
Project Leader
Posts: 998
Joined: Tue Dec 08, 2009 2:27 pm
Location: Nottingham

Re: scripting the geometry

Post by louisepb »

There is a CTextileWeave2D function, GetYarnIndex( x, y, z ) which you can use to get the yarn index. Then call CTextile::GetYarn( index ). This will give you the particular yarn which you wish to change ( cross-section etc ). You will then need to replace the yarn in the textile with the changed one.

Louise
dyeyanie
Regular
Posts: 154
Joined: Thu Oct 06, 2011 10:39 am

Re: scripting the geometry

Post by dyeyanie »

Hi Louise,

thanks for that.

By the way, I'm still confronting with combining the pattern vectors. I don't know how could I call the end masternode of my yarn in weft direction. Yes, I'm totally having a big problem with the offset. What I understand I should modify the offset in Y direction which is equivalent to the length of weft yarn. But then, it still doesn't work at all.

Perhaps you could show me especially in the offset options.

Code: Select all

import sys
from _Embedded import *
from TexGen.Core import *
from TexGen.Renderer import *
from TexGen.Export import *
from TexGen.Abaqus import *
import math

def patternVec(s): # 1 = warp (blue) , 0 = weft (red)
	if s == 1:
		return [
			[0,0,0,0,0,1,0,0,0,0,0,0],
			[0,0,1,0,0,0,0,0,0,0,1,0],
			[0,0,0,0,0,0,0,1,0,0,0,0],
			[0,0,0,0,1,0,0,0,0,0,0,0],
			[0,1,0,0,0,0,0,0,0,1,0,0],
			[0,0,0,0,0,0,1,0,0,0,0,0],
			[0,0,0,1,0,0,0,0,0,0,0,1],
			[1,0,0,0,0,0,0,0,1,0,0,0],
			[0,0,0,0,0,1,0,0,0,0,0,0],
			[0,0,1,0,0,0,0,0,0,0,1,0],
			[0,0,0,0,0,0,0,1,0,0,0,0],
			[0,0,0,0,1,0,0,0,0,0,0,0],
			[0,0,0,0,0,1,0,0,0,0,0,0],
			[0,0,1,0,0,0,0,0,0,0,1,0],
			[0,0,0,0,0,0,0,1,0,0,0,0],
			[0,0,0,0,1,0,0,0,0,0,0,0],
			[0,1,0,0,0,0,0,0,0,1,0,0],
			[0,0,0,0,0,0,1,0,0,0,0,0],
			[0,0,0,1,0,0,0,0,0,0,0,1],
			[1,0,0,0,0,0,0,0,1,0,0,0],
			[0,0,0,0,0,1,0,0,0,0,0,0],
			[0,0,1,0,0,0,0,0,0,0,1,0],
			[0,0,0,0,0,0,0,1,0,0,0,0],
			[0,0,0,0,1,0,0,0,0,0,0,0]]

else:
		return [
			[0,1,0,1,0,1,0,1,0,1,0,1],
			[0,1,0,1,0,1,0,1,0,1,0,1],
			[1,0,1,0,1,0,1,0,1,0,1,0],
			[1,0,1,0,1,0,1,0,1,0,1,0],
			[0,1,0,1,0,1,0,1,0,1,0,1],
			[0,1,0,1,0,1,0,1,0,1,0,1],
			[1,0,1,0,1,0,1,0,1,0,1,0],
			[1,0,1,0,1,0,1,0,1,0,1,0],
			[0,1,0,1,0,1,0,1,0,1,0,1],
			[0,1,0,1,0,1,0,1,0,1,0,1],
			[1,0,1,0,1,0,1,0,1,0,1,0],
			[1,0,1,0,1,0,1,0,1,0,1,0],
			[0,1,0,1,0,1,0,1,0,1,0,1],
			[0,1,0,1,0,1,0,1,0,1,0,1],
			[1,0,1,0,1,0,1,0,1,0,1,0],
			[1,0,1,0,1,0,1,0,1,0,1,0],
			[0,1,0,1,0,1,0,1,0,1,0,1],
			[0,1,0,1,0,1,0,1,0,1,0,1],
			[1,0,1,0,1,0,1,0,1,0,1,0],
			[1,0,1,0,1,0,1,0,1,0,1,0],
			[0,1,0,1,0,1,0,1,0,1,0,1],
			[0,1,0,1,0,1,0,1,0,1,0,1],
			[1,0,1,0,1,0,1,0,1,0,1,0],
			[1,0,1,0,1,0,1,0,1,0,1,0]]
			

#Parameter of geometry
T = 0.36 # thickness of matrix 
sp = 1  # spacing between the adjacent yarns 
yarnHeightX=0.18 # yarn height parallel in X 
yarnHeightY=0.09 # yarn height parallel in Y 
yarnWidthX=0.8 #width of yarn in X (Variable #4)
yarnWidthY=0.8 #width of yarn in Y 

#Inputs for Voxel Mesh
nXvoxel = 338 
nYvoxel = 338
nZvoxel = 5

#Pattern Generation for 1st Pattern:
patternList=patternVec(1) # DON'T CHANGE THIS FOR COUPLING - IT MUST BE MAINTAIN WITH 1
m=len(patternList)
n=len(patternList[0])
weave = CTextileWeave2D(m, n, sp, T, 0, False) #Geometry generation class of 2Dweave
weave.SetGapSize(0) # Gap size between upper and lower yarns
for x in range(m):
	for y in range(n):
		if patternList[m-1-x][y] == 1:
			weave.SwapPosition(x, y)
			
# Assign the domain and get its limits
weave.AssignDefaultDomain()
Domain = weave.GetDefaultDomain()
Min = XYZ()
Max = XYZ()
Domain.GetBoxLimits( Min, Max )

# Create a new textile to contain the combination pattern
CombiTextile = CTextile()	
Yarns = weave.GetYarns()
YarnInd = Yarns.GetYarnIndex(x,y,z)

# Loop over all the yarns in the list
for Yarn in Yarns:
    # Set the interpolation function
    Yarn.AssignInterpolation(CInterpolationBezier())
	
	# Assign a constant cross-section all along the yarn of lenticular shape
    Yarn.AssignSection(CYarnSectionConstant(CSectionLenticular(yarnWidthX, yarnHeightX)))

	# Set the resolution of the surface mesh created
    Yarn.SetResolution(20)

    # Add the yarn to our textile
    CombiTextile.AddYarn(Yarn)
	
# Create 2nd pattern: 
patternList2=patternVec(2) 
p=len(patternList2)
q=len(patternList2[0])
weave1 = CTextileWeave2D(p, q, sp, T, 0, False) #Geometry generation class of 2Dweave
weave1.SetGapSize(0) # Gap size between upper and lower yarns
for x in range(p):
	for y in range(q):
		if patternList2[p-1-x][y] == 1:
			weave1.SwapPosition(x, y)

# Adjust the yarn widths and heights
Yarns1 = weave1.GetYarns()
for Yarn1 in Yarns1:
	# Set the interpolation function
    Yarn1.AssignInterpolation(CInterpolationBezier())
    # Assign a constant cross-section all along the yarn of lenticular shape
    Yarn1.AssignSection(CYarnSectionConstant(CSectionLenticular(yarnWidthY, yarnHeightY)))
    # Set the resolution of the surface mesh created
    Yarn1.SetResolution(20)
    # Add the yarn to our textile
    CombiTextile.AddYarn(Yarn1)
	
# The yarns will be offset by the length of the first textile
Offset = XYZ(0.0,11.5,0.0)

# Get the yarns from the second textile
Yarns1 = weave1.GetYarns()
# For each yarn in the second textile..
for Yarn1 in Yarns1:
    # Get the nodes in the yarn
    Nodes = Yarn1.GetMasterNodes()
    i = 0
    # Offset each node
    for Node in Nodes:
        Node.SetPosition( Node.GetPosition() - Offset )
        Yarn1.ReplaceNode( i, Node )
        i += 1
    # and add to the layered textile
    CombiTextile.AddYarn(Yarn1)

# Offset the domain to include the second textile
Min -= Offset
NewDomain = CDomainPlanes( Min, Max )
CombiTextile.AssignDomain( NewDomain )
# Create a domain and assign it to the textile
#CombiTextile.AssignDomain(CDomainPlanes(XYZ(-0.5, -0.5, -0.016), XYZ(23.5, 23.5, 0.376)))

#Set section properties 
#weave.SetMatrixYoungsModulus(2500, 'MPa')
#weave.SetMatrixPoissonsRatio(0.35)
#weave.SetMatrixAlpha(6.5e-006)

# Add the textile with the name "CombiS1" 
AddTextile("CombiS1", CombiTextile)
SaveToXML(r"C:\Users\Public\Documents\YANIE\ABAQUSTexGen\MembraneAlgorithm\MembraneProject\TexGen\TextileGeneration\CombiS1.tg3", "CombiS1", OUTPUT_STANDARD)

#Meshing domain - ABAQUS Voxel Mesh 
#SaveVoxelMesh  (CTextile  &Textile, string OutputFilename, int XVoxNum, int YVoxNum, int ZVoxNum, bool bOutputMatrix, bool bOutputYarns, int iBoundariesTied, int iElementType=0)
#Vox = CVoxelMesh()
#Vox.SaveVoxelMesh(CombiTextile, r'C:\Users\Public\Documents\YANIE\ABAQUSTexGen\MembraneAlgorithm\MembraneProject\TexGen\TextileGeneration\CombiS1.inp',nXvoxel,nYvoxel,nZvoxel,1,1,0,0)
Yanie
louisepb
Project Leader
Posts: 998
Joined: Tue Dec 08, 2009 2:27 pm
Location: Nottingham

Re: scripting the geometry

Post by louisepb »

Hi Yanie,

I have run your script and you appear to end up with 106 yarns instead of 72. You seem to add both the original and the offset yarns from the second weave to the combined textile. If you can correct this then you should stand more chance of seeing exactly what is going on with your offset.

Louise
dyeyanie
Regular
Posts: 154
Joined: Thu Oct 06, 2011 10:39 am

Re: scripting the geometry

Post by dyeyanie »

HI Louise,

Ok, I'll try to modify them then. thanks for your help. By the way, may I know to which reference that you adopt the material properties of fiber and the matrix as default here? I would like to cite them in my work.

Yanie
louisepb
Project Leader
Posts: 998
Joined: Tue Dec 08, 2009 2:27 pm
Location: Nottingham

Re: scripting the geometry

Post by louisepb »

Hi Yanie,

These are just approximate values for carbon fibre and resin. There is no particular reference. For an accurate model you should replace these with the correct values for your particular material.

Louise
dyeyanie
Regular
Posts: 154
Joined: Thu Oct 06, 2011 10:39 am

Re: scripting the geometry

Post by dyeyanie »

Hi Louise,

I have a problem here. I try to generate a sheared textile. However, I found that there are a few imperfect fiber generated. May you define the bug that contributed to this? I tried but failed to find it.

Here i post the code;

Code: Select all

import sys
from _Embedded import *
from TexGen.Core import *
from TexGen.Renderer import *
from TexGen.Export import *
from TexGen.Abaqus import *
from math import*

# Create a textile
Textile = CTextile()

# Create a python list containing 24 yarns
Yarns = [CYarn(), CYarn(), CYarn(), CYarn(), CYarn(), CYarn(), CYarn(), CYarn(),CYarn(), CYarn(), CYarn(), CYarn(),CYarn(), CYarn(), CYarn(), CYarn(),CYarn(), CYarn(), CYarn(), CYarn(),CYarn(), CYarn(), CYarn(), CYarn()] 

# Define some constants that will be used in further calculations
spacing = 10.26
height = 1
width = 8.88

shearAngle = pi/36
twistAngle = shearAngle

shearOffset = spacing*sin(shearAngle)


# Add nodes to the yarns to describe their paths, these are the sheared node positions
Yarns[0].AddNode(CNode(XYZ(0, 0, 1.5*height)))
Yarns[0].AddNode(CNode(XYZ(spacing, shearOffset, 1.5*height)))
Yarns[0].AddNode(CNode(XYZ(2*spacing, 2*shearOffset, 1.5*height)))
Yarns[0].AddNode(CNode(XYZ(3*spacing, 3*shearOffset, 1.5*height)))
Yarns[0].AddNode(CNode(XYZ(4*spacing, 4*shearOffset, 1.5*height)))
Yarns[0].AddNode(CNode(XYZ(5*spacing, 5*shearOffset, 1.5*height)))
Yarns[0].AddNode(CNode(XYZ(6*spacing, 6*shearOffset, 0.5*height)))
Yarns[0].AddNode(CNode(XYZ(7*spacing, 7*shearOffset, 0.5*height)))
Yarns[0].AddNode(CNode(XYZ(8*spacing, 8*shearOffset, 0.5*height)))
Yarns[0].AddNode(CNode(XYZ(9*spacing, 9*shearOffset, 1.5*height)))
Yarns[0].AddNode(CNode(XYZ(10*spacing, 10*shearOffset, 1.5*height)))
Yarns[0].AddNode(CNode(XYZ(11*spacing, 11*shearOffset, 1.5*height)))
Yarns[0].AddNode(CNode(XYZ(12*spacing, 12*shearOffset, 1.5*height)))

Yarns[1].AddNode(CNode(XYZ(0+shearOffset, spacing, 1.5*height)))
Yarns[1].AddNode(CNode(XYZ(spacing+shearOffset, spacing+shearOffset, 1.5*height)))
Yarns[1].AddNode(CNode(XYZ(2*spacing+shearOffset, spacing+2*shearOffset, 1.5*height)))
Yarns[1].AddNode(CNode(XYZ(3*spacing+shearOffset, spacing+3*shearOffset, 1.5*height)))
Yarns[1].AddNode(CNode(XYZ(4*spacing+shearOffset, spacing+4*shearOffset, 1.5*height)))
Yarns[1].AddNode(CNode(XYZ(5*spacing+shearOffset, spacing+5*shearOffset, 1.5*height)))
Yarns[1].AddNode(CNode(XYZ(6*spacing+shearOffset, spacing+6*shearOffset, 0.5*height)))
Yarns[1].AddNode(CNode(XYZ(7*spacing+shearOffset, spacing+7*shearOffset, 0.5*height)))
Yarns[1].AddNode(CNode(XYZ(8*spacing+shearOffset, spacing+8*shearOffset, 1.5*height)))
Yarns[1].AddNode(CNode(XYZ(9*spacing+shearOffset, spacing+9*shearOffset, 0.5*height)))
Yarns[1].AddNode(CNode(XYZ(10*spacing+shearOffset, spacing+10*shearOffset, 1.5*height)))
Yarns[1].AddNode(CNode(XYZ(11*spacing+shearOffset, spacing+11*shearOffset, 1.5*height)))
Yarns[1].AddNode(CNode(XYZ(12*spacing+shearOffset, spacing+12*shearOffset, 1.5*height)))

Yarns[2].AddNode(CNode(XYZ(0+2*shearOffset, 2*spacing, 1.5*height)))
Yarns[2].AddNode(CNode(XYZ(spacing+2*shearOffset, 2*spacing+shearOffset, 1.5*height)))
Yarns[2].AddNode(CNode(XYZ(2*spacing+2*shearOffset, 2*spacing+2*shearOffset, 1.5*height)))
Yarns[2].AddNode(CNode(XYZ(3*spacing+2*shearOffset, 2*spacing+3*shearOffset, 1.5*height)))
Yarns[2].AddNode(CNode(XYZ(4*spacing+2*shearOffset, 2*spacing+4*shearOffset, 1.5*height)))
Yarns[2].AddNode(CNode(XYZ(5*spacing+2*shearOffset, 2*spacing+5*shearOffset, 1.5*height)))
Yarns[2].AddNode(CNode(XYZ(6*spacing+2*shearOffset, 2*spacing+6*shearOffset, 0.5*height)))
Yarns[2].AddNode(CNode(XYZ(7*spacing+2*shearOffset, 2*spacing+7*shearOffset, 1.5*height)))
Yarns[2].AddNode(CNode(XYZ(8*spacing+2*shearOffset, 2*spacing+8*shearOffset, 0.5*height)))
Yarns[2].AddNode(CNode(XYZ(9*spacing+2*shearOffset, 2*spacing+9*shearOffset, 1.5*height)))
Yarns[2].AddNode(CNode(XYZ(10*spacing+2*shearOffset, 2*spacing+10*shearOffset, 0.5*height)))
Yarns[2].AddNode(CNode(XYZ(11*spacing+2*shearOffset, 2*spacing+11*shearOffset, 1.5*height)))
Yarns[2].AddNode(CNode(XYZ(12*spacing+2*shearOffset, 2*spacing+12*shearOffset, 1.5*height)))

Yarns[3].AddNode(CNode(XYZ(0+3*shearOffset, 3*spacing, 1.5*height)))
Yarns[3].AddNode(CNode(XYZ(spacing+3*shearOffset, 3*spacing+shearOffset, 1.5*height)))
Yarns[3].AddNode(CNode(XYZ(2*spacing+3*shearOffset, 3*spacing+2*shearOffset, 1.5*height)))
Yarns[3].AddNode(CNode(XYZ(3*spacing+3*shearOffset, 3*spacing+3*shearOffset, 1.5*height)))
Yarns[3].AddNode(CNode(XYZ(4*spacing+3*shearOffset, 3*spacing+4*shearOffset, 1.5*height)))
Yarns[3].AddNode(CNode(XYZ(5*spacing+3*shearOffset, 3*spacing+5*shearOffset, 1.5*height)))
Yarns[3].AddNode(CNode(XYZ(6*spacing+3*shearOffset, 3*spacing+6*shearOffset, 1.5*height)))
Yarns[3].AddNode(CNode(XYZ(7*spacing+3*shearOffset, 3*spacing+7*shearOffset, 0.5*height)))
Yarns[3].AddNode(CNode(XYZ(8*spacing+3*shearOffset, 3*spacing+8*shearOffset, 1.5*height)))
Yarns[3].AddNode(CNode(XYZ(9*spacing+3*shearOffset, 3*spacing+9*shearOffset, 0.5*height)))
Yarns[3].AddNode(CNode(XYZ(10*spacing+3*shearOffset, 3*spacing+10*shearOffset, 1.5*height)))
Yarns[3].AddNode(CNode(XYZ(11*spacing+3*shearOffset, 3*spacing+11*shearOffset, 0.5*height)))
Yarns[3].AddNode(CNode(XYZ(12*spacing+3*shearOffset, 3*spacing+12*shearOffset, 1.5*height)))

Yarns[4].AddNode(CNode(XYZ(0+4*shearOffset, 4*spacing, 1.5*height)))
Yarns[4].AddNode(CNode(XYZ(spacing+4*shearOffset, 4*spacing+shearOffset, 1.5*height)))
Yarns[4].AddNode(CNode(XYZ(2*spacing+4*shearOffset, 4*spacing+2*shearOffset, 1.5*height)))
Yarns[4].AddNode(CNode(XYZ(3*spacing+4*shearOffset, 4*spacing+3*shearOffset, 1.5*height)))
Yarns[4].AddNode(CNode(XYZ(4*spacing+4*shearOffset, 4*spacing+4*shearOffset, 1.5*height)))
Yarns[4].AddNode(CNode(XYZ(5*spacing+4*shearOffset, 4*spacing+5*shearOffset, 1.5*height)))
Yarns[4].AddNode(CNode(XYZ(6*spacing+4*shearOffset, 4*spacing+6*shearOffset, 1.5*height)))
Yarns[4].AddNode(CNode(XYZ(7*spacing+4*shearOffset, 4*spacing+7*shearOffset, 1.5*height)))
Yarns[4].AddNode(CNode(XYZ(8*spacing+4*shearOffset, 4*spacing+8*shearOffset, 0.5*height)))
Yarns[4].AddNode(CNode(XYZ(9*spacing+4*shearOffset, 4*spacing+9*shearOffset, 1.5*height)))
Yarns[4].AddNode(CNode(XYZ(10*spacing+4*shearOffset, 4*spacing+10*shearOffset, 0.5*height)))
Yarns[4].AddNode(CNode(XYZ(11*spacing+4*shearOffset, 4*spacing+11*shearOffset, 0.5*height)))
Yarns[4].AddNode(CNode(XYZ(12*spacing+4*shearOffset, 4*spacing+12*shearOffset, 1.5*height)))

Yarns[5].AddNode(CNode(XYZ(0+5*shearOffset, 5*spacing, 1.5*height)))
Yarns[5].AddNode(CNode(XYZ(spacing+5*shearOffset, 5*spacing+shearOffset, 1.5*height)))
Yarns[5].AddNode(CNode(XYZ(2*spacing+5*shearOffset, 5*spacing+2*shearOffset, 1.5*height)))
Yarns[5].AddNode(CNode(XYZ(3*spacing+5*shearOffset, 5*spacing+3*shearOffset, 1.5*height)))
Yarns[5].AddNode(CNode(XYZ(4*spacing+5*shearOffset, 5*spacing+4*shearOffset, 1.5*height)))
Yarns[5].AddNode(CNode(XYZ(5*spacing+5*shearOffset, 5*spacing+5*shearOffset, 1.5*height)))
Yarns[5].AddNode(CNode(XYZ(6*spacing+5*shearOffset, 5*spacing+6*shearOffset, 1.5*height)))
Yarns[5].AddNode(CNode(XYZ(7*spacing+5*shearOffset, 5*spacing+7*shearOffset, 1.5*height)))
Yarns[5].AddNode(CNode(XYZ(8*spacing+5*shearOffset, 5*spacing+8*shearOffset, 1.5*height)))
Yarns[5].AddNode(CNode(XYZ(9*spacing+5*shearOffset, 5*spacing+9*shearOffset, 0.5*height)))
Yarns[5].AddNode(CNode(XYZ(10*spacing+5*shearOffset, 5*spacing+10*shearOffset, 0.5*height)))
Yarns[5].AddNode(CNode(XYZ(11*spacing+5*shearOffset, 5*spacing+11*shearOffset, 0.5*height)))
Yarns[5].AddNode(CNode(XYZ(12*spacing+5*shearOffset, 5*spacing+12*shearOffset, 1.5*height)))

Yarns[6].AddNode(CNode(XYZ(0+6*shearOffset, 6*spacing, 1.5*height)))
Yarns[6].AddNode(CNode(XYZ(spacing+6*shearOffset, 6*spacing+shearOffset, 1.5*height)))
Yarns[6].AddNode(CNode(XYZ(2*spacing+6*shearOffset, 6*spacing+2*shearOffset, 1.5*height)))
Yarns[6].AddNode(CNode(XYZ(3*spacing+6*shearOffset, 6*spacing+3*shearOffset, 0.5*height)))
Yarns[6].AddNode(CNode(XYZ(4*spacing+6*shearOffset, 6*spacing+4*shearOffset, 0.5*height)))
Yarns[6].AddNode(CNode(XYZ(5*spacing+6*shearOffset, 6*spacing+5*shearOffset, 0.5*height)))
Yarns[6].AddNode(CNode(XYZ(6*spacing+6*shearOffset, 6*spacing+6*shearOffset, 0.5*height)))
Yarns[6].AddNode(CNode(XYZ(7*spacing+6*shearOffset, 6*spacing+7*shearOffset, 0.5*height)))
Yarns[6].AddNode(CNode(XYZ(8*spacing+6*shearOffset, 6*spacing+8*shearOffset, 0.5*height)))
Yarns[6].AddNode(CNode(XYZ(9*spacing+6*shearOffset, 6*spacing+9*shearOffset, 0.5*height)))
Yarns[6].AddNode(CNode(XYZ(10*spacing+6*shearOffset, 6*spacing+10*shearOffset, 0.5*height)))
Yarns[6].AddNode(CNode(XYZ(11*spacing+6*shearOffset, 6*spacing+11*shearOffset, 0.5*height)))
Yarns[6].AddNode(CNode(XYZ(12*spacing+6*shearOffset, 6*spacing+12*shearOffset, 1.5*height)))

Yarns[7].AddNode(CNode(XYZ(0+7*shearOffset, 7*spacing, 1.5*height)))
Yarns[7].AddNode(CNode(XYZ(spacing+7*shearOffset, 7*spacing+shearOffset, 1.5*height)))
Yarns[7].AddNode(CNode(XYZ(2*spacing+7*shearOffset, 7*spacing+2*shearOffset, 0.5*height)))
Yarns[7].AddNode(CNode(XYZ(3*spacing+7*shearOffset, 7*spacing+3*shearOffset, 1.5*height)))
Yarns[7].AddNode(CNode(XYZ(4*spacing+7*shearOffset, 7*spacing+4*shearOffset, 0.5*height)))
Yarns[7].AddNode(CNode(XYZ(5*spacing+7*shearOffset, 7*spacing+5*shearOffset, 0.5*height)))
Yarns[7].AddNode(CNode(XYZ(6*spacing+7*shearOffset, 7*spacing+6*shearOffset, 0.5*height)))
Yarns[7].AddNode(CNode(XYZ(7*spacing+7*shearOffset, 7*spacing+7*shearOffset, 0.5*height)))
Yarns[7].AddNode(CNode(XYZ(8*spacing+7*shearOffset, 7*spacing+8*shearOffset, 0.5*height)))
Yarns[7].AddNode(CNode(XYZ(9*spacing+7*shearOffset, 7*spacing+9*shearOffset, 0.5*height)))
Yarns[7].AddNode(CNode(XYZ(10*spacing+7*shearOffset, 7*spacing+10*shearOffset, 0.5*height)))
Yarns[7].AddNode(CNode(XYZ(11*spacing+7*shearOffset, 7*spacing+11*shearOffset, 0.5*height)))
Yarns[7].AddNode(CNode(XYZ(12*spacing+7*shearOffset, 7*spacing+12*shearOffset, 1.5*height)))

Yarns[8].AddNode(CNode(XYZ(0+8*shearOffset, 8*spacing, 1.5*height)))
Yarns[8].AddNode(CNode(XYZ(spacing+8*shearOffset, 8*spacing+shearOffset, 0.5*height)))
Yarns[8].AddNode(CNode(XYZ(2*spacing+8*shearOffset, 8*spacing+2*shearOffset, 1.5*height)))
Yarns[8].AddNode(CNode(XYZ(3*spacing+8*shearOffset, 8*spacing+3*shearOffset, 0.5*height)))
Yarns[8].AddNode(CNode(XYZ(4*spacing+8*shearOffset, 8*spacing+4*shearOffset, 1.5*height)))
Yarns[8].AddNode(CNode(XYZ(5*spacing+8*shearOffset, 8*spacing+5*shearOffset, 0.5*height)))
Yarns[8].AddNode(CNode(XYZ(6*spacing+8*shearOffset, 8*spacing+6*shearOffset, 0.5*height)))
Yarns[8].AddNode(CNode(XYZ(7*spacing+8*shearOffset, 8*spacing+7*shearOffset, 0.5*height)))
Yarns[8].AddNode(CNode(XYZ(8*spacing+8*shearOffset, 8*spacing+8*shearOffset, 0.5*height)))
Yarns[8].AddNode(CNode(XYZ(9*spacing+8*shearOffset, 8*spacing+9*shearOffset, 0.5*height)))
Yarns[8].AddNode(CNode(XYZ(10*spacing+8*shearOffset, 8*spacing+10*shearOffset, 0.5*height)))
Yarns[8].AddNode(CNode(XYZ(11*spacing+8*shearOffset, 8*spacing+11*shearOffset, 0.5*height)))
Yarns[8].AddNode(CNode(XYZ(12*spacing+8*shearOffset, 8*spacing+12*shearOffset, 1.5*height)))

Yarns[9].AddNode(CNode(XYZ(0+9*shearOffset, 9*spacing, 0.5*height)))
Yarns[9].AddNode(CNode(XYZ(spacing+9*shearOffset, 9*spacing+shearOffset, 1.5*height)))
Yarns[9].AddNode(CNode(XYZ(2*spacing+9*shearOffset, 9*spacing+2*shearOffset, 0.5*height)))
Yarns[9].AddNode(CNode(XYZ(3*spacing+9*shearOffset, 9*spacing+3*shearOffset, 1.5*height)))
Yarns[9].AddNode(CNode(XYZ(4*spacing+9*shearOffset, 9*spacing+4*shearOffset, 0.5*height)))
Yarns[9].AddNode(CNode(XYZ(5*spacing+9*shearOffset, 9*spacing+5*shearOffset, 1.5*height)))
Yarns[9].AddNode(CNode(XYZ(6*spacing+9*shearOffset, 9*spacing+6*shearOffset, 0.5*height)))
Yarns[9].AddNode(CNode(XYZ(7*spacing+9*shearOffset, 9*spacing+7*shearOffset, 0.5*height)))
Yarns[9].AddNode(CNode(XYZ(8*spacing+9*shearOffset, 9*spacing+8*shearOffset, 0.5*height)))
Yarns[9].AddNode(CNode(XYZ(9*spacing+9*shearOffset, 9*spacing+9*shearOffset, 0.5*height)))
Yarns[9].AddNode(CNode(XYZ(10*spacing+9*shearOffset, 9*spacing+10*shearOffset, 0.5*height)))
Yarns[9].AddNode(CNode(XYZ(11*spacing+9*shearOffset, 9*spacing+11*shearOffset, 0.5*height)))
Yarns[9].AddNode(CNode(XYZ(12*spacing+9*shearOffset, 9*spacing+12*shearOffset, 0.5*height)))

Yarns[10].AddNode(CNode(XYZ(0+10*shearOffset, 10*spacing, 0.5*height)))
Yarns[10].AddNode(CNode(XYZ(spacing+10*shearOffset, 10*spacing+shearOffset, 0.5*height)))
Yarns[10].AddNode(CNode(XYZ(2*spacing+10*shearOffset, 10*spacing+2*shearOffset, 1.5*height)))
Yarns[10].AddNode(CNode(XYZ(3*spacing+10*shearOffset, 10*spacing+3*shearOffset, 0.5*height)))
Yarns[10].AddNode(CNode(XYZ(4*spacing+10*shearOffset, 10*spacing+4*shearOffset, 1.5*height)))
Yarns[10].AddNode(CNode(XYZ(5*spacing+10*shearOffset, 10*spacing+5*shearOffset, 1.5*height)))
Yarns[10].AddNode(CNode(XYZ(6*spacing+10*shearOffset, 10*spacing+6*shearOffset, 0.5*height)))
Yarns[10].AddNode(CNode(XYZ(7*spacing+10*shearOffset, 10*spacing+7*shearOffset, 0.5*height)))
Yarns[10].AddNode(CNode(XYZ(8*spacing+10*shearOffset, 10*spacing+8*shearOffset, 0.5*height)))
Yarns[10].AddNode(CNode(XYZ(9*spacing+10*shearOffset, 10*spacing+9*shearOffset, 0.5*height)))
Yarns[10].AddNode(CNode(XYZ(10*spacing+10*shearOffset, 10*spacing+10*shearOffset, 0.5*height)))
Yarns[10].AddNode(CNode(XYZ(11*spacing+10*shearOffset, 10*spacing+11*shearOffset, 0.5*height)))
Yarns[10].AddNode(CNode(XYZ(12*spacing+10*shearOffset, 10*spacing+12*shearOffset, 0.5*height)))

Yarns[11].AddNode(CNode(XYZ(0+11*shearOffset, 11*spacing, 0.5*height)))
Yarns[11].AddNode(CNode(XYZ(spacing+11*shearOffset, 11*spacing+shearOffset, 0.5*height)))
Yarns[11].AddNode(CNode(XYZ(2*spacing+11*shearOffset, 11*spacing+2*shearOffset, 0.5*height)))
Yarns[11].AddNode(CNode(XYZ(3*spacing+11*shearOffset, 11*spacing+3*shearOffset, 1.5*height)))
Yarns[11].AddNode(CNode(XYZ(4*spacing+11*shearOffset, 11*spacing+4*shearOffset, 1.5*height)))
Yarns[11].AddNode(CNode(XYZ(5*spacing+11*shearOffset, 11*spacing+5*shearOffset, 1.5*height)))
Yarns[11].AddNode(CNode(XYZ(6*spacing+11*shearOffset, 11*spacing+6*shearOffset, 0.5*height)))
Yarns[11].AddNode(CNode(XYZ(7*spacing+11*shearOffset, 11*spacing+7*shearOffset, 0.5*height)))
Yarns[11].AddNode(CNode(XYZ(8*spacing+11*shearOffset, 11*spacing+8*shearOffset, 0.5*height)))
Yarns[11].AddNode(CNode(XYZ(9*spacing+11*shearOffset, 11*spacing+9*shearOffset, 0.5*height)))
Yarns[11].AddNode(CNode(XYZ(10*spacing+11*shearOffset, 11*spacing+10*shearOffset, 0.5*height)))
Yarns[11].AddNode(CNode(XYZ(11*spacing+11*shearOffset, 11*spacing+11*shearOffset, 0.5*height)))
Yarns[11].AddNode(CNode(XYZ(12*spacing+11*shearOffset, 11*spacing+12*shearOffset, 0.5*height)))

Yarns[12].AddNode(CNode(XYZ(0, 0, 0.5*height)))
Yarns[12].AddNode(CNode(XYZ(shearOffset, spacing+shearOffset, 0.5*height)))
Yarns[12].AddNode(CNode(XYZ(2*shearOffset, 2*spacing+2*shearOffset, 0.5*height)))
Yarns[12].AddNode(CNode(XYZ(3*shearOffset, 3*spacing+3*shearOffset, 0.5*height)))
Yarns[12].AddNode(CNode(XYZ(4*shearOffset, 4*spacing+4*shearOffset, 0.5*height)))
Yarns[12].AddNode(CNode(XYZ(5*shearOffset, 5*spacing+5*shearOffset, 0.5*height)))
Yarns[12].AddNode(CNode(XYZ(6*shearOffset, 6*spacing+6*shearOffset, 0.5*height)))
Yarns[12].AddNode(CNode(XYZ(7*shearOffset, 7*spacing+7*shearOffset, 0.5*height)))
Yarns[12].AddNode(CNode(XYZ(8*shearOffset, 8*spacing+8*shearOffset, 0.5*height)))
Yarns[12].AddNode(CNode(XYZ(9*shearOffset, 9*spacing+9*shearOffset, 1.5*height)))
Yarns[12].AddNode(CNode(XYZ(10*shearOffset, 10*spacing+10*shearOffset, 1.5*height)))
Yarns[12].AddNode(CNode(XYZ(11*shearOffset, 11*spacing+11*shearOffset, 1.5*height)))
Yarns[12].AddNode(CNode(XYZ(12*shearOffset, 12*spacing+12*shearOffset, 0.5*height)))

Yarns[13].AddNode(CNode(XYZ(spacing, 0, 0.5*height)))
Yarns[13].AddNode(CNode(XYZ(spacing+shearOffset, spacing+shearOffset, 0.5*height)))
Yarns[13].AddNode(CNode(XYZ(spacing+2*shearOffset, 2*spacing+2*shearOffset, 0.5*height)))
Yarns[13].AddNode(CNode(XYZ(spacing+3*shearOffset, 3*spacing+3*shearOffset, 0.5*height)))
Yarns[13].AddNode(CNode(XYZ(spacing+4*shearOffset, 4*spacing+4*shearOffset, 0.5*height)))
Yarns[13].AddNode(CNode(XYZ(spacing+5*shearOffset, 5*spacing+5*shearOffset, 0.5*height)))
Yarns[13].AddNode(CNode(XYZ(spacing+6*shearOffset, 6*spacing+6*shearOffset, 0.5*height)))
Yarns[13].AddNode(CNode(XYZ(spacing+7*shearOffset, 7*spacing+7*shearOffset, 0.5*height)))
Yarns[13].AddNode(CNode(XYZ(spacing+8*shearOffset, 8*spacing+8*shearOffset, 1.5*height)))
Yarns[13].AddNode(CNode(XYZ(spacing+9*shearOffset, 9*spacing+9*shearOffset, 0.5*height)))
Yarns[13].AddNode(CNode(XYZ(spacing+10*shearOffset, 10*spacing+10*shearOffset, 1.5*height)))
Yarns[13].AddNode(CNode(XYZ(spacing+11*shearOffset, 11*spacing+11*shearOffset, 1.5*height)))
Yarns[13].AddNode(CNode(XYZ(spacing+12*shearOffset, 12*spacing+12*shearOffset, 0.5*height)))

Yarns[14].AddNode(CNode(XYZ(2*spacing, 0, 0.5*height)))
Yarns[14].AddNode(CNode(XYZ(2*spacing+shearOffset, 1*spacing+shearOffset, 0.5*height)))
Yarns[14].AddNode(CNode(XYZ(2*spacing+2*shearOffset, 2*spacing+2*shearOffset, 0.5*height)))
Yarns[14].AddNode(CNode(XYZ(2*spacing+3*shearOffset, 3*spacing+3*shearOffset, 0.5*height)))
Yarns[14].AddNode(CNode(XYZ(2*spacing+4*shearOffset, 4*spacing+4*shearOffset, 0.5*height)))
Yarns[14].AddNode(CNode(XYZ(2*spacing+5*shearOffset, 5*spacing+5*shearOffset, 0.5*height)))
Yarns[14].AddNode(CNode(XYZ(2*spacing+6*shearOffset, 6*spacing+6*shearOffset, 0.5*height)))
Yarns[14].AddNode(CNode(XYZ(2*spacing+7*shearOffset, 7*spacing+7*shearOffset, 1.5*height)))
Yarns[14].AddNode(CNode(XYZ(2*spacing+8*shearOffset, 8*spacing+8*shearOffset, 0.5*height)))
Yarns[14].AddNode(CNode(XYZ(2*spacing+9*shearOffset, 9*spacing+9*shearOffset, 1.5*height)))
Yarns[14].AddNode(CNode(XYZ(2*spacing+10*shearOffset, 10*spacing+10*shearOffset, 0.5*height)))
Yarns[14].AddNode(CNode(XYZ(2*spacing+11*shearOffset, 11*spacing+11*shearOffset, 1.5*height)))
Yarns[14].AddNode(CNode(XYZ(2*spacing+12*shearOffset, 12*spacing+12*shearOffset, 0.5*height)))

Yarns[15].AddNode(CNode(XYZ(3*spacing, 0, 0.5*height)))
Yarns[15].AddNode(CNode(XYZ(3*spacing+shearOffset, 1*spacing+shearOffset, 0.5*height)))
Yarns[15].AddNode(CNode(XYZ(3*spacing+2*shearOffset, 2*spacing+2*shearOffset, 0.5*height)))
Yarns[15].AddNode(CNode(XYZ(3*spacing+3*shearOffset, 3*spacing+3*shearOffset, 0.5*height)))
Yarns[15].AddNode(CNode(XYZ(3*spacing+4*shearOffset, 4*spacing+4*shearOffset, 0.5*height)))
Yarns[15].AddNode(CNode(XYZ(3*spacing+5*shearOffset, 5*spacing+5*shearOffset, 0.5*height)))
Yarns[15].AddNode(CNode(XYZ(3*spacing+6*shearOffset, 6*spacing+6*shearOffset, 1.5*height)))
Yarns[15].AddNode(CNode(XYZ(3*spacing+7*shearOffset, 7*spacing+7*shearOffset, 0.5*height)))
Yarns[15].AddNode(CNode(XYZ(3*spacing+8*shearOffset, 8*spacing+8*shearOffset, 1.5*height)))
Yarns[15].AddNode(CNode(XYZ(3*spacing+9*shearOffset, 9*spacing+9*shearOffset, 0.5*height)))
Yarns[15].AddNode(CNode(XYZ(3*spacing+10*shearOffset, 10*spacing+10*shearOffset, 1.5*height)))
Yarns[15].AddNode(CNode(XYZ(3*spacing+11*shearOffset, 11*spacing+11*shearOffset, 0.5*height)))
Yarns[15].AddNode(CNode(XYZ(3*spacing+12*shearOffset, 12*spacing+12*shearOffset, 0.5*height)))

Yarns[16].AddNode(CNode(XYZ(4*spacing, 0, 0.5*height)))
Yarns[16].AddNode(CNode(XYZ(4*spacing+shearOffset, 1*spacing+shearOffset, 0.5*height)))
Yarns[16].AddNode(CNode(XYZ(4*spacing+2*shearOffset, 2*spacing+2*shearOffset, 0.5*height)))
Yarns[16].AddNode(CNode(XYZ(4*spacing+3*shearOffset, 3*spacing+3*shearOffset, 0.5*height)))
Yarns[16].AddNode(CNode(XYZ(4*spacing+4*shearOffset, 4*spacing+4*shearOffset, 0.5*height)))
Yarns[16].AddNode(CNode(XYZ(4*spacing+5*shearOffset, 5*spacing+5*shearOffset, 0.5*height)))
Yarns[16].AddNode(CNode(XYZ(4*spacing+6*shearOffset, 6*spacing+6*shearOffset, 1.5*height)))
Yarns[16].AddNode(CNode(XYZ(4*spacing+7*shearOffset, 7*spacing+7*shearOffset, 1.5*height)))
Yarns[16].AddNode(CNode(XYZ(4*spacing+8*shearOffset, 8*spacing+8*shearOffset, 0.5*height)))
Yarns[16].AddNode(CNode(XYZ(4*spacing+9*shearOffset, 9*spacing+9*shearOffset, 1.5*height)))
Yarns[16].AddNode(CNode(XYZ(4*spacing+10*shearOffset, 10*spacing+10*shearOffset, 0.5*height)))
Yarns[16].AddNode(CNode(XYZ(4*spacing+11*shearOffset, 11*spacing+11*shearOffset, 0.5*height)))
Yarns[16].AddNode(CNode(XYZ(4*spacing+12*shearOffset, 12*spacing+12*shearOffset, 0.5*height)))

Yarns[17].AddNode(CNode(XYZ(5*spacing, 0, 0.5*height)))
Yarns[17].AddNode(CNode(XYZ(5*spacing+shearOffset, 1*spacing+shearOffset, 0.5*height)))
Yarns[17].AddNode(CNode(XYZ(5*spacing+2*shearOffset, 2*spacing+2*shearOffset, 0.5*height)))
Yarns[17].AddNode(CNode(XYZ(5*spacing+3*shearOffset, 3*spacing+3*shearOffset, 0.5*height)))
Yarns[17].AddNode(CNode(XYZ(5*spacing+4*shearOffset, 4*spacing+4*shearOffset, 0.5*height)))
Yarns[17].AddNode(CNode(XYZ(5*spacing+5*shearOffset, 5*spacing+5*shearOffset, 0.5*height)))
Yarns[17].AddNode(CNode(XYZ(5*spacing+6*shearOffset, 6*spacing+6*shearOffset, 1.5*height)))
Yarns[17].AddNode(CNode(XYZ(5*spacing+7*shearOffset, 7*spacing+7*shearOffset, 1.5*height)))
Yarns[17].AddNode(CNode(XYZ(5*spacing+8*shearOffset, 8*spacing+8*shearOffset, 1.5*height)))
Yarns[17].AddNode(CNode(XYZ(5*spacing+9*shearOffset, 9*spacing+9*shearOffset, 0.5*height)))
Yarns[17].AddNode(CNode(XYZ(5*spacing+10*shearOffset, 10*spacing+10*shearOffset, 0.5*height)))
Yarns[17].AddNode(CNode(XYZ(5*spacing+11*shearOffset, 11*spacing+11*shearOffset, 0.5*height)))
Yarns[17].AddNode(CNode(XYZ(5*spacing+12*shearOffset, 12*spacing+12*shearOffset, 0.5*height)))

Yarns[18].AddNode(CNode(XYZ(6*spacing, 0, 1.5*height)))
Yarns[18].AddNode(CNode(XYZ(6*spacing+shearOffset, 1*spacing+shearOffset, 1.5*height)))
Yarns[18].AddNode(CNode(XYZ(6*spacing+2*shearOffset, 2*spacing+2*shearOffset, 1.5*height)))
Yarns[18].AddNode(CNode(XYZ(6*spacing+3*shearOffset, 3*spacing+3*shearOffset, 0.5*height)))
Yarns[18].AddNode(CNode(XYZ(6*spacing+4*shearOffset, 4*spacing+4*shearOffset, 0.5*height)))
Yarns[18].AddNode(CNode(XYZ(6*spacing+5*shearOffset, 5*spacing+5*shearOffset, 0.5*height)))
Yarns[18].AddNode(CNode(XYZ(6*spacing+6*shearOffset, 6*spacing+6*shearOffset, 1.5*height)))
Yarns[18].AddNode(CNode(XYZ(6*spacing+7*shearOffset, 7*spacing+7*shearOffset, 1.5*height)))
Yarns[18].AddNode(CNode(XYZ(6*spacing+8*shearOffset, 8*spacing+8*shearOffset, 1.5*height)))
Yarns[18].AddNode(CNode(XYZ(6*spacing+9*shearOffset, 9*spacing+9*shearOffset, 1.5*height)))
Yarns[18].AddNode(CNode(XYZ(6*spacing+10*shearOffset, 10*spacing+10*shearOffset, 1.5*height)))
Yarns[18].AddNode(CNode(XYZ(6*spacing+11*shearOffset, 11*spacing+11*shearOffset, 1.5*height)))
Yarns[18].AddNode(CNode(XYZ(6*spacing+12*shearOffset, 12*spacing+12*shearOffset, 1.5*height)))

Yarns[19].AddNode(CNode(XYZ(7*spacing, 0, 1.5*height)))
Yarns[19].AddNode(CNode(XYZ(7*spacing+shearOffset, 1*spacing+shearOffset, 1.5*height)))
Yarns[19].AddNode(CNode(XYZ(7*spacing+2*shearOffset, 2*spacing+2*shearOffset, 0.5*height)))
Yarns[19].AddNode(CNode(XYZ(7*spacing+3*shearOffset, 3*spacing+3*shearOffset, 1.5*height)))
Yarns[19].AddNode(CNode(XYZ(7*spacing+4*shearOffset, 4*spacing+4*shearOffset, 0.5*height)))
Yarns[19].AddNode(CNode(XYZ(7*spacing+5*shearOffset, 5*spacing+5*shearOffset, 0.5*height)))
Yarns[19].AddNode(CNode(XYZ(7*spacing+6*shearOffset, 6*spacing+6*shearOffset, 1.5*height)))
Yarns[19].AddNode(CNode(XYZ(7*spacing+7*shearOffset, 7*spacing+7*shearOffset, 1.5*height)))
Yarns[19].AddNode(CNode(XYZ(7*spacing+8*shearOffset, 8*spacing+8*shearOffset, 1.5*height)))
Yarns[19].AddNode(CNode(XYZ(7*spacing+9*shearOffset, 9*spacing+9*shearOffset, 1.5*height)))
Yarns[19].AddNode(CNode(XYZ(7*spacing+10*shearOffset, 10*spacing+10*shearOffset, 1.5*height)))
Yarns[19].AddNode(CNode(XYZ(7*spacing+11*shearOffset, 11*spacing+11*shearOffset, 1.5*height)))
Yarns[19].AddNode(CNode(XYZ(7*spacing+12*shearOffset, 12*spacing+12*shearOffset, 1.5*height)))

Yarns[20].AddNode(CNode(XYZ(8*spacing, 0, 1.5*height)))
Yarns[20].AddNode(CNode(XYZ(8*spacing+shearOffset, 1*spacing+shearOffset, 0.5*height)))
Yarns[20].AddNode(CNode(XYZ(8*spacing+2*shearOffset, 2*spacing+2*shearOffset, 1.5*height)))
Yarns[20].AddNode(CNode(XYZ(8*spacing+3*shearOffset, 3*spacing+3*shearOffset, 0.5*height)))
Yarns[20].AddNode(CNode(XYZ(8*spacing+4*shearOffset, 4*spacing+4*shearOffset, 1.5*height)))
Yarns[20].AddNode(CNode(XYZ(8*spacing+5*shearOffset, 5*spacing+5*shearOffset, 0.5*height)))
Yarns[20].AddNode(CNode(XYZ(8*spacing+6*shearOffset, 6*spacing+6*shearOffset, 1.5*height)))
Yarns[20].AddNode(CNode(XYZ(8*spacing+7*shearOffset, 7*spacing+7*shearOffset, 1.5*height)))
Yarns[20].AddNode(CNode(XYZ(8*spacing+8*shearOffset, 8*spacing+8*shearOffset, 1.5*height)))
Yarns[20].AddNode(CNode(XYZ(8*spacing+9*shearOffset, 9*spacing+9*shearOffset, 1.5*height)))
Yarns[20].AddNode(CNode(XYZ(8*spacing+10*shearOffset, 10*spacing+10*shearOffset, 1.5*height)))
Yarns[20].AddNode(CNode(XYZ(8*spacing+11*shearOffset, 11*spacing+11*shearOffset, 1.5*height)))
Yarns[20].AddNode(CNode(XYZ(8*spacing+12*shearOffset, 12*spacing+12*shearOffset, 1.5*height)))

Yarns[21].AddNode(CNode(XYZ(9*spacing, 0, 0.5*height)))
Yarns[21].AddNode(CNode(XYZ(9*spacing+shearOffset, 1*spacing+shearOffset, 1.5*height)))
Yarns[21].AddNode(CNode(XYZ(9*spacing+2*shearOffset, 2*spacing+2*shearOffset, 0.5*height)))
Yarns[21].AddNode(CNode(XYZ(9*spacing+3*shearOffset, 3*spacing+3*shearOffset, 1.5*height)))
Yarns[21].AddNode(CNode(XYZ(9*spacing+4*shearOffset, 4*spacing+4*shearOffset, 0.5*height)))
Yarns[21].AddNode(CNode(XYZ(9*spacing+5*shearOffset, 5*spacing+5*shearOffset, 1.5*height)))
Yarns[21].AddNode(CNode(XYZ(9*spacing+6*shearOffset, 6*spacing+6*shearOffset, 1.5*height)))
Yarns[21].AddNode(CNode(XYZ(9*spacing+7*shearOffset, 7*spacing+7*shearOffset, 1.5*height)))
Yarns[21].AddNode(CNode(XYZ(9*spacing+8*shearOffset, 8*spacing+8*shearOffset, 1.5*height)))
Yarns[21].AddNode(CNode(XYZ(9*spacing+9*shearOffset, 9*spacing+9*shearOffset, 1.5*height)))
Yarns[21].AddNode(CNode(XYZ(9*spacing+10*shearOffset, 10*spacing+10*shearOffset, 1.5*height)))
Yarns[21].AddNode(CNode(XYZ(9*spacing+11*shearOffset, 11*spacing+11*shearOffset, 1.5*height)))
Yarns[21].AddNode(CNode(XYZ(9*spacing+12*shearOffset, 12*spacing+12*shearOffset, 0.5*height)))

Yarns[22].AddNode(CNode(XYZ(10*spacing, 0, 0.5*height)))
Yarns[22].AddNode(CNode(XYZ(10*spacing+shearOffset, 1*spacing+shearOffset, 0.5*height)))
Yarns[22].AddNode(CNode(XYZ(10*spacing+2*shearOffset, 2*spacing+2*shearOffset, 1.5*height)))
Yarns[22].AddNode(CNode(XYZ(10*spacing+3*shearOffset, 3*spacing+3*shearOffset, 0.5*height)))
Yarns[22].AddNode(CNode(XYZ(10*spacing+4*shearOffset, 4*spacing+4*shearOffset, 1.5*height)))
Yarns[22].AddNode(CNode(XYZ(10*spacing+5*shearOffset, 5*spacing+5*shearOffset, 1.5*height)))
Yarns[22].AddNode(CNode(XYZ(10*spacing+6*shearOffset, 6*spacing+6*shearOffset, 1.5*height)))
Yarns[22].AddNode(CNode(XYZ(10*spacing+7*shearOffset, 7*spacing+7*shearOffset, 1.5*height)))
Yarns[22].AddNode(CNode(XYZ(10*spacing+8*shearOffset, 8*spacing+8*shearOffset, 1.5*height)))
Yarns[22].AddNode(CNode(XYZ(10*spacing+9*shearOffset, 9*spacing+9*shearOffset, 1.5*height)))
Yarns[22].AddNode(CNode(XYZ(10*spacing+10*shearOffset, 10*spacing+10*shearOffset, 1.5*height)))
Yarns[22].AddNode(CNode(XYZ(10*spacing+11*shearOffset, 11*spacing+11*shearOffset, 1.5*height)))
Yarns[22].AddNode(CNode(XYZ(10*spacing+12*shearOffset, 12*spacing+12*shearOffset, 0.5*height)))

Yarns[23].AddNode(CNode(XYZ(11*spacing, 0, 0.5*height)))
Yarns[23].AddNode(CNode(XYZ(11*spacing+shearOffset, 1*spacing+shearOffset, 0.5*height)))
Yarns[23].AddNode(CNode(XYZ(11*spacing+2*shearOffset, 2*spacing+2*shearOffset, 0.5*height)))
Yarns[23].AddNode(CNode(XYZ(11*spacing+3*shearOffset, 3*spacing+3*shearOffset, 1.5*height)))
Yarns[23].AddNode(CNode(XYZ(11*spacing+4*shearOffset, 4*spacing+4*shearOffset, 1.5*height)))
Yarns[23].AddNode(CNode(XYZ(11*spacing+5*shearOffset, 5*spacing+5*shearOffset, 1.5*height)))
Yarns[23].AddNode(CNode(XYZ(11*spacing+6*shearOffset, 6*spacing+6*shearOffset, 1.5*height)))
Yarns[23].AddNode(CNode(XYZ(11*spacing+7*shearOffset, 7*spacing+7*shearOffset, 1.5*height)))
Yarns[23].AddNode(CNode(XYZ(11*spacing+8*shearOffset, 8*spacing+8*shearOffset, 1.5*height)))
Yarns[23].AddNode(CNode(XYZ(11*spacing+9*shearOffset, 9*spacing+9*shearOffset, 1.5*height)))
Yarns[23].AddNode(CNode(XYZ(11*spacing+10*shearOffset, 10*spacing+10*shearOffset, 1.5*height)))
Yarns[23].AddNode(CNode(XYZ(11*spacing+11*shearOffset, 11*spacing+11*shearOffset, 1.5*height)))
Yarns[23].AddNode(CNode(XYZ(11*spacing+12*shearOffset, 12*spacing+12*shearOffset, 0.5*height)))

# Create a cross-section which twists along the length of the yarn to accommodate the sheared fabric architecture
lenticular = CSectionLenticular(width, height)
sectionTwist1 = CYarnSectionInterpPosition()
sectionTwist1.AddSection(0.25, CSectionRotated(lenticular, -twistAngle))
sectionTwist1.AddSection(0.75, CSectionRotated(lenticular, twistAngle))
sectionTwist2 = CYarnSectionInterpPosition()
sectionTwist2.AddSection(0.25, CSectionRotated(lenticular, twistAngle))
sectionTwist2.AddSection(0.75, CSectionRotated(lenticular, -twistAngle))

for Yarn in (Yarns[1], Yarns[3], Yarns[5], Yarns[7], Yarns[9], Yarns[11], Yarns[13], Yarns[15], Yarns[17], Yarns[19], Yarns[21], Yarns[23]):
    Yarn.AssignSection(sectionTwist1)
for Yarn in (Yarns[0], Yarns[2], Yarns[4], Yarns[6], Yarns[8], Yarns[10], Yarns[12], Yarns[14], Yarns[16], Yarns[18], Yarns[20], Yarns[22]):
    Yarn.AssignSection(sectionTwist2)

# Loop over all the yarns in the list
for Yarn in Yarns:
    # Set the resolution of the surface mesh created
    Yarn.SetResolution(20)

    # Add the yarn to our textile
    Textile.AddYarn(Yarn)

# Create a sheared domain with 6 planes
domain = CDomainPlanes()
d = (12*spacing-2*shearOffset*sin(shearAngle))/sqrt(1+sin(shearAngle)**2)
domain.AddPlane(PLANE(XYZ(1, -sin(shearAngle), 0), 0))
domain.AddPlane(PLANE(XYZ(-1, sin(shearAngle), 0), -d))
domain.AddPlane(PLANE(XYZ(-sin(shearAngle), 1, 0), 0))
domain.AddPlane(PLANE(XYZ(sin(shearAngle), -1, 0), -d))
domain.AddPlane(PLANE(XYZ(0, 0, 1), -height))
domain.AddPlane(PLANE(XYZ(0, 0, -1), -2*height))
Textile.AssignDomain(domain)

# Add the textile with the name "MKaitMisAlign"
AddTextile("MKaitMisAlign", Textile)
SaveToXML(r"C:\Users\Public\Documents\SENSE\MisAlign_Sense\MKaitMisAlign.tg3", "MKaitMisAlign", OUTPUT_STANDARD) ##
Attachments
imp1.png
imp1.png (55.08 KiB) Viewed 12591 times
louisepb
Project Leader
Posts: 998
Joined: Tue Dec 08, 2009 2:27 pm
Location: Nottingham

Re: scripting the geometry

Post by louisepb »

Hi Yanie,

I have run your script in TexGen. I think you will find that your yarns are all fine but that there are quite a lot of intersections. The reason you can see strange looking shapes is that the renderer is struggling to render the overlapping shapes. If you select X-ray rendering you will see that the yarns all look ok. You will either need to alter your script or move the yarns in the user interface to rectify this.

Louise
dyeyanie
Regular
Posts: 154
Joined: Thu Oct 06, 2011 10:39 am

Re: scripting the geometry

Post by dyeyanie »

Hi Louise,

Yeah, I did viewed the X-ray rendering and as you said they looked fine. So, is that means I need to modify them manually in GUI to reduce the intersection?

Yanie
louisepb
Project Leader
Posts: 998
Joined: Tue Dec 08, 2009 2:27 pm
Location: Nottingham

Re: scripting the geometry

Post by louisepb »

Hi Yanie,

Yes, that's right.

Louise
dyeyanie
Regular
Posts: 154
Joined: Thu Oct 06, 2011 10:39 am

Re: scripting the geometry

Post by dyeyanie »

HI Louise,

I did modified them in GUI but nothing is changed.

Yanie
louisepb
Project Leader
Posts: 998
Joined: Tue Dec 08, 2009 2:27 pm
Location: Nottingham

Re: scripting the geometry

Post by louisepb »

Hi Yanie,

Without some indication of what you've done I'm afraid I can't make any helpful comment!

Louise
Post Reply