Siemens-NXUG二次开发-获取prt中体与类型、实体面与类型、实体边与类型、边上点的Tag标识[Python UF][20240302]

Siemens-NXUG二次开发-获取prt中体与类型、实体面与类型、实体边与类型、边上点的Tag标识[Python UF][20240302]

  • 1.python uf函数
    • 1.1 NXOpen.UF.Obj.CycleObjsInPart
    • 1.2 NXOpen.UF.Obj.AskTypeAndSubtype
    • 1.3 NXOpen.UF.Modeling.AskBodyFaces
    • 1.4 NXOpen.UF.Modeling.AskFaceEdges
    • 1.5 NXOpen.UF.Modeling.AskEdgeVerts
    • 1.6 NXOpen.UF.Modeling.AskEdgeType
    • 1.7 NXOpen.UF.Modeling.AskFaceType
    • 1.8 NXOpen.UF.Modeling.AskBodyType
  • 2.示例代码
    • 2.1 pyuf_parse_prt.py
  • 3.运行结果
    • 3.1 内部模式
    • 3.2 外部模式

1.python uf函数

1.1 NXOpen.UF.Obj.CycleObjsInPart

# 内部和外部模式可用
"""
官方文档翻译:返回所有层(包括不可写或不可见的层)上指定类型prt中的所有对象,而不管其当前的可显示状态如何。
此例程不返回表达式、废弃对象、临时(系统创建的)对象或休眠对象。处于休眠状态的对象是指已从模型中删除的对象。例如,如果倒圆角一条边,则该边处于休眠状态。除非已保存WCS,否则不会返回该WCS。
注意:当指定的类型为UF_feature_type时,此例程将循环零件中的特征。
在循环中循环数据库时,不要尝试删除对象。删除当前对象后,尝试读取下一个对象时可能会出现问题。要删除对象,请保存包含对象的阵列,然后在完成循环后,使用UF_OBJ_delete_array_of_objects删除已保存的对象阵列。
返回值:一个tag,元素类型为python的int类型,当次循环拿到具体的对象obj tag。
"""
def NXOpen.UF.Obj.CycleObjsInPart(self, part_tag, type, object_arg)	
	'''
	part_tag	     要在其中查找对象的prt的tag
	type	         想要在循环中查找的对象类型
	object_arg(Tag) 在输入时,由该例程的最后一次调用找到的对象。如果尚未调用此例程,则将object设置为NULL_TAG以开始循环。在输出时指定类型的下一个对象。如果没有对象,并且循环完成,则返回NULL_TAG
	'''

1.2 NXOpen.UF.Obj.AskTypeAndSubtype

"""
官方文档翻译:返回标记的NX对象的对象类型和子类型。这些对象中的大多数都列在uf_object_types.h头文件中。
除了uf_object_types.h中列出的对象之外,还有其他由标记唯一标识的NX对象。这些对象包括表达式和部件。这些对象未在uf_object_types.h头文件中列出,它们生成类型为uf_OBJ_EXPR_type和子类型为0的uf_OBJ_PART_type。
此函数为表达式和部件返回的类型和子类型在任何其他Open API例程中都没有用处。提供这些类型只是为了允许您通过NX对象的标识符(即其标签)来确定NX对象类,这可以帮助您确定可以与该对象一起使用的其他Open API例程。有关对象类和可用于这些对象的开放式API例程的更详细讨论,请参阅开放式API程序员指南“NX对象模型”。
"""
def NXOpen.UF.Obj.AskTypeAndSubtype(self, object_id)	
	'''
	object_id:(python int) 对象tag)
	返回值:一个元组(int, int),0-type;1-subtype
	'''

1.3 NXOpen.UF.Modeling.AskBodyFaces

# 内部和外部模式可用
"""
官方文档翻译:调用UF_MODL_ask_body_faces,并将实体tag(类型70,子类型0)作为输入,将返回与该实体关联的面的列表。可以使用UF_MODL_*_list*例程来处理此列表。该例程的适当输入可以通过调用UF_MODL_ask_object()并输入上述类型和子类型来获得。
"""
def NXOpen.UF.Modeling.AskBodyFaces(self, body)
	'''
	body(Tag) 实体的tag
	返回值:一个python列表,包含该实体上所有实体面face的tag。
	'''

