コード例 #1
0
    def _create(self, name=None):
        if not name:
            name = np.random.choice(self.names)
        # if exists make a copy else import
        _num_images = len(bpy.data.images)
        _obj = [
            x for x in bpy.data.objects if name.split('.')[0] + '.' in x.name
        ]
        if len(_obj) > 0:
            deselect_all()
            select(_obj[0])
            bpy.ops.object.duplicate_move()
            ind = [
                x.name for x in bpy.data.objects
                if name.split('.')[0] + '.' in x.name
            ]
            return bpy.context.scene.objects[ind[-1]]
        else:
            bpy.ops.import_scene.obj(
                filepath='{}/{}/{}'.format(MODULE_PATH, self.name, name))
            bpy.context.selected_objects[0].name = name.split('.')[0]
            self.mesh = bpy.context.selected_objects[0]
            if not MODULES[self.name]['materials'] or \
              _num_images == len(bpy.data.images):
                self._remove_material()
            self._triangulate()

        return self.mesh  #bpy.context.selected_objects[0]
コード例 #2
0
    def render(self, filename='new_mask_test'):
        """
		Function that performs all the rendering steps: normal render, segmentation
		mask.
		:param filename: name of the file, str
		:return:
		"""

        deselect_all(True)
        bpy.ops.view3d.camera_to_view_selected()
        deselect_all()
        self.mask_tree.connect()
        self._render(filename)

        self._render_mask(filename)
        self.depth_tree.connect()
        bpy.ops.render.render()
        self._render_depth(filename)
        if RENDER_EXR:
            self.depth_tree.connect_root()
            bpy.ops.render.render()
            self._render_exr(filename)
        self.norm_tree.connect()
        bpy.ops.render.render()
        self._render_normals(filename)
コード例 #3
0
    def save(self, filename='test', ext='obj'):
        """
		Function that saves the building as a separate file.
		:param filename: name of the file to write without extension, str,
		default='test'
		:param ext: file extension, str, default='obj'
		:return:
		"""
        deselect_all()
        for v in self.volumes:
            v.mesh.select_set(True)
        if not MODEL_SAVE in os.listdir(file_dir):
            os.mkdir(file_dir + '/' + MODEL_SAVE)
        if ext == 'obj':
            bpy.ops.export_scene.obj(filepath='{}/Models/{}.{}'.format(
                file_dir, filename, ext),
                                     use_selection=False)
        elif ext == 'ply':
            bpy.ops.export_mesh.ply(filepath='{}/{}/{}.{}'.format(
                file_dir, CLOUD_SAVE, filename, ext),
                                    use_selection=False)
            bpy.ops.export_mesh.ply(filepath='{}/{}/{}_p.{}'.format(
                file_dir, CLOUD_SAVE, filename, ext),
                                    use_selection=False)
        else:
            return NotImplementedError
コード例 #4
0
 def demolish(self):
     for _mesh in bpy.data.collections['Building'].objects:
         try:
             deselect_all()
             _mesh.select_set(True)
             bpy.ops.object.delete()
         except Exception:
             pass
コード例 #5
0
 def _nest_camera(self):
     deselect_all()
     bpy.data.collections['Collection'].objects.link(self.camera)
     deselect_all()
     self.camera.select_set(True)
     bpy.ops.collection.objects_remove(collection='Building')
     # bpy.data.collections['Building'].objects.unlink(self.camera)
     return bpy.data.collections['Collection']
コード例 #6
0
ファイル: volume.py プロジェクト: CDInstitute/CompoNET
    def _extrude(self):
        """
		Function that extrudes the plane in order to create a mesh.
		:return:
		"""
        deselect_all()
        if self.mesh:
            extrude(self.mesh, self.height)
コード例 #7
0
	def _nest(self):
		deselect_all()
		names = [x.name for x in bpy.data.collections]
		if self.name not in names:
			bpy.data.collections.new(self.name)
			bpy.data.collections['Building'].children.link(bpy.data.collections[self.name])
			bpy.data.collections[self.name].objects.link(bpy.data.objects[self.mesh.name])
			return bpy.data.collections[self.name]
コード例 #8
0
ファイル: renderer.py プロジェクト: CDInstitute/CompoNET
    def render(self, filename='new_mask_test'):
        """
		Function that performs all the rendering steps: normal render, segmentation
		mask.
		:param filename: name of the file, str
		:return:
		"""
        _ = CustomNodeTree(self.mode).make()
        deselect_all(True)
        bpy.ops.view3d.camera_to_view_selected()
        deselect_all()
        self._render(filename)
        self._render_mask(filename)
コード例 #9
0
ファイル: volume.py プロジェクト: CDInstitute/CompoNET
    def create(self):
        """
		Function that creates a mesh based on the input parameters.
		:return:
		"""

        bpy.ops.mesh.primitive_plane_add(location=self.position)
        bpy.ops.transform.resize(value=(self.length, self.width, 1.0))
        bpy.context.selected_objects[0].name = 'volume'
        self.name = bpy.context.selected_objects[0].name
        self.mesh = bpy.data.objects[self.name]
        self._nest()
        self._extrude()
        self.mesh["inst_id"] = 1  # instance id for the building envelope
        self.mesh.pass_index = 1
        deselect_all()
        self._triangulate()
コード例 #10
0
    def __copy__(self):
        deselect_all()
        select(self.mesh)
        bpy.ops.object.duplicate_move()
        _name = self.mesh.name.split('.')[0]

        ind = [
            x.name for x in bpy.data.objects
            if _name + '.' in x.name or _name == x.name
        ]
        mesh = bpy.data.objects[ind[-1]]
        m = self.__class__(self.name,
                           scale=self.scale,
                           mesh=mesh,
                           volume=self.volume)
        # self._triangulate()

        if self.connector:
            m.connect(self.connector.axis, self.connector.side)
        return m
コード例 #11
0
    def _nest(self):
        deselect_all()
        postfix = '_0'
        if '.' in self.volume.name:
            postfix = '.{}'.format(self.volume.name.split('.')[-1])
        if '.' in self.name:
            self.name = self.name.split('.')
        _name = self.name + postfix
        if _name not in [
                x.name for x in bpy.data.collections[self.volume.name].children
        ]:
            bpy.data.collections.new(_name)
            _name = [x.name for x in bpy.data.collections
                     if _name in x.name][-1]
            bpy.data.collections[self.volume.name].children.link(
                bpy.data.collections[_name])

        bpy.data.collections[_name].objects.link(
            bpy.data.objects[self.mesh.name])
        return bpy.data.collections[_name]
コード例 #12
0
 def _triangulate(self):
     deselect_all()
     if self.mesh:
         select(self.mesh)
         bpy.ops.object.modifier_add(type='TRIANGULATE')
         bpy.ops.object.modifier_apply()
コード例 #13
0
 def remove(self):
     deselect_all()
     bpy.data.objects[self.mesh.name].select_set(True)
     with redirect_stdout(stdout), redirect_stderr(stdout):
         bpy.ops.object.delete()