我的目标是在长矩形区域上获得转换映射四边形网格,这是一个参数化模型。最终的网格可以看作如下:
我能够实现这个最终输出网格的唯一方法是使用草图分割面部,然后使用适当的网格控制并在相应边缘上进行种子设定。出于这个原因,我开始在几何体的左侧生成一个块,如下所示:
此后,在Python脚本中使用了一个“for”循环,从矩形面的左侧到最右端,最后的分区面看起来像这样:
所以,我尝试过三种方式。
选项1:使用左侧的findAt放置草绘器窗口,然后生成块并使用“for”循环将草绘器窗口坐标系的原点向右逐渐推送到右侧最重要的一面。换句话说,块相对于原点的位置总是保持相同,因此,当原点从左向右移动时,块随之移动。所以我不得不打开和关闭“Partition Face with Sketch”和所需的块数一样多次。
选项2:“草绘器”窗口的原点保持在同一位置(即0.0,0.0,0.0),并且块以递增方式向右推动。与选项1相比,此处块相对于原点的相对位置在每个增量上改变。此处,“分区面与草图”打开并关闭所需的块数。
选项3:我只打开了一次“带草图的分区面”并且原点停留在同一个地方。然后我用“for”循环绘制所有这些水平和垂直线,得到最后的分区面。
所有这些方法都很完美,但非常耗时。这些方法中的每一种都需要大约8-12分钟来完成所有块的生成,因此不适合进行收敛性研究。
任何人都可以提出更好的解决方案,让整个过程更快,比如3-4分钟左右?真的很感激。提前谢谢。
编辑:这是代码人员:# The arguments of the function "block" are the x and y coordinates of the
# 4 corners of the rectangle where the blocks have to be generated in.
def block(x_left, x_right, y_top, y_bottom):
# Opens the sketcher window
p = mdb.models['TDCB'].parts['Part_TDCB']
f, e, d = p.faces, p.edges, p.datums
t = p.MakeSketchTransform(sketchPlane=f.findAt(coordinates=(x_left + ((x_right - x_left) / 3), y_bottom + ((y_top - y_bottom) / 3), 0.0),
normal=(0.0, 0.0, 1.0)), sketchPlaneSide=SIDE1, origin=(x_left, y_bottom, 0.0))
s = mdb.models['TDCB'].ConstrainedSketch(name='__profile__', sheetSize=500.00,
gridSpacing=12.00, transform=t)
g, v, d1, c = s.geometry, s.vertices, s.dimensions, s.constraints
s.setPrimaryObject(option=SUPERIMPOSE)
p.projectReferencesOntoSketch(sketch=s, filter=COPLANAR_EDGES)
# The following block generates the first couple of horizontal lines
s.Line(point1=(block_width, 0.0), point2=(block_width, y_top)) # Line No.1
s.Line(point1=(0.0, y_coord[-2]), point2=(block_width, y_coord[-2])) # Line No.2
s.Line(point1=(0.0, y_coord[-3]), point2=(block_width, y_coord[-3])) # Line No.3
s.Line(point1=(0.0, y_coord[-4]), point2=(block_width, y_coord[-4])) # Line No.4
s.Line(point1=(0.0, y_coord[-5]), point2=(block_width, y_coord[-5])) # Line No.5
s.Line(point1=(0.0, y_coord[-6]), point2=(block_width, y_coord[-6])) # Line No.6
# Closes the sketcher window
p = mdb.models['TDCB'].parts['Part_TDCB']
f = p.faces
pickedFaces = f.findAt((x_left + ((x_right - x_left) / 3), y_bottom + ((y_top - y_bottom) / 3), 0.0))
e1, d2 = p.edges, p.datums
p.PartitionFaceBySketch(faces=pickedFaces, sketch=s)
s.unsetPrimaryObject()
del mdb.models['TDCB'].sketches['__profile__']
return
# Finally the blocks are generated using a "for" loop
for i in range(total_blocks):
block(x_left, x_right, y_top, y_bottom)
答案 0 :(得分:0)
看起来你不必像在ABAQUS Sketch中那样迭代草图绘制过程,你可以使用线性模式来复制/复制初始草图(左侧的第一个块)。这可能使整个过程更容易。感谢。
此致 龙杰