1.4 NXOpen.UF.Modeling.AskFaceEdges

"""
注意:NXOpen中实体边的tag也可以直接用于曲线(UF_CURVE)操作函数传参,即便在UG系统中认为实体边edge和曲线curve中两种数据类型。
官方文档翻译:UF_MODL_ask_face_edges的输入是单个实体面。返回的是与该面关联的实体边的列表。可以使用UF_MODL_*_list*例程来处理此列表。
如果面是引用,则返回值是相对于引用的,而不是相对于原型的。
"""
def NXOpen.UF.Modeling.AskFaceEdges(self, face)		
	'''
	face(Tag) 实体面的tag
	返回值:一个python列表,包含该实体面上所有实体边edge的tag。
	'''

1.5 NXOpen.UF.Modeling.AskEdgeVerts

# 内部和外部模式可用
"""
官方文档翻译:给定一条实体边作为输入,返回边的顶点(端点)。根据给定的边,边可以有零个、一个或两个顶点。例如,圆是顶点为零的边,线是顶点为两个的边。也可以创建具有一个顶点的圆形边。一个例子是将三角形挤出到圆柱体中,然后对结果执行并集以获得如图所示的实体。
当输入边是引用时,点1和点2的坐标是相对于引用的。
"""
def NXOpen.UF.Modeling.AskEdgeVerts(self, edge)
	'''
	edge(Tag) 实体面上边(实体边)的tag
	返回值:一个python元组 (list of float, list of float, int)。
	0位置-(list of float): 实体边的第一个终点.
	1位置-(list of float): 实体边的第二个终点.
	2位置-(int): 返回的终点数量. 如果仅一个终点返回了,那么它在元组的0位置是"第一个终点".
	'''

1.6 NXOpen.UF.Modeling.AskEdgeType

# 内部和外部模式可用
"""
官方文档翻译:返回实体边类型。查询例程仅返回线性、圆形、椭圆形和样条曲线边的几何数据。
"""
def NXOpen.UF.Modeling.AskEdgeType(self, edge_id)
	'''
	edge_id(Tag) 实体面上边(实体边)的tag
	返回值:一个python int值。
	#define UF_MODL_LINEAR_EDGE             3001    /* UF_MODL_ask_edge_type */
	#define UF_MODL_CIRCULAR_EDGE           3002    /* UF_MODL_ask_edge_type */
	#define UF_MODL_ELLIPTICAL_EDGE         3003    /* UF_MODL_ask_edge_type */
	#define UF_MODL_INTERSECTION_EDGE       3004    /* UF_MODL_ask_edge_type */
	#define UF_MODL_SPLINE_EDGE             3005    /* UF_MODL_ask_edge_type */
	#define UF_MODL_SP_CURVE_EDGE           3006    /* UF_MODL_ask_edge_type */
	#define UF_MODL_FOREIGN_EDGE            3007    /* UF_MODL_ask_edge_type */
	#define UF_MODL_CONST_PARAMETER_EDGE    3008    /* UF_MODL_ask_edge_type */
	#define UF_MODL_TRIMMED_CURVE_EDGE      3009    /* UF_MODL_ask_edge_type */
	#define UF_MODL_CONVERGENT_EDGE         100007    /* UF_MODL_ask_edge_type */
	'''

1.7 NXOpen.UF.Modeling.AskFaceType

