예제 #1
0
def main_CppMeshDynTri2D_0():
  cad = dfm2.Cad2D()
  cad.add_polygon([-1, -1, +1, -1, +1, +1, -1, +1.0])
  mesher = dfm2.Mesher_Cad2D(edge_length=0.1)
  dmesh = mesher.meshing(cad)
  dmesh.cdmsh.check()
  dfm2.gl.glfw.winDraw3d([dmesh.cdmsh,dfm2.gl.AxisXYZ()],winsize=(400,300))
예제 #2
0
def main():
    cad = dfm2.Cad2D()
    cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, +1, -1, +1])
    dfm2.gl.glfw.winDraw3d([cad])

    cad.add_vtx_face(0, [0.0, 0.0])
    dfm2.gl.glfw.winDraw3d([cad])

    cad.add_vtx_edge(2, [0.0, 0.8])
    dfm2.gl.glfw.winDraw3d([cad])

    cad.set_edge_type(0, dfm2.CAD_EDGE_GEOM_BEZIER_CUBIC, [0.2, 0.3, 0.8, 0.3])
    dfm2.gl.glfw.winDraw3d([cad])

    cad.set_edge_type(0, dfm2.CAD_EDGE_GEOM_LINE, [])
    dfm2.gl.glfw.winDraw3d([cad])

    cad.clear()
    cad.add_polygon(
        list_xy=[-1000, -1000, +1000, -1000, +1000, +1000, -1000, +1000])
    dfm2.gl.glfw.winDraw3d([cad])

    for itr in range(3):
        cad.clear()
        cad.import_svg("../test_inputs/shape" + str(itr) + ".svg")
        dfm2.gl.glfw.winDraw3d([cad])
예제 #3
0
 def setup_method(self):
     self.cad = dfm2.Cad2D()
     self.lx = 0.5
     self.lz = 0.03
     self.cad.add_polygon(
         list_xy=[0, 0, self.lx, 0, self.lx, self.lz, 0, self.lz])
     self.mesher = dfm2.Mesher_Cad2D(edge_length=0.01)
     self.mesh = self.mesher.meshing(self.cad)
예제 #4
0
파일: test_cad.py 프로젝트: umet55/delfem2
 def test_svg(self,request):
   is_gl = request.config.getoption('--is_gl') == "true"
   cad = dfm2.Cad2D()
   for itr in range(3):
     cad.clear()
     cad.import_svg("../test_inputs/shape" + str(itr) + ".svg")
     if is_gl:
       dfm2.gl.glfw.winDraw3d([cad],nframe=20)
예제 #5
0
파일: test_msh.py 프로젝트: umet55/delfem2
 def test0(self):
     cad = dfm2.Cad2D()
     cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, +1, -1, +1])
     mesher = dfm2.Mesher_Cad2D()
     mesh = mesher.meshing(cad)
     cdmsh = dfm2.CppMeshDynTri3D()
     dfm2.meshdyntri3d_initialize(cdmsh, mesh.np_pos, mesh.np_elm)
     cdmsh.check()
예제 #6
0
def main():

    cad = dfm2.Cad2D()
    cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, +1, -1, +1])
    mesher = dfm2.Mesher_Cad2D(edge_length=0.05)
    mesh = mesher.meshing(cad)
    femScalarPoisson(cad, mesh, mesher)
    femSclarDiffuse(cad, mesh, mesher)
    femSolidLinear_Static(cad, mesh)
    femSolidLinear_Dynamic(cad, mesh)
    femFluidStokes_Static(cad, mesh)
    femFluidStokes_Dynamic(cad, mesh)
    femFluidNavirStokes(cad, mesh)

    femShellCloth()

    cad = dfm2.Cad2D()
    cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, 0, +0, +0, 0, +1, -1, +1.0])
    mesher = dfm2.Mesher_Cad2D(edge_length=0.05)
    mesh = mesher.meshing(cad)
    femScalarPoissonMasterSlave(cad, mesh)

    cad = dfm2.Cad2D()
    cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, +1, -1, +1.0])
    mesher = dfm2.Mesher_Cad2D(edge_length=0.1)
    mesh = mesher.meshing(cad)
    pbd1(cad, mesh)

    pbd_cloth()

    cad = dfm2.Cad2D()
    cad.add_polygon(list_xy=[-1, -0.2, +1, -0.2, +1, +0.2, -1, +0.2])
    mesher = dfm2.Mesher_Cad2D(edge_length=0.05)
    msh2 = mesher.meshing(cad)
    femShellPlateBendingMitc3_Static(cad, mesher, msh2)
    femShellPlateBendingMitc3_Eigen(msh2)
    #  return

    msh25 = dfm2.Mesh()
    msh25.set_extrude(msh2, 1)
    msh25.np_pos[:, 2] *= 0.05
    femSolidLinear_Eigen(msh25)
