New question #691026 on Yade:
https://answers.launchpad.net/yade/+question/691026

Dear friend:

It is me again. Sorry. The new problem.

I design five plank(window),  and they rotates around a axis. So I storage the 
position of them,  and hope display the rotation process of them, but the 
reload location is wrong.

# (1) Define the plank:
temp = [
            Vector3(widthHydr * i, wind_y_0, wind_z_0),
            Vector3(widthHydr * (i + 1), wind_y_0, wind_z_0),
            Vector3(widthHydr * (i + 1), wind_y_1, wind_z_1),
            Vector3(widthHydr * i, wind_y_1, wind_z_1)
        ]
        positionWind.append(temp)

    Wind1 = pack.sweptPolylines2gtsSurface([positionWind[0]], capStart=True, 
capEnd=True)
    Wind2 = pack.sweptPolylines2gtsSurface([positionWind[1]], capStart=True, 
capEnd=True)
    Wind3 = pack.sweptPolylines2gtsSurface([positionWind[2]], capStart=True, 
capEnd=True)
    Wind4 = pack.sweptPolylines2gtsSurface([positionWind[3]], capStart=True, 
capEnd=True)
    Wind5 = pack.sweptPolylines2gtsSurface([positionWind[4]], capStart=True, 
capEnd=True)
   
     WindList = IDWind1 + IDWind2 +IDWind3 + IDWind4 + IDWind5

   # (2) Rotation the plank(window) in the O.engines 

    RotationEngine(rotationAxis=(1, 0, 0), rotateAroundZero=True, 
ids=IDWind[0], zeroPoint=positionWind[0][2],
                   label='RotationW1'),
    RotationEngine(rotationAxis=(1, 0, 0), rotateAroundZero=True, 
ids=IDWind[1], zeroPoint=positionWind[1][2],
                   label='RotationW2'),
    RotationEngine(rotationAxis=(1, 0, 0), rotateAroundZero=True, 
ids=IDWind[2], zeroPoint=positionWind[2][2],
                   label='RotationW3'),
    RotationEngine(rotationAxis=(1, 0, 0), rotateAroundZero=True, 
ids=IDWind[3], zeroPoint=positionWind[3][2],
                   label='RotationW4'),
    RotationEngine(rotationAxis=(1, 0, 0), rotateAroundZero=True, 
ids=IDWind[4], zeroPoint=positionWind[4][2],
                   label='RotationW5'),

# (3) Control the speed and direction of the windows

def WindowsAction(IDWind):
    global WinAction, windPosition
    RotationW = [RotationW1, RotationW2, RotationW3, RotationW4, RotationW5]
    for nW in range(0, numWinds):
        ## action
        Pos_z = sum(O.bodies[i].state.pos[2] for i in IDWind[nW]) / 
len(IDWind[nW])
        if WinAction[nW] == 0:
            RotationW[nW].angularVelocity = -VelocityWindNegative
        else:
            RotationW[nW].angularVelocity = VelocityWindPositive

        NegtiveStop = (RotationW[nW].angularVelocity > 0) & (Pos_z <= 
windLowerBoundary)
        PostiveStop = (RotationW[nW].angularVelocity < 0) & (Pos_z >= 
windUpperBoundary)

        if NegtiveStop: windPosition[nW] = windPositionNegative
        elif PostiveStop: windPosition[nW] = windPositionPositive
        else: windPosition[nW] = 0

        if NegtiveStop | PostiveStop:
            RotationW[nW].angularVelocity = 0


#  (4) save the location of windows
def SaveProcessLocation(Episode, iter):
    global WindList
    outputDir = "Output/location/"
    if not os.path.exists(outputDir):
        os.makedirs(outputDir)

    PositonWind = []
   
    for i in WindList:
        temp = [i, o.bodies[i].state.pos]
        PositonWind.append(temp)

    wind_name = outputDir + 'wind_' + str(Episode) + '_' + str(iter)

    np.save(wind_name, PositonWind)


#(5) display the location of the windows

def Relocation():
    global  nEpisode, nIter, index
    path = 'Output/location/'
    wind_name = path + 'wind_' + str(nEpisode) + '_' + str(nIter) + '.npy'

    if nIter >= index[nEpisode, 1]:
        nIter = 0
        nEpisode += 1
    else:
        nIter += 1

    if nEpisode >= len(index):
        O.pause()

    locationWind = np.load(wind_name, allow_pickle=True)

    for i in range(0, len(locationWind)):
        n = locationWind[i][0]
        o.bodies[n].state.pos = locationWind[i][1]
        print(locationWind[i][1])


Problem: the each window constitute of 2 triangle. So if reload the location, 
the 2 triangles comes off. and the rotation angle does not  look right.

Thank you very much
 






-- 
You received this question notification because your team yade-users is
an answer contact for Yade.

_______________________________________________
Mailing list: https://launchpad.net/~yade-users
Post to     : yade-users@lists.launchpad.net
Unsubscribe : https://launchpad.net/~yade-users
More help   : https://help.launchpad.net/ListHelp

Reply via email to