# 内部和外部模式可用
"""
官方文档翻译:获取实体面的类型
"""
def NXOpen.UF.Modeling.AskFaceType(self, face )
	'''
	face (Tag) 实体面的tag
	返回值:一个python int值。
	#define UF_MODL_CYLINDRICAL_FACE        16   /* UF_MODL_ask_face_type */
	#define UF_MODL_CONICAL_FACE            17   /* UF_MODL_ask_face_type */
	#define UF_MODL_SPHERICAL_FACE          18   /* UF_MODL_ask_face_type */
	#define UF_MODL_TOROIDAL_FACE           19   /* UF_MODL_ask_face_type */
	#define UF_MODL_SWEPT_FACE              20   /* UF_MODL_ask_face_type */
	#define UF_MODL_PLANAR_FACE             22   /* UF_MODL_ask_face_type */
	#define UF_MODL_BLENDING_FACE           23   /* UF_MODL_ask_face_type */
	#define UF_MODL_PARAMETRIC_FACE         43   /* UF_MODL_ask_face_type */
	#define UF_MODL_OFFSET_FACE             65   /* UF_MODL_ask_face_type */
	#define UF_MODL_FOREIGN_FACE            66   /* UF_MODL_ask_face_type */
	#define UF_MODL_CONVERGENT_FACE         67   /* UF_MODL_ask_face_type */
	'''

1.8 NXOpen.UF.Modeling.AskBodyType

# 内部和外部模式可用
"""
官方文档翻译:获取体的类型,在UG中体分为实体(solid body)和片体(sheet body)
"""
def NXOpen.UF.Modeling.AskBodyType(self, body_id)
	'''
	body_id(Tag) 体的tag
	返回值:一个python int值。
	#define UF_MODL_SOLID_BODY              5601    /* UF_MODL_ask_body_type */
	#define UF_MODL_SHEET_BODY              5602    /* UF_MODL_ask_body_type */
	'''

2.示例代码

2.1 pyuf_parse_prt.py

import NXOpen
import NXOpen.UF as UF

import json

def get_uf_session():
    # 获取当前UF会话
    return UF.UFSession.GetUFSession()

def get_py_session():
    # 获取当前UF会话
    return NXOpen.Session.GetSession()

def pyuf_open_prt(the_pyuf_session, open_prt_file_name):
    """
    功能:打开一个指定文件路径和文件名的.prt文件
    备注:外部模式会报错-NXOpen.NXException: Internal error: memory access violation,
    内部模式不会,使用python api本身的写法“py_open_prt”打开
    """
    
    # 由于要对Part进行操作,因此需要获取Part实例对象
    pyuf_part_instance = the_pyuf_session.Part

    # Open方法位于Part类对象中
    return pyuf_part_instance.Open(open_prt_file_name)

def py_open_prt(the_py_session, open_prt_file_name):
    """
    功能:打开一个指定文件路径和文件名的.prt文件
    返回值:(<NXOpen.Part object at 0x00000180F13DDCC0>, <NXOpen.PartLoadStatus object at 0x00000180F0F3DC70>)
    """
    return the_py_session.Parts.OpenBaseDisplay(open_prt_file_name)

def pyuf_close_prt(the_pyuf_session, part_tag, scope, mode):
    """
    功能:关闭当前工作part
    """
    # 由于要对Part进行操作,因此需要获取Part实例对象
    pyuf_part_instance = the_pyuf_session.Part

    # Close方法位于Part类对象中
    return pyuf_part_instance.Close(part_tag, scope, mode)

def get_part_solid_body_tags(the_pyuf_session, part_file_tag):
    """
    功能:获取.prt文件中的所有solidbody实体的tag标识
    """
    pyuf_obj_instance = the_pyuf_session.Obj

    solid_body_tag_list = []
    
    solid_body_tag = 0
    while True:
        solid_body_tag = pyuf_obj_instance.CycleObjsInPart(part_file_tag, UF.UFConstants.UF_solid_type, solid_body_tag)
        if solid_body_tag == 0:
            break
        type, subtype= pyuf_obj_instance.AskTypeAndSubtype(solid_body_tag)
        if subtype == 0:
            solid_body_tag_list.append(solid_body_tag)
    return solid_body_tag_list

def get_solid_body_face_tags(the_pyuf_session, solid_body_tag):
    """
    功能:获取一个solidbody实体中的所有面的tag标识
    """
    uf_modling_instance = the_pyuf_session.Modeling

    face_tag_list = uf_modling_instance.AskBodyFaces(solid_body_tag)
    return face_tag_list

