def from_wdb(sketch, data, reverse): data = librt.cast(data, librt.POINTER(librt.struct_bezier_seg)).contents return Bezier( sketch, points=[data.ctl_points[i] for i in range(0, data.degree + 1)], reverse=reverse )
def build_tree(self): node = cta.brlcad_new(librt.struct_tree_node) node.magic = librt.RT_TREE_MAGIC node.tb_op = librt.OP_NOT node.tb_regionp = None node.tb_left = self.left.build_tree() return librt.cast(librt.pointer(node), librt.POINTER(librt.union_tree))
def create_primitive(type_id, db_internal, directory): # TODO: research if this method won't cause a memory leak # because python will not free the structures received here name = str(directory.d_namep) type_info = MAGIC_TO_PRIMITIVE_TYPE.get(type_id) if type_info: magic = type_info[2] struct_type = type_info[3] data = struct_type.from_address(db_internal.idb_ptr) if struct_type else None # the first int32 is always the magic: data_magic = librt.cast(db_internal.idb_ptr, librt.POINTER(librt.c_uint32)).contents.value if magic: if magic != data_magic: raise BRLCADException("Invalid magic value, expected {0} but got {1}".format(magic, data_magic)) else: if type_info[2]: display_type_info = list(type_info) display_type_info[2] = hex(display_type_info[2]) else: display_type_info = type_info warnings.warn("No magic for type: {0}, {1}, {2}".format(type_id, hex(data_magic), display_type_info)) if type_info[1] == Primitive: return Primitive(name=name, primitive_type=type_info[0], data=data) else: return type_info[1].from_wdb(name=name, data=data) else: return Primitive(name=name, primitive_type="UNKNOWN")
def from_wdb(sketch, data, reverse): data = librt.cast(data, librt.POINTER(librt.struct_carc_seg)).contents return CircularArc(sketch, [data.start, data.end], reverse=reverse, radius=data.radius, center_is_left=bool(data.center_is_left), clock_wise=bool(data.orientation))
def build_tree(self): node = cta.brlcad_new(librt.struct_tree_db_leaf) node.magic = librt.RT_TREE_MAGIC node.tl_op = librt.OP_DB_LEAF node.tl_mat = None if self.matrix is None else cta.transform( self.matrix, use_brlcad_malloc=True) node.tl_name = librt.bu_strdupm(self.name, "tree_db_leaf.tl_name") return librt.cast(librt.pointer(node), librt.POINTER(librt.union_tree))
def build_tree(self, subset=None): if subset and len(subset) == 1: return subset[0].build_tree() if not subset: subset = self.children node = cta.brlcad_new(librt.struct_tree_node) node.magic = librt.RT_TREE_MAGIC node.tb_op = self.op_code node.tb_regionp = None index = len(subset) / 2 node.tb_left = self.build_tree(subset[:index]) node.tb_right = self.build_tree(subset[index:]) return librt.cast(librt.pointer(node), librt.POINTER(librt.union_tree))
def from_wdb(name, data): vertices = [] for i in range(0, data.vert_count): vertices.append(Vector(data.verts[i])) result = Sketch( name=name, base=Vector(data.V), u_vec=Vector(data.u_vec), v_vec=Vector(data.v_vec), vertices=vertices ) curves = data.curve for i in range(0, curves.count): curve = curves.segment[i] magic = librt.cast(curve, librt.POINTER(librt.struct_line_seg)).contents.magic reverse = bool(curves.reverse[i]) result.add_curve_segment(magic, curve, reverse=reverse) return result
def from_wdb(sketch, data, reverse): data = librt.cast(data, librt.POINTER(librt.struct_nurb_seg)).contents point_type = (data.pt_type >> 1) & 0x0f if bool(data.pt_type & 1): weights = [data.weights[i] for i in xrange(0, data.c_size)] coordinate_count = 3 else: weights = None coordinate_count = 2 if coordinate_count != data.pt_type >> 5: raise ValueError( "Expected {} NURB coordinates for sketch, but got {}".format( coordinate_count, data.pt_type >> 5)) result = NURB( sketch, points=[data.ctl_points[i] for i in xrange(0, data.c_size)], reverse=reverse, order=data.order, point_type=point_type, knot_vector=[data.k.knots[i] for i in xrange(0, data.k.k_size)], weights=weights) return result
def from_wdb(sketch, data, reverse): data = librt.cast(data, librt.POINTER(librt.struct_line_seg)).contents return Line(sketch, [data.start, data.end], reverse=reverse)