예제 #7
0
파일: test_cad.py 프로젝트: umet55/delfem2
 def test1(self):
   cad = dfm2.Cad2D()
   cad.add_polygon([-1,-1, +1,-1, +1,+1, -1,+1])
   assert cad.ccad.ind_vtx_face(0) == [0,1,2,3]
   assert cad.ccad.ind_edge_face(0) == [(0,True),(1,True),(2,True),(3,True)]
   assert cad.ccad.check()
   ####
   cad.add_vtx_edge(0,[0.0,0.0])
   assert cad.ccad.check()
   assert cad.ccad.ind_vtx_face(0) == [0,4,1,2,3]
   assert cad.ccad.ind_edge_face(0) == [(0,True),(4,True),(1,True),(2,True),(3,True)]
예제 #8
0
파일: test_cad.py 프로젝트: umet55/delfem2
 def test3(self):
   cad = dfm2.Cad2D()
   cad.add_polygon(list_xy=[-1,-1, +1,-1, +1,+1, -1,+1])
   mesher = dfm2.Mesher_Cad2D(edge_length=0.05)
   dmsh = mesher.meshing(cad)
   assert dmsh.np_pos.shape[1] == 2
   np_xy_bound = numpy.array(cad.ccad.xy_vtxctrl_face(0)).reshape([-1, 2])
   W = dfm2.mvc(dmsh.np_pos, np_xy_bound)
   assert W.ndim == 2
   assert W.shape[0] == dmsh.np_pos.shape[0]
   assert W.shape[1] == len(cad.ccad.xy_vtxctrl_face(0))/2
   assert numpy.linalg.norm(W.sum(axis=1)-numpy.ones((W.shape[0])))<1.0e-3
예제 #9
0
 def test1(self, request):
     cad = dfm2.Cad2D()
     cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, +1, -1, +1])
     mesher = dfm2.Mesher_Cad2D(edge_length=0.05)
     msh = mesher.meshing(cad)
     fem = dfm2.FEM_SolidLinearDynamic()
     fem.param_gravity_y = -0.1
     fem.updated_topology(msh)
     npIdP = cad.points_edge([3], msh.np_pos)
     fem.ls.bc[npIdP, :] = 1
     ##
     field = dfm2.gl.VisFEM_ColorContour(fem, name_disp="vec_val")
     if request.config.getoption('--is_gl') == "true":
         dfm2.gl.glfw.winDraw3d([fem, field], nframe=100)
예제 #10
0
 def test1(self, request):
     cad = dfm2.Cad2D()
     cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, +1, -1, +1])
     mesher = dfm2.Mesher_Cad2D(edge_length=0.05)
     msh = mesher.meshing(cad)
     fem = dfm2.FEM_ScalarPoisson(source=1.0)
     fem.updated_topology(msh)
     npIdP = cad.points_edge([0, 1, 2, 3], msh.np_pos)
     fem.ls.bc[npIdP] = 1
     fem.solve()
     ##
     field = dfm2.gl.VisFEM_ColorContour(fem, "value")
     if request.config.getoption('--is_gl') == "true":
         dfm2.gl.glfw.winDraw3d([field], nframe=10)