def get_solid_body_face_edge_tags(the_pyuf_session, solid_body_face_tag):
    """
    功能:获取一个实体面中的所有实体边的tag标识
    """
    uf_modling_instance = the_pyuf_session.Modeling

    edge_tag_list = uf_modling_instance.AskFaceEdges(solid_body_face_tag)
    return edge_tag_list

def get_solid_body_face_edge_points(the_pyuf_session, solid_body_face_egde_tag):
    """
    功能:获取一个边中的所有点的坐标
    """
    uf_modling_instance = the_pyuf_session.Modeling
    edge_type = get_solid_body_edge_type(the_pyuf_session, solid_body_face_egde_tag)

    edge_data = uf_modling_instance.AskEdgeVerts(solid_body_face_egde_tag)

    edgeTypeString = get_uf_modl_edge_string(edge_type)
    return [edge_type, edgeTypeString, edge_data[2], edge_data[0], edge_data[1]]

def get_solid_body_face_type(the_pyuf_session, solid_body_face_tag):
    """
    功能:获取一个实体面的类型
    """
    uf_modling_instance = the_pyuf_session.Modeling
    face_type = uf_modling_instance.AskFaceType(solid_body_face_tag)
    return face_type

def get_solid_body_edge_type(the_pyuf_session, solid_body_edge_tag):
    """
    功能:获取一个实体边的类型
    """
    uf_modling_instance = the_pyuf_session.Modeling
    edge_type = uf_modling_instance.AskEdgeType(solid_body_edge_tag)
    return edge_type

def get_body_type(the_pyuf_session, body_tag):
    """
    功能:获取一个体的类型,在UG中体分为实体(solid body)和片体(sheet body)
    """
    uf_modling_instance = the_pyuf_session.Modeling
    edge_type = uf_modling_instance.AskBodyType(body_tag)
    return edge_type

def get_uf_modl_body_string(uf_modl_body_type):
    """
    功能:根据类型标识,获取UG MODL body对象的字符串形式描述,
    UF_MODL_SOLID_BODY              5601
	UF_MODL_SHEET_BODY              5602
    """
    if type(uf_modl_body_type) != type(0):
        return ""
    if uf_modl_body_type == UF.UFConstants.UF_MODL_SOLID_BODY:
        return "5601-UF_MODL_SOLID_BODY-Type"
    elif uf_modl_body_type == UF.UFConstants.UF_MODL_SHEET_BODY:
        return "5602-UF_MODL_SHEET_BODY-Type"
    return "00-unknow-ModlEdgeType"

def get_uf_modl_face_string(uf_modl_face_type):
    """
    功能:根据类型标识,获取UG MODL face对象的字符串形式描述,
    UF_MODL_CYLINDRICAL_FACE        16
    UF_MODL_CONICAL_FACE            17
    UF_MODL_SPHERICAL_FACE          18
    UF_MODL_TOROIDAL_FACE           19
    UF_MODL_SWEPT_FACE              20
    UF_MODL_PLANAR_FACE             22
    UF_MODL_BLENDING_FACE           23
    UF_MODL_PARAMETRIC_FACE         43
    UF_MODL_OFFSET_FACE             65
    UF_MODL_FOREIGN_FACE            66
    UF_MODL_CONVERGENT_FACE         67 
    """
    if type(uf_modl_face_type) != type(0):
        return ""
    if uf_modl_face_type == UF.UFConstants.UF_MODL_CYLINDRICAL_FACE:
        return "16-UF_MODL_CYLINDRICAL_FACE-Type"
    elif uf_modl_face_type == UF.UFConstants.UF_MODL_CONICAL_FACE:
        return "17-UF_MODL_CONICAL_FACE-Type"
    elif uf_modl_face_type == UF.UFConstants.UF_MODL_SPHERICAL_FACE:
        return "18-UF_MODL_SPHERICAL_FACE-Type"
    elif uf_modl_face_type == UF.UFConstants.UF_MODL_TOROIDAL_FACE:
        return "19-UF_MODL_TOROIDAL_FACE-Type"
    elif uf_modl_face_type == UF.UFConstants.UF_MODL_SWEPT_FACE:
        return "20-UF_MODL_SWEPT_FACE-Type"
    elif uf_modl_face_type == UF.UFConstants.UF_MODL_PLANAR_FACE:
        return "22-UF_MODL_PLANAR_FACE-Type"
    elif uf_modl_face_type == UF.UFConstants.UF_MODL_BLENDING_FACE:
        return "23-UF_MODL_BLENDING_FACE-Type"
    elif uf_modl_face_type == UF.UFConstants.UF_MODL_PARAMETRIC_FACE:
        return "43-UF_MODL_PARAMETRIC_FACE-Type"
    elif uf_modl_face_type == UF.UFConstants.UF_MODL_OFFSET_FACE:
        return "65-UF_MODL_OFFSET_FACE-Type"
    elif uf_modl_face_type == UF.UFConstants.UF_MODL_FOREIGN_FACE:
        return "66-UF_MODL_FOREIGN_FACE-Type"
    elif uf_modl_face_type == UF.UFConstants.UF_MODL_CONVERGENT_FACE:
        return "67-UF_MODL_CONVERGENT_FACE-Type"
    return "00-unknow-ModlEdgeType"

