Hello @conpierce8,
I have a question about fusing the surfaces again,
Here I translate my mesh and I want to fuse it with the previous one and name it main_geometry again,
my trial is not working. I would like to hear if you have any idea. Thanks!
Here is my code:
def createGeometryAndMesh(a, b, c, aa, d2, e, f, g, h, j, k, lc):
# Clear all models and create a new one
gmsh.initialize()
gmsh.clear()
gmsh.model.add("t3")
# in units mm
# cube points:
def geopoints(dx, dy, surf_point):
P1 = gmsh.model.occ.addPoint(scale *b + dx, 0+dy, 0, lc)
P2 = gmsh.model.occ.addPoint(scale *b + dx, scale *g+dy, 0, lc)
P3 = gmsh.model.occ.addPoint(0+ dx,scale * m +scale * (h - 5.3) +dy, 0, lc)
P4 = gmsh.model.occ.addPoint(0+ dx, scale *e + scale *(h - 5.3)+dy, 0, lc)
P5 = gmsh.model.occ.addPoint(0+ dx,scale * e +scale * f + scale *(h - 5.3)+dy, 0, lc)
P6 = gmsh.model.occ.addPoint(scale * a+ dx, scale *h+dy, 0, lc)
P7 = gmsh.model.occ.addPoint(scale *a+ dx + scale *1.5 * f / 3, scale *h +scale * 2.5 * f / 3 +dy, 0, lc)
P8 = gmsh.model.occ.addPoint(scale *a+ dx + scale *0.95, scale *k+dy, 0, lc)
P9 = gmsh.model.occ.addPoint(scale *a+ dx + scale *1.05, scale *k+dy, 0, lc)
P10 = gmsh.model.occ.addPoint(scale *b+ dx + scale *c, scale * k+dy, 0, lc)
P11 = gmsh.model.occ.addPoint(scale *0+ dx, scale *aa +scale * d2+dy, 0, lc)
# P12 = gmsh.model.occ.addPoint(0.5, aa + d2 + 2 * j, 0, lc)
# P13 = gmsh.model.occ.addPoint(0.5, 10, 0, lc)
P14 = gmsh.model.occ.addPoint(-scale *b+ dx, 0+dy, 0, lc)
P15 = gmsh.model.occ.addPoint(-scale *b+ dx, scale *g+dy, 0, lc)
P17 = gmsh.model.occ.addPoint(-scale *a+ dx, scale *h+dy, 0, lc)
P18 = gmsh.model.occ.addPoint(-scale *a -scale * 1.5 * f / 3+ dx, scale *h +scale * 2.5 * f / 3+dy, 0, lc)
P19 = gmsh.model.occ.addPoint(-scale *a -scale * 0.95 + dx, scale *k+dy, 0, lc)
P20 = gmsh.model.occ.addPoint(-scale *a - scale *1.05 + dx, scale *k+dy, 0, lc)
P21 = gmsh.model.occ.addPoint(-scale *b - scale *c + dx, scale *k+dy, 0, lc)
# P23 = gmsh.model.occ.addPoint(-0.5, aa + d2 + 2 * j, 0, lc)
# P24 = gmsh.model.occ.addPoint(-0.5, 10, 0, lc)
# P25 = gmsh.model.occ.addPoint(1.55 + j / 2 + d2 / 2, 8.1 + j + d2 + (k - 7) / 2, 0, lc) # depends on k??
# P26 = gmsh.model.occ.addPoint(-1.55 - j / 2 - d2 / 2, 8.1 + j + d2 + (k - 7) / 2, 0, lc)
# spline points
P27 = gmsh.model.occ.addPoint(scale *a + scale *0.95 + dx, scale *k + scale *j+dy, 0, lc)
P28 = gmsh.model.occ.addPoint(-scale *a - scale *0.95 + dx, scale *k + scale *j+dy, 0, lc)
P29 = gmsh.model.occ.addPoint(scale *a + scale *1.05+ dx, scale *k +scale * 2 * j+dy,0, lc)
P30 = gmsh.model.occ.addPoint(-scale *a - scale *1.05+ dx, scale *k +scale * 2 * j+dy, 0, lc)
# spline points and rectangular
P31 = gmsh.model.occ.addPoint(scale *0.3+ dx, scale *aa +scale * d2+dy, 0, lc)
P32 = gmsh.model.occ.addPoint(-scale *0.3+ dx, scale *aa +scale * d2+dy, 0, lc)
P33 = gmsh.model.occ.addPoint(-scale *0.3+ dx,scale * 10+dy, 0, lc)
P34 = gmsh.model.occ.addPoint(scale *0.3+ dx,scale * 10+dy, 0, lc)
P35 = gmsh.model.occ.addPoint(scale *0+ dx, scale *aa +scale * d2 + scale *j+dy, 0, lc)
L1 = gmsh.model.occ.addLine(P14, P1)
L2 = gmsh.model.occ.addLine(P1, P2)
L3 = gmsh.model.occ.addLine(P14, P15)
L4 = gmsh.model.occ.addLine(P2, P10)
L5 = gmsh.model.occ.addLine(P15, P21)
L6 = gmsh.model.occ.addLine(P3, P6)
L7 = gmsh.model.occ.addLine(P3, P17)
L8 = gmsh.model.occ.addLine(P7, P8)
L9 = gmsh.model.occ.addLine(P18, P19)
L10 = gmsh.model.occ.addLine(P10, P9)
L11 = gmsh.model.occ.addLine(P21, P20)
# L12 = gmsh.model.occ.addLine(P24, P13)
# L13 = gmsh.model.occ.addLine(P12, P13)
# L14 = gmsh.model.occ.addLine(P23, P24)
L20 = gmsh.model.occ.addLine(P19, P28)
L21 = gmsh.model.occ.addLine(P20, P30)
L22 = gmsh.model.occ.addLine(P8, P27)
L23 = gmsh.model.occ.addLine(P9, P29)
L24 = gmsh.model.occ.addLine(P32, P31)
L25 = gmsh.model.occ.addLine(P31, P34)
L26 = gmsh.model.occ.addLine(P34, P33)
L27 = gmsh.model.occ.addLine(P33, P32)
L15 = gmsh.model.occ.addSpline([P6, P4, P17])
L16 = gmsh.model.occ.addSpline([P7, P5, P18])
L17 = gmsh.model.occ.addSpline([P27, P11, P28])
# L18 = gmsh.model.occ.addSpline([P29, P25, P12])
# L19 = gmsh.model.occ.addSpline([P30, P26, P23])
L28 = gmsh.model.occ.addSpline([P30, P35, P29])
Curve1 = gmsh.model.occ.addCurveLoop([L28, -L23, -L10, -L4, -L2, -L1, L3, L5, L11, L21])
Curve2 = gmsh.model.occ.addCurveLoop([L17, -L20, -L9, -L16, L8, L22])
Curve3 = gmsh.model.occ.addCurveLoop([L7, -L15, -L6])
Curve4 = gmsh.model.occ.addCurveLoop([L27, L24, L25, L26])
Surface1 = gmsh.model.occ.addPlaneSurface([Curve1], 1 + surf_point)
Surface2 = gmsh.model.occ.addPlaneSurface([Curve2], 2 + surf_point)
Surface3 = gmsh.model.occ.addPlaneSurface([Curve3], 3 + surf_point)
Surface4 = gmsh.model.occ.addPlaneSurface([Curve4], 4 + surf_point)
return Surface1, Surface2, Surface3, Surface4
Surface1, Surface2, Surface3, Surface4 = geopoints(0, 0, 100)
###############################
fuse1 = gmsh.model.occ.fuse([(2, Surface1)], [(2, Surface4)])
print("fuse1")
print(fuse1, "\n")
diff1 = gmsh.model.occ.cut(fuse1[0], [(2, Surface3)])
print(diff1, "\n")
frag1 = gmsh.model.occ.fragment(diff1[0], [(2, Surface2)])
print(frag1[1][-1])
print("fraggg1111")
print(frag1)
filled_entities = frag1[1][-1]
main_entities = frag1[0].copy()
print("qqqqqqqqqqqqmainentities1")
print(main_entities)
print(filled_entities)
for entity in filled_entities:
if entity in main_entities:
main_entities.remove(entity)
print(" ", main_entities, "\n")
print(entity[1])
# Synchronize the CAD model
gmsh.model.occ.synchronize()
print("entity111111")
print(entity[1])
# Create physical groups
pg1 = gmsh.model.addPhysicalGroup(2, [entity[1] for entity in main_entities])
gmsh.model.setPhysicalName(2, pg1, "main_geometry")
pg2 = gmsh.model.addPhysicalGroup(2, [entity[1] for entity in filled_entities])
gmsh.model.setPhysicalName(2, pg2, "filled_geometry")
pg10, pg20 = pg1, pg2
# Set mesh size at all points
gmsh.model.mesh.setSize(gmsh.model.getEntities(0), lc)
gmsh.model.occ.synchronize()
###############################
Surface1, Surface2, Surface3, Surface4 = geopoints(0, 10, 200)
fuse1 = gmsh.model.occ.fuse([(2, Surface1)], [(2, Surface4)])
print(fuse1, "\n")
diff1 = gmsh.model.occ.cut(fuse1[0], [(2, Surface3)])
print(diff1, "\n")
frag1 = gmsh.model.occ.fragment(diff1[0], [(2, Surface2)])
print(frag1[1][-1])
print(frag1)
filled_entities = frag1[1][-1]
main_entities = frag1[0].copy()
print(main_entities)
print(filled_entities)
for entity in filled_entities:
if entity in main_entities:
main_entities.remove(entity)
print(" ", main_entities, "\n")
print(entity[1])
# Synchronize the CAD model
gmsh.model.occ.synchronize()
print(entity[1])
# Create physical groups
pg1 = gmsh.model.addPhysicalGroup(2, [entity[1] for entity in main_entities])
gmsh.model.setPhysicalName(2, pg1, "main_geometry2")
pg2 = gmsh.model.addPhysicalGroup(2, [entity[1] for entity in filled_entities])
gmsh.model.setPhysicalName(2, pg2, "filled_geometry2")
# Set mesh size at all points
gmsh.model.mesh.setSize(gmsh.model.getEntities(0), lc)
gmsh.model.occ.synchronize()
#fuse2 = gmsh.model.occ.fuse([(2, pg1)], [(2, pg10)])
# Set mesh size at all points
gmsh.model.mesh.setSize(gmsh.model.getEntities(0), lc)
gmsh.model.occ.synchronize()
###############################
Surface1, Surface2, Surface3, Surface4 = geopoints(10, 10, 300)
fuse1 = gmsh.model.occ.fuse([(2, Surface1)], [(2, Surface4)])
print(fuse1, "\n")
diff1 = gmsh.model.occ.cut(fuse1[0], [(2, Surface3)])
print(diff1, "\n")
frag1 = gmsh.model.occ.fragment(diff1[0], [(2, Surface2)])
print(frag1[1][-1])
print(frag1)
filled_entities = frag1[1][-1]
main_entities = frag1[0].copy()
print(main_entities)
print(filled_entities)
for entity in filled_entities:
if entity in main_entities:
main_entities.remove(entity)
print(" ", main_entities, "\n")
print(entity[1])
# Synchronize the CAD model
gmsh.model.occ.synchronize()
print(entity[1])
# Create physical groups
pg1 = gmsh.model.addPhysicalGroup(2, [entity[1] for entity in main_entities])
gmsh.model.setPhysicalName(2, pg1, "main_geometry2")
pg2 = gmsh.model.addPhysicalGroup(2, [entity[1] for entity in filled_entities])
gmsh.model.setPhysicalName(2, pg2, "filled_geometry2")
# Set mesh size at all points
gmsh.model.mesh.setSize(gmsh.model.getEntities(0), lc)
gmsh.model.occ.synchronize()
#fuse2 = gmsh.model.occ.fuse([(2, pg1)], [(2, pg10)])
###############################
Surface1, Surface2, Surface3, Surface4 = geopoints(10, 0, 400)
fuse1 = gmsh.model.occ.fuse([(2, Surface1)], [(2, Surface4)])
print(fuse1, "\n")
diff1 = gmsh.model.occ.cut(fuse1[0], [(2, Surface3)])
print(diff1, "\n")
frag1 = gmsh.model.occ.fragment(diff1[0], [(2, Surface2)])
print(frag1[1][-1])
print(frag1)
filled_entities = frag1[1][-1]
main_entities = frag1[0].copy()
print(main_entities)
print(filled_entities)
for entity in filled_entities:
if entity in main_entities:
main_entities.remove(entity)
print(" ", main_entities, "\n")
print(entity[1])
# Synchronize the CAD model
gmsh.model.occ.synchronize()
print(entity[1])
# Create physical groups
pg1 = gmsh.model.addPhysicalGroup(2, [entity[1] for entity in main_entities])
gmsh.model.setPhysicalName(2, pg1, "main_geometry2")
pg2 = gmsh.model.addPhysicalGroup(2, [entity[1] for entity in filled_entities])
gmsh.model.setPhysicalName(2, pg2, "filled_geometry2")
#fuse2 = gmsh.model.occ.fuse([(2, pg1)], [(2, pg10)])
# Set mesh size at all points
gmsh.model.mesh.setSize(gmsh.model.getEntities(0), lc)
gmsh.model.occ.synchronize()
gmsh.option.setNumber("Mesh.MshFileVersion", 2.2)
gmsh.model.mesh.generate()
gmsh.write("./Result--" + str(commit) + "geoforstl" + ".geo_unrolled")
gmsh.write("./Result--" + str(commit)+ "geo.msh")
# colors:
gmsh.option.setNumber("Geometry.PointNumbers", 1)
gmsh.option.setColor("Geometry.Points", 255, 165, 0)
gmsh.option.setColor("General.Text", 255, 255, 255)
gmsh.option.setColor("Mesh.Points", 255, 0, 0)
# https://gitlab.onelab.info/gmsh/gmsh/blob/master/examples/api/bspline_filling.py
# Note that color options are special: setting a color option of "X.Y"
# actually sets the option "X.Color.Y".
rr, gg, bb, aaa = gmsh.option.getColor("Geometry.Points")
gmsh.option.setColor("Geometry.Surfaces", rr, gg, bb, aaa)
gmsh.onelab.set("""[
{"type":"number",
"name":"Parameters/Twisting angle",
"values":[90],
"min":0,
"max":120,
"step":1}]""")
# Create the geometry and mesh it:
# createGeometryAndMesh(a, b, c, aa, d2, e, f, g, h, j, k, m)
def checkForEvent():
action = gmsh.onelab.getString("ONELAB/Action")
if len(action) and action[0] == "check":
gmsh.onelab.setString("ONELAB/Action", [""])
createGeometryAndMesh()
gmsh.graphics.draw()
return True
# Refine the mesh
gmsh.model.mesh.refine()
gmsh.write("t3.opt");
gmsh.finalize()