예제 #11
0
    def __init__(self):
        super(QWindow_Cad2D, self).__init__()

        self.cad = dfm2.Cad2D()
        self.cad.add_polygon([-1, -1, +1, -1, +1, +1, -1, +1])

        self.glWidget = dfm2.qt.QGLW_Cad2D()
        self.glWidget.cadobj = self.cad

        mainLayout = QVBoxLayout()
        mainLayout.addWidget(self.glWidget)
        self.setLayout(mainLayout)

        self.setWindowTitle("CAD")
예제 #12
0
파일: test_pyqt.py 프로젝트: goto-c/delfem2
 def events():
     nonlocal icnt, gui
     if icnt == 10:
         gui.cadobj = dfm2.Cad2D()
         gui.cadobj.add_polygon([-1, -1, +1, -1, +1, +1, -1, +1])
     if icnt == 20:
         gui.cadobj.pick(-1, +1, view_height=2)
         assert gui.cadobj.ivtx_picked() == 3
     if icnt > 20 and icnt < 30:
         gui.cadobj.motion([-1, +1, 0], [-1 - (icnt - 20) * 0.02, +1, 0],
                           [0, 0, 1])
     if icnt == 30:
         gui.close()
     icnt += 1
     gui.update()
예제 #13
0
def example1():
    cad = dfm2.Cad2D()
    cad.add_polygon([-1, -1, +1, -1, +1, +1, -1, +1.0])
    mesher = dfm2.Mesher_Cad2D(edge_length=0.05)
    mesh = mesher.meshing(cad)

    fem = dfm2.FEM_ShellCloth()
    fem.updated_topology(mesh)
    npIdP = cad.points_edge([2], mesh.np_pos)
    fem.ls.bc[npIdP, 0:3] = 1
    fem.sdf = dfm2.CppSDF3_Sphere(0.55, [0, +0.5, -1.0], True)

    mesh2 = dfm2.Mesh(np_pos=fem.vec_val, np_elm=mesh.np_elm)
    axis = dfm2.gl.AxisXYZ(1.0)
    dfm2.gl.glfw.winDraw3d([fem, mesh2, axis, fem.sdf])
예제 #14
0
def main_CppMeshDynTri2D_1():
  cad = dfm2.Cad2D()
  cad.add_polygon([-1, -1, +1, -1, +1, +1, -1, +1.0])
  mesher = dfm2.Mesher_Cad2D(edge_length=0.1)
  dmesh = mesher.meshing(cad)
  cdmesh = dmesh.cdmsh
  cdmesh.check()
  for itr in range(100):
    itri0 = random.randint(0,cdmesh.ntri()-1)
    r0 = random.uniform(0.02, 0.98)
    r1 = random.uniform(0.01, 0.99-r0)
    ipo= cdmesh.insert_point_elem(itri0,r0,r1)
    cdmesh.delaunay_around_point(ipo)
    cdmesh.check()
  dfm2.gl.glfw.winDraw3d([cdmesh],winsize=(400,300))
예제 #15
0
 def test1(self, request):
     cad = dfm2.Cad2D()
     cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, +1, -1, +1])
     ####
     mesher = dfm2.Mesher_Cad2D(edge_length=0.05)
     msh = mesher.meshing(cad)
     fem = dfm2.FEM_ShellCloth()
     fem.updated_topology(msh)
     npIdP = cad.points_edge([2], msh.np_pos)
     fem.ls.bc[npIdP, 0:3] = 1
     ####
     mesh2 = dfm2.Mesh(np_pos=fem.vec_val, np_elm=msh.np_elm)
     axis = dfm2.gl.AxisXYZ(1.0)
     if request.config.getoption('--is_gl') == "true":
         dfm2.gl.glfw.winDraw3d([fem, mesh2, axis], nframe=100)
