scripting the geometry
Moderators: Martin, Developers
Re: scripting the geometry
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
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
Re: scripting the geometry
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;
and
[/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
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)))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)))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
Re: scripting the geometry
Hi Yanie,
I think that, in both cases, your loop needs to be "for Yarn in Yarns:"
Louise
I think that, in both cases, your loop needs to be "for Yarn in Yarns:"
Louise
Re: scripting the geometry
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
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
Re: scripting the geometry
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
Louise
Re: scripting the geometry
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.
Yanie
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)Re: scripting the geometry
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
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
Re: scripting the geometry
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
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
Re: scripting the geometry
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
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
Re: scripting the geometry
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;
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 (55.08 KiB) Viewed 12586 times
Re: scripting the geometry
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
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
Re: scripting the geometry
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
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
Re: scripting the geometry
Hi Yanie,
Yes, that's right.
Louise
Yes, that's right.
Louise
Re: scripting the geometry
HI Louise,
I did modified them in GUI but nothing is changed.
Yanie
I did modified them in GUI but nothing is changed.
Yanie
Re: scripting the geometry
Hi Yanie,
Without some indication of what you've done I'm afraid I can't make any helpful comment!
Louise
Without some indication of what you've done I'm afraid I can't make any helpful comment!
Louise