← Back to team overview

yade-users team mailing list archive

Re: [Question #681341]: Move or scale a facet

 

Question #681341 on Yade changed:
https://answers.launchpad.net/yade/+question/681341

    Status: Answered => Solved

gaoxuesong confirmed that the question is solved:
Thanks. I have tried to move and scale a facet. For moving a facet, just changing the position is feasible. But for scaling a facet, just multiplying a scaling factor is not feasible. The vertice coordinates can not be changed directly, like the tuple and string in python, i think.  
Following is the code i used, 

from yade import qt 
c = qt.Controller() 
O.bodies.clear() 
### 2 initial facet ### 
v1 =(0,0,0)
v2 = (1,0,0)
v3 =(1,1,0)
f1 = facet((v1,v2,v3),wire=False)
O.bodies.append(f1)
v1 =(2,0,0)
v2 = (3,0,0)
v3 =(3,1,0)
f1 = facet((v1,v2,v3),wire=False)
O.bodies.append(f1)

## move facet 1 
fcet1 = O.bodies[0]
mv = (1,0,0)
fcet1.state.pos += mv
## succeed ### 
## scale vertices 
for ev in fcet1.shape.vertices:
    for i in range(3):
        ev[i] *= 0.5 
## failed, the vertices can not be changed  
## then try to construct a new facet using the scaled and translated vertices 
vg = [] 
for ev in fcet1.shape.vertices:
    vgi = fcet1.state.pos+fcet1.state.ori*ev ## global coordinates 
    vg.append(vgi)
print(vg)
for each in vg:
    for i in range(3):
        each[i] *= 0.5
        if i == 1: ## translate in y direction by 2.0 
            each[i] += 2.0 
print(vg)
## construct the new facet and remove the old one 
f1 = facet((vg[0],vg[1],vg[2]),wire=False) 
O.bodies.append(f1)
O.bodies.erase(fcet1.id)

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