예제 #16
0
파일: test_msh.py 프로젝트: umet55/delfem2
 def test1(self, request):
     cad = dfm2.Cad2D()
     cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, +1, -1, +1])
     mesher = dfm2.Mesher_Cad2D(edge_length=0.08)
     mesh = mesher.meshing(cad)
     dmesh = dfm2.CppMeshDynTri3D()
     dfm2.meshdyntri3d_initialize(dmesh, mesh.np_pos, mesh.np_elm)
     dmesh.check()
     for itr in range(100):
         itri0 = random.randint(0, dmesh.ntri() - 1)
         r0 = random.uniform(0.02, 0.98)
         r1 = random.uniform(0.01, 0.99 - r0)
         ipo = dmesh.insert_point_elem(itri0, r0, r1)
         dmesh.delaunay_around_point(ipo)
         dmesh.check()
     if request.config.getoption('--is_gl') == "true":
         dfm2.gl.glfw.winDraw3d([dmesh], winsize=(400, 300), nframe=10)
예제 #17
0
 def test_pbd_tri(self, request):
     cad = dfm2.Cad2D()
     cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, +1, -1, +1])
     mesher = dfm2.Mesher_Cad2D(edge_length=0.1)
     mesh = mesher.meshing(cad)
     pbd = dfm2.PBD()
     pbd.updated_topology(mesh)
     npIdP = cad.points_edge([0], mesh.np_pos)
     pbd.vec_bc[npIdP] = 1
     fvs = dfm2.FieldValueSetter("0.3*sin(2*t)",
                                 pbd.vec_val,
                                 0,
                                 mesh=mesh,
                                 npIdP=npIdP,
                                 dt=pbd.dt)
     mesh_def = dfm2.Mesh(np_pos=pbd.vec_val, np_elm=mesh.np_elm)
     if request.config.getoption('--is_gl') == "true":
         dfm2.gl.glfw.winDraw3d([fvs, pbd, mesh_def], nframe=100)
예제 #18
0
def pbd_cloth():
    cad = dfm2.Cad2D()
    cad.add_polygon(
        list_xy=[-1, -1, +1, -1, +1, +1, +0.8, +1, -0.8, +1, -1, +1])
    mesher = dfm2.Mesher_Cad2D(edge_length=0.05)
    mesh = mesher.meshing(cad)
    ####
    pbd = dfm2.PBD_Cloth()
    pbd.param_gravity_y = -0.1
    pbd.param_gravity_z = -0.001
    pbd.dt = 0.08
    pbd.updated_topology(mesh)
    npIdP = mesher.points_on_edges([2, 4], cad)
    pbd.bc[npIdP] = 1
    ####
    mesh2 = dfm2.Mesh(np_pos=pbd.vec_val, np_elm=mesh.np_elm)
    axis = dfm2.gl.AxisXYZ(1.0)
    dfm2.gl.glfw.winDraw3d([pbd, mesh2, axis])
예제 #19
0
def femShellCloth():
    cad = dfm2.Cad2D()
    cad.add_polygon(
        list_xy=[-1, -1, +1, -1, +1, +1, +0.8, +1, -0.8, +1, -1, +1])
    mesher = dfm2.Mesher_Cad2D(edge_length=0.05)
    mesh = mesher.meshing(cad)
    ####
    fem = dfm2.FEM_ShellCloth()
    fem.dt = 0.08
    fem.lmd = 1000
    fem.myu = 100
    fem.gravity = (0, -1, 0.01)
    fem.updated_topology(mesh)
    npIdP = cad.points_edge([2, 4], mesh.np_pos)
    fem.ls.bc[npIdP, 0:3] = 1
    ####
    mesh2 = dfm2.Mesh(np_pos=fem.vec_val, np_elm=mesh.np_elm)
    axis = dfm2.gl.AxisXYZ(1.0)
    dfm2.gl.glfw.winDraw3d([fem, mesh2, axis])