def get_uf_modl_edge_string(uf_modl_edge_type):
    """
    功能:根据类型标识,获取UG MODL Edge对象的字符串形式描述,
    UF_MODL_LINEAR_EDGE             3001
    UF_MODL_CIRCULAR_EDGE           3002
    UF_MODL_ELLIPTICAL_EDGE         3003
    UF_MODL_INTERSECTION_EDGE       3004
    UF_MODL_SPLINE_EDGE             3005
    UF_MODL_SP_CURVE_EDGE           3006
    UF_MODL_FOREIGN_EDGE            3007
    UF_MODL_CONST_PARAMETER_EDGE    3008
    UF_MODL_TRIMMED_CURVE_EDGE      3009
    UF_MODL_CONVERGENT_EDGE         100007
    """
    if type(uf_modl_edge_type) != type(0):
        return ""
    
    if uf_modl_edge_type == UF.UFConstants.UF_MODL_LINEAR_EDGE:
        return "3001-UF_MODL_LINEAR_EDGE-Type"
    elif uf_modl_edge_type == UF.UFConstants.UF_MODL_CIRCULAR_EDGE:
        return "3002-UF_MODL_CIRCULAR_EDGE-Type"
    elif uf_modl_edge_type == UF.UFConstants.UF_MODL_ELLIPTICAL_EDGE:
        return "3003-UF_MODL_ELLIPTICAL_EDGE-Type"
    elif uf_modl_edge_type == UF.UFConstants.UF_MODL_INTERSECTION_EDGE:
        return "3004-UF_MODL_INTERSECTION_EDGE-Type"
    elif uf_modl_edge_type == UF.UFConstants.UF_MODL_SPLINE_EDGE:
        return "3005-UF_MODL_SPLINE_EDGE-Type"
    elif uf_modl_edge_type == UF.UFConstants.UF_MODL_SP_CURVE_EDGE:
        return "3006-UF_MODL_SP_CURVE_EDGE-Type"
    elif uf_modl_edge_type == UF.UFConstants.UF_MODL_FOREIGN_EDGE:
        return "3007-UF_MODL_FOREIGN_EDGE-Type"
    elif uf_modl_edge_type == UF.UFConstants.UF_MODL_CONST_PARAMETER_EDGE:
        return "3008-UF_MODL_CONST_PARAMETER_EDGE-Type"
    elif uf_modl_edge_type == UF.UFConstants.UF_MODL_TRIMMED_CURVE_EDGE:
        return "3009-UF_MODL_TRIMMED_CURVE_EDGE-Type"
    elif uf_modl_edge_type == UF.UFConstants.UF_MODL_CONVERGENT_EDGE:
        return "100007-UF_MODL_CONVERGENT_EDGE-Type"
    return "00-unknow-ModlEdgeType"
    


