blender瞎玩3_自制曲线布尔的笨方法

来源:设酷网     作者:日期:2020-08-28     浏览:144    评论:0    
  
核心提示:(1)软件功能总是不够完善啊,今天来羡慕什么软件呢?就羡慕一下3dcoat的体素切割吧!一个字形容,那就是爽blen的雕刻功能已经很强了,但是却没有好的切割方法,也许有但是我不知道?希望有人告知(2)总之进入正题 老外做了个可以用gpencil切割的插件,Flow Tools,里面甚


(1)


软件功能总是不够完善啊,今天来羡慕什么软件呢?就羡慕一下3dcoat的体素切割吧!

一个字形容,那就是爽


blen的雕刻功能已经很强了,但是却没有好的切割方法,也许有但是我不知道?希望有人告知




(2)


总之进入正题

老外做了个可以用gpencil切割的插件,Flow Tools,里面甚至还有z球,不过我的2.81并不能运行这个插件,最近他也不更新了,这就叫靠山山倒吗?

然后,经过两天查询指令,我组合出了一个简陋版切割工具,因为原理是布尔,所以我就起了个听起来很牛逼的名字,曲线布尔工具v1.01版


看看效果

再放几张



目前还有很多问题,比如操作很麻烦,只在正交模式效果凑合,而且老切不干净,用作差集的面也老是删不掉,还老是丢失切面。

不过嘛,whatever!我又不会编程!懒得改bug!

开玩笑的,以后学明白了大概会改,大概




(3)


说说思路吧,首先是添加用于布尔的曲线


代码如下:


tempempty = bpy.context.object.name #把要切割的物体的名称保存

bpy.context.object.name = 'obj_bool' #然后改为一个固定名称

bpy.ops.object.empty_add(type='PLAiN_AXES', location=(0, 0, 0))

bpy.context.object.name = tempempty+'_temp' #创建一个空物体用于保存名称


bpy.ops.curve.primitive_bezier_curve_add(radius=1, enter_editmode=False, location=(0, 0, 0))

bpy.ops.object.editmode_toggle()

bpy.ops.curve.delete(type='VERT') #添加曲线并删除所有点


为啥要保存名称呢?因为我找了半天也找不到‘怎么在两个脚本之间传递名称’的方法


注意】顺便说一句,python代码似乎不能有任何中文,注释也不能是中文,具体怎么改中文,请自行百度




(4)


第二组代码创建用于布尔的物体,在用自由线或其他工具创建曲线后执行以下代码


bpy.ops.curve.cyclic_toggle() #切换曲线是否循环

bpy.ops.object.editmode_toggle()

bpy.ops.object.convert(tARget='MESH') #曲线转化为mesh

bpy.ops.object.editmode_toggle()

bpy.ops.mesh.select_mode(use_extend=False, use_expand=False, type='VERT')

bpy.ops.mesh.select_all(action='SELECT')

bpy.ops.mesh.fill() #填充这个封闭区域


# Extrude a long distance    #沿法线方向挤出一次

bpy.ops.mesh.extrude_region_shrink_fatten(MESH_OT_extrude_region={"use_normal_flIP":False, "mirror":False}, TRANSFORM_OT_shrink_fatten={"value":1000, "use_even_offset":False, "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_tARget":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "release_/confirm/i":True, "use_accurate":False})

bpy.ops.mesh.select_all(action='INVERT')    #沿反方向再挤出一次

bpy.ops.mesh.extrude_region_shrink_fatten(MESH_OT_extrude_region={"use_normal_flip":False, "mirror":False}, TRANSFORM_OT_shrink_fatten={"value":1000, "use_even_offset":False, "mirror":False, "use_proportional_edit":False, "proportional_edit_falloff":'SMOOTH', "proportional_size":1, "use_proportional_connected":False, "use_proportional_projected":False, "snap":False, "snap_tARget":'CLOSEST', "snap_point":(0, 0, 0), "snap_align":False, "snap_normal":(0, 0, 0), "release_/confirm/i":True, "use_accurate":False})

bpy.ops.object.editmode_toggle()


# Rename

bpy.context.object.name = 'obj_remove' #将差集物体命名为一个固定名称

remove1 = bpy.data.objects['obj_remove']

bool1 = bpy.data.objects['obj_bool'] #这一行用到了之前的名称


# Select obj_bool and do Boolean    #执行布尔运算

bool1.select_set(True)

bpy.context.view_layer.objects.active = bool1

bpy.ops.object.modifier_add(type='BOOLEAN')

bpy.context.object.modifiers["Boolean"].operation = 'DIFFERENCE'

bpy.context.object.modifiers["Boolean"].object = bpy.data.objects['obj_remove']

bpy.ops.object.modifier_APPly(APPly_as='DATA', modifier="Boolean")

bool1.select_set(False)


# Delete obj_remove     #删除差集物体

remove1.select_set(True)

bpy.context.view_layer.objects.active = remove1

bpy.ops.object.delete(use_global=False, confirm=False)


# Rename again      #恢复之前保存的名称

bool1.select_set(True)

bpy.context.view_layer.objects.active = bool1

for i in bpy.context.visible_objects:

    if '_temp' in i.name:

        bpy.context.object.name = i.name.replace('_temp', '')



bool1.select_set(False)

for i in bpy.context.visible_objects:

    if '_temp' in i.name:

        i.select_set(True)

        bpy.context.view_layer.objects.active = i

        bpy.ops.object.delete(use_global=False, confirm=False)  #删除用于保存名称的空物体


bool1.select_set(True)

bpy.context.view_layer.objects.active = bool1




(5)


我把这个功能加入了我自制的热盒

以下为操作流程


[1]下图,选择物体

[2]下图,shift+中键打开热盒,我把它放在了“上”方向。图标都没改,其他7个方向的功能也还没完善,不过不要在意那些细节

[3]下图,场景产生了一个空曲线和一个空物体,并且被切割物体改名了

[4]下图,这时用上面两种曲线工具绘制曲线

下图,比如我用了自由线工具

[5]下图,在编辑模式按shift+鼠标中键唤出另一个热盒,功能还是在“上”方向

[6]下图,最后得到这个结果





(6)


虽然代码不完善,不过我还是贴上来以供参考

和上次一样,还是放在2.81/scripts/addons/space_view3d_pie_menus里

记得覆盖或者修改你的代码之前备份

本文来源:blender瞎玩3_自制曲线布尔的笨方法    http://www.sjschina.com/archives/20845.html
相关评论