예제 #20
0
def main_MeshDynTri2D_3():
  cad = dfm2.Cad2D()
  cad.add_polygon(list_xy=[-1,-1, +1,-1, +1,+1, -1,+1])
  mesher = dfm2.Mesher_Cad2D(edge_length=0.05)
  dmsh = mesher.meshing(cad)
  fem = dfm2.FEM_ShellCloth()
  fem.updated_topology(dmsh)
  npIdP = cad.points_edge([0], dmsh.np_pos)
  fem.ls.bc[npIdP,:] = 1
  mesh2 = dfm2.Mesh(np_pos=fem.vec_val,np_elm=dmsh.np_elm)
  dfm2.gl.glfw.winDraw3d([fem,mesh2])
  #####
  mesh2 = None
  mapper = dmsh.refine_EdgeLongerThan_InsideCircle(0.05, 0.0,0.0,0.5)
  fem.updated_topology(dmsh,mapper=mapper)
  fem.ls.bc[npIdP,:] = 1
  mesh2 = dfm2.Mesh(np_pos=fem.vec_val,np_elm=dmsh.np_elm)
  dfm2.gl.glfw.winDraw3d([fem,mesh2])
  '''  
예제 #21
0
파일: test_cad.py 프로젝트: umet55/delfem2
 def test2(self):
   cad = dfm2.Cad2D()
   cad.add_polygon(list_xy=[-1,-1, +1,-1, +1,+1, -1,+1])
   assert cad.ccad.check()
   ####
   cad.pick(-1,-1, 2.0)
   assert cad.ivtx_picked() == 0 
   assert cad.iedge_picked() == -1 
   assert cad.iface_picked() == -1 
   ####
   cad.pick(+0,-1, 2.0)
   assert cad.ivtx_picked() == -1 
   assert cad.iedge_picked() == 0 
   assert cad.iface_picked() == -1 
   ####
   cad.pick(-0.1432143,-0.1653542343, 2.0)
   assert cad.ivtx_picked() == -1 
   assert cad.iedge_picked() == -1 
   assert cad.iface_picked() == 0 
예제 #22
0
 def test1(self, request):
     cad = dfm2.Cad2D()
     cad.add_polygon(list_xy=[-1, -1, +1, -1, +1, +1, -1, +1])
     mesher = dfm2.Mesher_Cad2D(edge_length=0.05)
     msh = mesher.meshing(cad)
     fem = dfm2.FEM_FluidStorksStatic(msh)
     npIdP0 = cad.points_edge([0, 1, 2, 3], msh.np_pos)
     fem.ls.bc[npIdP0, 0:2] = 1
     npIdP1 = cad.points_edge([2], msh.np_pos)
     fem.vec_val[npIdP1, 0] = 1.0
     fem.solve()
     ####
     field_p = dfm2.gl.VisFEM_ColorContour(fem,
                                           name_color="vec_val",
                                           idim=2)
     field_p.set_color_minmax()
     field_v = dfm2.gl.VisFEM_Hedgehog(fem, name_vector="vec_val")
     axis = dfm2.gl.AxisXYZ(1.0)
     if request.config.getoption('--is_gl') == "true":
         dfm2.gl.glfw.winDraw3d([field_p, field_v, axis], nframe=10)
예제 #23
0
def main_MeshDynTri2D_2():
  cad = dfm2.Cad2D()
  cad.add_polygon([-1,-1, +1,-1, +1,+1, -1,+1])
  mesher = dfm2.Mesher_Cad2D(edge_length=0.05)
  dmsh = mesher.meshing(cad)
  ####
  fem = dfm2.FEM_ScalarPoisson(source=1.0)
  fem.updated_topology(dmsh)
  npIdP = cad.points_edge([0,1,2,3], dmsh.np_pos)
  fem.value[npIdP] = 0.0
  fem.ls.bc[npIdP] = 1
  fem.solve()
  vis = dfm2.gl.VisFEM_ColorContour(fem,name_color="value")
  dfm2.gl.glfw.winDraw3d([vis,dmsh])
  #####
  mapper = dmsh.refine_EdgeLongerThan_InsideCircle(0.05, 0.0,0.0,0.5)
  fem.updated_topology(dmsh,mapper=mapper)
  dfm2.gl.glfw.winDraw3d([vis,dmsh])
  #####
  fem.value[npIdP] = 0.0
  fem.ls.bc[npIdP] = 1
  fem.solve()
  dfm2.gl.glfw.winDraw3d([vis,dmsh])
예제 #24
0
def example1():
  cad = dfm2.Cad2D()
  cad.add_polygon([+0,0, +1,0, +1,+1, 0,+1.0])
  cad.add_polygon([+2,0, +3,0, +3,+1, 2,+1.0])
  mesher = dfm2.Mesher_Cad2D(edge_length=0.03)
  mesh = mesher.meshing(cad)

  ####
  pbd = dfm2.PBD_Cloth()
#  pbd.param_gravity_y = -0.1
  pbd.dt = 0.08
  pbd.updated_topology(mesh)

  trans0 = dfm2.Trans_Rigid2DTo3D()
  trans0.org2 = numpy.array([0.5,0.5])
  trans0.org3 = numpy.array([0.0,0.0,0.5])

  trans1 = dfm2.Trans_Rigid2DTo3D()
  trans1.org2 = numpy.array([2.5,0.5])
  trans1.org3 = numpy.array([0.0,0.0,-0.5])
  trans1.R = dfm2.util.mat3_rot_cartesian(numpy.array([0,3.1415,0]))

  npIndP_Face0 = mesher.points_on_faces([0],cad)
  pbd.vec_val[npIndP_Face0] = trans0.trans(pbd.dmsh.np_pos[npIndP_Face0])

  npIndP_Face1 = mesher.points_on_faces([1],cad)
  pbd.vec_val[npIndP_Face1] = trans1.trans(pbd.dmsh.np_pos[npIndP_Face1])

  npIndP_Edge0a = mesher.points_on_one_edge(1,True,cad)
  npIndP_Edge0b = mesher.points_on_one_edge(7,True,cad)
  npIndP_Seam0 = numpy.vstack([npIndP_Edge0a,npIndP_Edge0b[::-1]]).transpose()

  npIndP_Edge1a = mesher.points_on_one_edge(3,True,cad)
  npIndP_Edge1b = mesher.points_on_one_edge(5,True,cad)
  npIndP_Seam1 = numpy.vstack([npIndP_Edge1a,npIndP_Edge1b[::-1]]).transpose()

  pbd.elems_seam = numpy.vstack([npIndP_Seam0,npIndP_Seam1]).copy().astype(numpy.uint32) # to allign data

  mesh2 = dfm2.Mesh(np_pos=pbd.vec_val,np_elm=mesh.np_elm)
  mesh3 = dfm2.Mesh(np_pos=pbd.vec_val, np_elm=pbd.elems_seam, elem_type=dfm2.LINE)

  pbd.sdf = dfm2.SDF()
  pbd.sdf.add( dfm2.CppSDF3_Sphere(0.3, [0.0, 0.0, 0.0], True) )

  axis = dfm2.gl.AxisXYZ(1.0)
  dfm2.gl.glfw.winDraw3d([pbd,pbd.sdf,mesh2,mesh3,axis])

  #########

  msh_trg = dfm2.Mesh()
  msh_trg.set_sphere(0.3, 16, 16)

  pbd.sdf = dfm2.Collider_PointsToMeshTri3D()
  pbd.sdf.set_mesh(msh_trg)

  dfm2.gl.glfw.winDraw3d([pbd,pbd.sdf,mesh2,mesh3,msh_trg,axis])

  #########

  gltf = PyDelFEM2.CppGLTF()
  gltf.read("../test_inputs/CesiumMan.glb")

  np_pos0, np_elm, np_rigw, np_rigj = dfm2.CppGLTF_GetMeshInfo(gltf, 0, 0)
  np_pos = np_pos0.copy()
  bones = dfm2.CppGLTF_GetBones(gltf,0)
  bones.set_rotation_bryant(0, [-3.1415 * 0.5, 0.0, 0.0])
  bones.set_translation(0, [0.0, 0.0, +0.2])
  dfm2.update_rig_skin(np_pos,
                       np_pos0, np_elm, bones, np_rigw, np_rigj)
  msh_trg = dfm2.Mesh(np_pos,np_elm,dfm2.TRI)

  pbd.sdf = dfm2.Collider_PointsToMeshTri3D()
  pbd.sdf.set_mesh(msh_trg)

  dfm2.gl.glfw.winDraw3d([pbd,pbd.sdf,mesh2,mesh3,msh_trg,axis], winsize=(400, 300))