if __name__ == '__main__':
    # 获取uf session
    the_pyuf_session = get_uf_session()

    # 获取python session
    the_py_session = get_py_session()

    # 打开prt文件路径与名称
    open_prt_file_name = 'D:\\pyuf_parse_prt.prt'
    
    # 打开D盘根目录下的示例.prt文件,并成为工作prt(work part)
    # 如果是在内部模式运行,则会在NX/UG界面打开一个名为pyuf_parse_prt_test.prt的文件窗口
    open_prt_file_python_instance = py_open_prt(the_py_session, open_prt_file_name)
    open_prt_file_uf_tag = open_prt_file_python_instance[0].Tag
    print(open_prt_file_python_instance)

    # 外部模式运行,会在命令行中打印,但内部模式运行则无反应,因在UF.UI类中操作,才可在NX/UG界面显示数据
    # 由于与NX/UG界面UI操作的方法都在UI类中,因此先获取UF.UI示例对象
    pyuf_ui_instance = the_pyuf_session.Ui

    # 判断信息窗口是否打开
    if pyuf_ui_instance.IsListingWindowOpen() == False:
        # 信息窗口未打开,先要将其打开
        # 打开信息窗口
        pyuf_ui_instance.OpenListingWindow()
        # 向信息窗口写入内容
    pyuf_ui_instance.WriteListingWindow('\nopen_prt_file_name is:' + str(open_prt_file_name))
    pyuf_ui_instance.WriteListingWindow('\nopen_prt_file_tag type is:' + str(type(open_prt_file_uf_tag)))
    pyuf_ui_instance.WriteListingWindow('\nopen_prt_file_tag is:{}'.format(open_prt_file_uf_tag))

    part_data = dict()
    solid_body_tag_list = get_part_solid_body_tags(the_pyuf_session, open_prt_file_uf_tag)
    for item_solid_body_tag in solid_body_tag_list:
        item_solid_body_face_tag_list = get_solid_body_face_tags(the_pyuf_session, item_solid_body_tag)
        item_solid_body_type = get_body_type(the_pyuf_session, item_solid_body_tag)
        temp_face_data_dict = dict()
        for item_solid_body_face_tag in item_solid_body_face_tag_list:
            item_solid_body_face_edge_tag_list = get_solid_body_face_edge_tags(the_pyuf_session, item_solid_body_face_tag)
            item_solid_body_face_type = get_solid_body_face_type(the_pyuf_session, item_solid_body_face_tag)
            temp_edge_data_dict = dict()
            for item_solid_body_face_edge_tag in item_solid_body_face_edge_tag_list:
                item_solid_body_face_edge_points_data = get_solid_body_face_edge_points(the_pyuf_session, item_solid_body_face_edge_tag)
                temp_edge_data_dict[str(item_solid_body_face_edge_tag)] = str(item_solid_body_face_edge_points_data)
            temp_face_data_dict[str(item_solid_body_face_tag)] = temp_edge_data_dict
            temp_face_data_dict[str(item_solid_body_face_tag)]["face_type"] = get_uf_modl_face_string(item_solid_body_face_type)
        part_data[str(item_solid_body_tag)] = temp_face_data_dict
        part_data[str(item_solid_body_tag)]["body_type"] = get_uf_modl_body_string(item_solid_body_type)

    print(part_data)
    f = open("tttt.json", "w")
    f.write(json.dumps(part_data))
    f.close()
    pyuf_ui_instance.WriteListingWindow("{}".format(json.dumps(part_data)))

    # 将信息窗口的内容保存到指定文件中
    pyuf_ui_instance.SaveListingWindow('D:\\pyuf_listingwindow_content_test.txt')

    # 关闭信息窗口
    #pyuf_ui_instance.ExitListingWindow()

3.运行结果

3.1 内部模式

选中要运行的.py文件后,点击“管道通路”即可。

在这里插入图片描述

运行结果:
在这里插入图片描述
在这里插入图片描述

3.2 外部模式

cmd命令:“D:\Siemens\NX 12.0\NXBIN\run_journal.exe” pyuf_parse_prt.py
cmd命令:“D:\Siemens\NX 12.0\NXBIN\run_journal.exe” pyuf_parse_prt.py

powershell命令:&“D:\Siemens\NX 12.0\NXBIN\run_journal.exe” pyuf_parse_prt.py
powershell命令:&“D:\Siemens\NX 12.0\NXBIN\run_journal.exe” pyuf_parse_prt.py

运行结果:
在这里插入图片描述
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/421322.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

韦东山嵌入式Liunx入门驱动开发四

文章目录 一、异常与中断的概念及处理流程1-1 中断的引入1-2 栈(1) CPU实现a ab的过程(2) 进程与线程 1-3 Linux系统对中断处理的演进1-4 Linux 中断系统中的重要数据结构(1) irq_desc 结构体(2) irqaction 结构体(3) irq_data 结构体(4) irq_domain 结构体(5) irq_domain 结构…

mac苹果电脑c盘满了如何清理内存?2024最新操作教程分享

苹果电脑用户经常会遇到麻烦:内置存储器(即C盘)空间不断缩小&#xff0c;电脑运行缓慢。在这种情况下&#xff0c;苹果电脑c盘满了怎么清理&#xff1f;如何有效清理和优化存储空间&#xff0c;提高计算机性能&#xff1f;成了一个重要的问题。今天&#xff0c;我想给大家详细介…

Unity 切换场景

场景切换前必须要将场景拖动到Build中 同步加载场景 using System.Collections; using System.Collections.Generic; //using UnityEditor.SearchService; using UnityEngine; // 场景管理 需要导入该类 using UnityEngine.SceneManagement;public class c3 : MonoBehaviour {…

XUbuntu22.04之如何找到.so库所在的软件包?(二百一十六)

简介&#xff1a; CSDN博客专家&#xff0c;专注Android/Linux系统&#xff0c;分享多mic语音方案、音视频、编解码等技术&#xff0c;与大家一起成长&#xff01; 优质专栏&#xff1a;Audio工程师进阶系列【原创干货持续更新中……】&#x1f680; 优质专栏&#xff1a;多媒…

如何添加极狐GitLab Runner 信任域名证书

本文作者 徐晓伟 极狐Gitlab Runner 信任实例域名证书&#xff0c;用于注册注册极狐 GitLab Runner。 问题 参见 极狐gitlab-runner-host.md 说明 解决方案是使用颁发给域名 gitlab.test.helm.xuxiaowei.cn 的证书&#xff0c;可以使用自己的域名去各大云厂商免费申请&#…

Linux系统中的高级多线程编程技术

在Linux系统中&#xff0c;多线程编程是一种常见的并发编程模型&#xff0c;通过利用多线程可以实现程序的并发执行&#xff0c;提高系统的性能和响应速度。在Linux系统中&#xff0c;开发人员通常使用 pthread 库来进行多线程编程&#xff0c;同时需要掌握线程同步技术以避免并…

Mybatis批量更新对象数据的两种方法

说明&#xff1a;遇到一次需要批量修改对象的场景。传递一个对象集合&#xff0c;需要根据对象ID批量修改数据库数据&#xff0c;使用的是MyBatis框架。查了一些资料&#xff0c;总结出两种实现方式。 创建Demo 首先&#xff0c;创建一个简单的Demo&#xff1b; &#xff08…

Kotlin MutliPatform Demo NoteApp

简单用Kotlin实现个记录app&#xff0c;主要实现本地数据保存。支持多端运行 使用的库: voyagernapiercoroutinesktorserializationkotlinx-datetimekoinmultiplatform-settingssqldelightMVI 项目: MyNote

go并发模式之----工作池/协程池模式

常见模式之四&#xff1a;工作池/协程池模式 定义 顾名思义&#xff0c;就是有固定数量的工人&#xff08;协程&#xff09;&#xff0c;去执行批量的任务 使用场景 适用于需要限制并发执行任务数量的情况 创建一个固定大小的 goroutine 池&#xff0c;将任务分发给池中的 g…

学习:GPT-4技术报告2023.3

原文链接&#xff1a;GPT-4的 (openai.com) 摘要&#xff1a; 我们创建了 GPT-4&#xff0c;这是 OpenAI 在扩展深度学习方面的最新里程碑。GPT-4 是一个大型多模态模型&#xff08;接受图像和文本输入&#xff0c;发出文本输出&#xff09;&#xff0c;虽然在许多现实世界场…

MySQL 多表查询 连接查询 外连接

介绍 MySQL 多表查询 连接查询 内连接 外连接分为两种&#xff0c;左外和右外连接&#xff0c; 左外&#xff1a;相当于查询表1(左表)的所有数据 包含 表1和表2交集部分的数据,完全包含左表的数据 右外&#xff1a;相当于查询表2(右表)的所有数据 包含 表1和表2交集部分的数据…

c语言的数据结构:队列

1.队列存在的实现方式及其存在意义 1.1为什么队列使用单链表实现更好 动态内存分配&#xff1a;链表在C语言中通常使用动态内存分配&#xff0c;这意味着可以在运行时根据需要动态地添加或删除节点。这对于实现一个动态大小的队列非常有用&#xff0c;因为队列的大小可以在运…

达梦数据库基础操作(二):表空间操作

达梦数据库基础操作(二)&#xff1a;表空间操作 1. 表空间操作 1.1 达梦表空间介绍 表空间的概念&#xff1a; 每个DM 数据库都是由一个或者多个表空间组成&#xff0c;表空间是一个逻辑的存储容器&#xff0c;它位于逻辑结构的顶层&#xff0c;用于存储数据库中的所有数据&am…

11-orm-自研微服务框架

ORM 当开发涉及到存储数据的时候&#xff0c;往往要用到数据库&#xff0c;用的最多的就是mysql了&#xff0c;这里我们实现一个orm&#xff0c;让开发者更加便捷的操作数据库 1. Insert实现 orm的本质就是拼接sql&#xff0c;让开发者更加方便的使用 package ormimport ("…

(二)电机控制之六步方波BLDC控制方法以及注意问题

一、直流无刷电机的简介 直流无刷电机&#xff08;Brushless Direct Current Motor&#xff0c;简称BLDC电机或BL电机&#xff09;是一种先进的电动机类型&#xff0c;其设计结合了直流电机的调速性能和交流电机的结构优势。这种电机没有传统的机械换向器和碳刷组件&#xff0…

安达发|APS自动排程软件的三种模式

APS自动排程软件是一种用于生产计划和调度的工具&#xff0c;它可以帮助制造企业实现生产过程的优化和效率提升。根据不同的需求和应用场景&#xff0c;APS自动排程软件通常有三种模式&#xff1a;基于模拟仿真模式、基于TOC的模式和扩展以及基于数学建模。下面我将详细介绍这三…

基于Python3的数据结构与算法 - 08 NB三人组小结

一、总结 三种排序算法得时间复杂度都是O(nlogn) &#xff08;存在常数之间的差异&#xff09;一般情况下&#xff0c;就运行时间而言&#xff1a;快速排序 < 归并排序 < 堆排序三种方法的缺点&#xff1a; 快速排序&#xff1a;极端情况下排序效率低归并排序&#xf…

【服务器数据恢复】昆腾存储中raid5磁盘阵列数据恢复案例

服务器数据恢复环境&故障&#xff1a; 10个磁盘柜&#xff0c;每个磁盘柜配24块硬盘。9个磁盘柜用于存储数据&#xff0c;1个磁盘柜用于存储元数据。 元数据存储中24块硬盘&#xff0c;组建了9组RAID1阵列1组RAID10阵列&#xff0c;4个全局热备硬盘。 数据存储中&#xff0…

windows安装pytorch(anaconda安装)

文章目录 前言一、安装anaconda1、进入官网下载&#xff08;1&#xff09;点击view all Installers&#xff08;2&#xff09;下载需要的版本 2、一顿默认安装就行&#xff08;到这一步这样填&#xff09;3、进入开始找到Anaconda Prompt&#xff0c;点击进入到base环境 二、新…

剑指offer面试题28:对称的二叉树

#试题28&#xff1a;对称的二叉树 题目&#xff1a; 请设计一个函数判断一棵二叉树是否 轴对称 。 示例 1&#xff1a; 输入&#xff1a;root [6,7,7,8,9,9,8] 输出&#xff1a;true 解释&#xff1a;从图中可看出树是轴对称的。示例 2&#xff1a; 输入&#xff1a;root …
最新文章