Siemens-NXUG二次开发-创建倒斜角特征、边倒圆角特征、设置对象颜色、获取面信息[Python UF][20240605]

news2024/11/19 10:23:14

Siemens-NXUG二次开发-创建倒斜角特征、边倒圆角特征、设置对象颜色、获取面信息[Python UF][20240605]

  • 1.python uf函数
    • 1.1 NXOpen.UF.Modeling.AskFaceData
    • 1.2 NXOpen.UF.Modeling.CreateChamfer
    • 1.3 NXOpen.UF.ModlFeatures.CreateBlend
    • 1.4 NXOpen.UF.Obj.SetColor
  • 2.实体目标面边识别
    • 2.1 识别平行于Z轴的竖直边(倒圆角)
    • 2.1 识别垂直于Z轴的平面(倒斜角)
  • 3.示例代码
    • 3.1 pyuf_chamfer_blend.py
  • 4.运行结果
    • 4.1 内部模式
    • 4.2 外部模式

1.python uf函数

1.1 NXOpen.UF.Modeling.AskFaceData

# 内部和外部模式可用
"""
返回值:一个元组,元素类型为python的int类型,块特征的feature tag标识。
"""             
def NXOpen.UF.Modeling.AskFaceData(self, face_tag)
	'''
	face_tag:面的tag标识
	[返回值]一个元组 (type-int, 
    face point-list of float, 
    dir-list of float, 
    Face boundary-list of float, 
    Face major radius-float, 
    Face minor radius-float, 
    Face normal direction-int)
    其中元组0位置:
    cylinder-16、cone-17 、sphere-18 、revolved (toroidal)-19
    extruded-20 、bounded plane-22 、fillet (blend)-23 、b-surface-43
    offset surface-65 、foreign surface-66、Convergent surface-67
	'''

1.2 NXOpen.UF.Modeling.CreateChamfer

# 内部和外部模式可用
"""
返回值:一个tag,倒斜角特征tag。
"""             
def NXOpen.UF.Modeling.CreateChamfer(self, subtype, offset1, offset2, theta, edges)
	'''
    subtype-int:1-单向偏置、2-双向偏置、3-偏置和角度、4-自由单向偏置、5-自由双向偏置,
    offset1-str:偏置值1,
    offset2-str:偏置值2,
    theta-str:倒斜角角度值,
    edges-int list:要倒斜角实体边的tag列表
    [返回值]一个整数,倒角特征tag标识
	'''

1.3 NXOpen.UF.ModlFeatures.CreateBlend

# 内部和外部模式可用
"""
返回值:一个tag,倒圆角特征tag。
"""             
def NXOpen.UF.ModlFeatures.CreateBlend(self, radius, edge_list, smooth_overflow, cliff_overflow, notch_overflow, vrb_tool)
	'''
    radius-str:倒圆角半径,
    edge_list-int list:要倒圆角实体边的tag列表,
    smooth_overflow-int:倒圆角平滑溢出值、0-允许这种类型倒圆、1-防止这种类型倒圆,
    cliff_overflow-int:倒圆角峭壁溢出值、0-允许这种类型倒圆、1-防止这种类型倒圆,
    notch_overflow-int:倒圆角凹槽溢出值、0-允许这种类型倒圆、1-防止这种类型倒圆,
    vrb_tool-float:倒圆角公差
    [返回值]一个整数,倒圆角特征tag标识
	'''

1.4 NXOpen.UF.Obj.SetColor

# 内部和外部模式可用
"""
返回值:一个整数,0-成功执行,非零正整数-错误大代码。
"""             
def NXOpen.UF.Obj.SetColor(self, object_tag, color_id)
	'''
	object_tag:正整数,对象tag标识
	color_id:正整数-颜色号
	'''

2.实体目标面边识别

2.1 识别平行于Z轴的竖直边(倒圆角)

  • 从块特征tag获取该特征所属的实体tag
  • 从实体tag获取所有的边tag
  • 循环边tag,判断其所在向量是否平行于Z轴,即找到Z竖直边

识别开始时,当前3D实体状态:
在这里插入图片描述
识别完成后,倒圆角操作后,当前3D实体状态:
在这里插入图片描述

2.1 识别垂直于Z轴的平面(倒斜角)

  • 从块特征tag获取该特征所属的实体tag
  • 从实体tag获取所有的面tag
  • 循环面tag,判断是否是平面且法线平行于Z轴,即平面垂直于Z轴,找到竖直边倒圆角后实体的上下两个平面

识别开始时,当前3D实体状态:
在这里插入图片描述

识别完成后,倒斜角操作后,当前3D实体状态:
在这里插入图片描述

3.示例代码

3.1 pyuf_chamfer_blend.py

import NXOpen
import NXOpen.UF as UF

import math


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

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

def pyuf_new_prt(the_pyuf_session, new_prt_file_name, units = 1):
    """
    功能:创建一个指定文件路径和文件名的.prt文件,默认单位制是米(m)
    """

    # 由于要对Part进行操作,因此需要获取Part实例对象
    pyuf_part_instance = the_pyuf_session.Part

    # New方法位于Part类对象中
    new_prt_file_tag = pyuf_part_instance.New(new_prt_file_name, units)
    return new_prt_file_tag

def pyuf_save_prt(the_pyuf_session):
    """
    功能:保存当前工作part
    """
    # 由于要对Part进行操作,因此需要获取Part实例对象
    pyuf_part_instance = the_pyuf_session.Part

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

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_solid_body_edge_tags(the_pyuf_session, solid_body_tag):
    """
    获取一个solidbody实体中的所有边的tag标识
    """
    uf_modling_instance = the_pyuf_session.Modeling
    edgeTagList = uf_modling_instance.AskBodyEdges(solid_body_tag)
    return edgeTagList

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_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_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_feature_body(the_pyuf_session, feature_tag):
	"""
	查询特征所属body的tag
	"""
	uf_modeling_instance = the_pyuf_session.Modeling
	return uf_modeling_instance.AskFeatBody(feature_tag)

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"

def get_face_data(the_pyuf_session, face_tag):
    """
    查询面的数据
    [返回值]一个元组 (type-int, 
    face point-list of float, 
    dir-list of float, 
    Face boundary-list of float, 
    Face major radius-float, 
    Face minor radius-float, 
    Face normal direction-int)
    其中元组0位置:
    cylinder-16、cone-17 、sphere-18 、revolved (toroidal)-19
    extruded-20 、bounded plane-22 、fillet (blend)-23 、b-surface-43
    offset surface-65 、foreign surface-66、Convergent surface-67
    """

    uf_modeling_instance = the_pyuf_session.Modeling
    return uf_modeling_instance.AskFaceData(face_tag)

def createBlock(the_pyuf_session, corner_point, size, signs = 0):
	"""
	python uf创建块(长方体)

	corner_point-float list[x,y,z]:长方体角点坐标,size-str list[x_size, y_size,z_size]:块长宽高尺寸

	返回值是一个整数:块的feature tag标识
	
	signs意义:
	UF_NULLSIGN = 0
	create new target solid

	UF_POSITIVE = 1
	add to target solid

	UF_NEGATIVE = 2
	subtract from target solid

	UF_UNSIGNED = 3
	intersect with target solid

	UF_NO_BOOLEAN = 4
	feature has not been booleaned

	UF_TOP_TARGET = 5
	feature is the "top target" feature, it has no
	"parent" features but does have tool features

	UF_UNITE = 6
	feature has been united to target solid

	UF_SUBTRACT = 7
	feature has been subtracted from target solid

	UF_INTERSECT = 8
	feature has been intersected with target solid

	UF_DEFORM_POSITIVE = 9
	feature used to deform the positive side
	of the target sheet

	UF_DEFORM_NEGATIVE = 10
	feature used to deform the negative side
	of the target sheet
	"""

	uf_modlFeatures_instance = the_pyuf_session.ModlFeatures
	uf_modl_instance = the_pyuf_session.Modl
	modl_feature_signs = UF.Modl.FeatureSigns.ValueOf(signs)
	return uf_modlFeatures_instance.CreateBlock1(modl_feature_signs, corner_point, size)

def setCorlor(the_pyuf_session, object_tag, color_id = 0):
    """
    给UG对象设置颜色(面、特征、体等)
    """
    uf_obj_instance = the_pyuf_session.Obj
    return uf_obj_instance.SetColor(object_tag, color_id)

def createChafmer(the_pyuf_session, subtype, offset1, offset2, theta, edges):
    """
    python uf创建边的倒斜角

    subtype-int:1-单向偏置、2-双向偏置、3-偏置和角度、4-自由单向偏置、5-自由双向偏置,
    offset1-str:偏置值1,offset2-str:偏置值2,theta-str:倒斜角角度值,edges-int list:要倒斜角实体边的tag列表

    返回:倒斜角feature tag标识
    """
    uf_modeling_instance = the_pyuf_session.Modeling
    return uf_modeling_instance.CreateChamfer(subtype, offset1, offset2, theta, edges)

def createBlend(the_pyuf_session, radius, edge_list, smooth_overflow = 1, cliff_overflow = 1, notch_overflow = 1, vrb_tool = 0.0001):
    """
    python uf创建边的倒圆角

    radius-str:倒圆角半径,edge_list-int list:要倒圆角实体边的tag列表,
    smooth_overflow-int:倒圆角平滑溢出值、0-允许这种类型倒圆、1-防止这种类型倒圆,
    cliff_overflow-int:倒圆角峭壁溢出值、0-允许这种类型倒圆、1-防止这种类型倒圆,
    notch_overflow-int:倒圆角凹槽溢出值、0-允许这种类型倒圆、1-防止这种类型倒圆,
    vrb_tool-float:倒圆角公差

    返回:倒圆角feature tag标识
    """
    uf_modlFeatures_instance = the_pyuf_session.ModlFeatures
    return uf_modlFeatures_instance.CreateBlend(radius, edge_list, smooth_overflow, cliff_overflow, notch_overflow, vrb_tool)


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

    # 获取python session
    the_py_session = get_py_session()

    # 新建prt文件路径与名称
    new_prt_file_name = 'D:\\pyuf_chamfer_blend.prt'
    new_prt_file_tag = pyuf_new_prt(the_pyuf_session, new_prt_file_name)


    # 创建长方体
    block_feature_tag = createBlock(the_pyuf_session, [100.0, 100.0, 100.0], ['250.0', '450.0', '80.0'])
    """
    1.当前的3D模型是一个简单的长方体
    """

    # 从某个特征上查询该特征所属的实体
    block_body_tag = get_feature_body(the_pyuf_session, block_feature_tag)
    # 获取实体上所有边tag
    block_body_edge_tag_list = get_solid_body_edge_tags(the_pyuf_session, block_body_tag)
    # 平行于Z轴的竖直边tag
    parallel_z_edge_tag_list = []
    # [edge_type, edgeTypeString, edge_data[2], edge_data[0], edge_data[1]]
    # 长方体上下两个平面外轮廓边倒斜角 2mm 45°
    for item_edge in block_body_edge_tag_list:
        item_edge_point_info_list = get_solid_body_face_edge_points(the_pyuf_session, item_edge)
        item_edge_dir = [item_edge_point_info_list[3][0] - item_edge_point_info_list[4][0], 
                        item_edge_point_info_list[3][1] - item_edge_point_info_list[4][1],
                        item_edge_point_info_list[3][2] - item_edge_point_info_list[4][2],
                        ]
        #print("item_edge_dir:", item_edge_dir)
        if math.fabs(item_edge_dir[0] - 0.000000) <= 1e-6 \
        and math.fabs(item_edge_dir[1] - 0.000000) <= 1e-6 \
        and item_edge_dir[2] != 0.000000:
            # item_edge_dir平行于Z轴
            parallel_z_edge_tag_list.append(item_edge)
    print("parallel_z_edge_tag_list:", parallel_z_edge_tag_list)
    # 垂平行于Z轴的竖直边倒圆角半径20mm
    parallel_z_edge_blend_feature_tag = createBlend(the_pyuf_session, "20.0", parallel_z_edge_tag_list)
    # 找到当前3D实体的tag(从特征上查询该特征所属的实体)
    """
    2.当前的3D模型是一个4条平行于Z轴竖直边倒圆角半径20mm的长方体
    """

    # 从某个特征上查询该特征所属的实体
    block_body_tag = get_feature_body(the_pyuf_session, parallel_z_edge_blend_feature_tag)
    # 获取实体上所有面tag
    block_body_face_tag_list = get_solid_body_face_tags(the_pyuf_session, block_body_tag)
    print("block_body_face_tag_list:", block_body_face_tag_list)
    # 垂直于Z轴的平面tag
    vertical_z_face_tag_list = []
    for item_face in block_body_face_tag_list:
        item_face_data_tuple = get_face_data(the_pyuf_session, item_face)
        print("item_face_data_tuple:", item_face_data_tuple)
        if item_face_data_tuple[0] == 22:
            # 是平面类型
            if math.fabs(math.fabs(item_face_data_tuple[2][0]) - 0.000000) <= 1e-6 \
            and math.fabs(math.fabs(item_face_data_tuple[2][1]) - 0.000000) <= 1e-6 \
            and math.fabs(item_face_data_tuple[2][2]) != 0.000000:
                # 面的法线平行于Z轴即平面垂直于Z轴
                vertical_z_face_tag_list.append(item_face)
    print("vertical_z_face_tag_list:", vertical_z_face_tag_list)

    vertical_z_face_edge_chafmer_feature_tag = 0
    for item_face in vertical_z_face_tag_list:
        item_face_edge_tag_list = get_solid_body_face_edge_tags(the_pyuf_session, item_face)
        vertical_z_face_edge_chafmer_feature_tag = createChafmer(the_pyuf_session, 1, "2.000000", "2.000000", "45", item_face_edge_tag_list)

    # 从某个特征上查询该特征所属的实体
    block_body_tag = get_feature_body(the_pyuf_session, vertical_z_face_edge_chafmer_feature_tag)
    setCorlor(the_pyuf_session, block_body_tag, 166)

    # 保存.prt
    pyuf_save_prt(the_pyuf_session)
    # 关闭.prt
    pyuf_close_prt(the_pyuf_session, new_prt_file_tag, 0, 1)

4.运行结果

4.1 内部模式

选中要运行的.py文件后,点击“管道通路”即可。
在这里插入图片描述

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

4.2 外部模式

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

运行结果:
在这里插入图片描述
同上
其中,检查输出内容:
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

逐步掌握最佳Ai Agents框架-AutoGen 三 写新闻稿新方式

前言 今天带来的仍然是AutoGen基于AssistantAgent和UserProxyAgent的例子&#xff0c;以帮助大家一起消化目前最前卫的AI应用框架。这是一个AIGC最擅长&#xff0c;因为生成新闻稿嘛&#xff0c;同时又需要利用Agent的一个常规Demo。了解LangChain的同学&#xff0c;会通过对比…

C++基础编程100题-004 OpenJudge-1.1-06 空格分隔输出

更多资源请关注纽扣编程微信公众号 http://noi.openjudge.cn/ch0101/06/ 描述 读入一个字符&#xff0c;一个整数&#xff0c;一个单精度浮点数&#xff0c;一个双精度浮点数&#xff0c;然后按顺序输出它们&#xff0c;并且要求在他们之间用一个空格分隔。输出浮点数时保留…

v1.2.70-FastJson的AutoType机制研究

v1.2.70-FastJson的AutoType机制研究 最近在对接Alexa亚马逊语音技能&#xff0c;Smart Home Skill Apis时&#xff0c;有一个配置的JSON字符串是这样的&#xff1a; { "capabilityResources": {"friendlyNames": [{"type": "asset",…

智慧农业灌溉系统的主要工作原理

一、概述   智慧农业灌溉系统是一种基于传感器技术和智能控制技术的灌溉系统。它能够根据土壤湿度、气象条件、作物需水量等多种因素&#xff0c;自动控制灌溉水量和灌溉时间&#xff0c;实现精准灌溉。相比传统的手动灌溉和定时灌溉&#xff0c;智慧农业灌溉系统更加高效、准…

【Kubernetes】9-Pod控制器

一、什么是 pod 的控制器 Pod控制器&#xff0c;又称之为工作负载&#xff08;workload&#xff09;&#xff0c;是用于实现管理pod的中间层 确保pod资源符合预期状态&#xff1b;pod的资源故障时会进行重启&#xff1b; 当重启策略无效时&#xff0c;则会重新新建pod的资源 二…

通过ssr-echarts,服务端生成echarts图

ssr-echarts &#xff1a;一个开源项目&#xff0c;它能够服务端渲染 ECharts 图表&#xff0c;并直接生成 PNG 图片返回。该项目提供了多种主题&#xff0c;并且支持 GET 和 POST 请求。如果参数较多&#xff0c;建议使用 POST 方法。用户可以自己部署这个服务。 1. 服务端安装…

uniapp打包网页版配置页面窗口标题

问题描述&#xff1a; 项目场景&#xff1a;在uniapp打包网页的时候会出现项目标题为&#xff1a;uni-app 原因分析&#xff1a; 当时是直接在这里面修改的&#xff0c;但是打包之后发现标题还是没有改过来 解决方案&#xff1a; 后来才发现这里修改是没有用的&#xff0…

最新OpenAI免费API-openai api key获取方式

最近又开始准备LLM 应用开发&#xff0c;要用到api key&#xff0c;才发现过我之前免费发放的额度没了&#xff01;我都没咋用过&#xff0c;痛心&#x1f62d;&#x1f62d;&#x1f62d;&#xff01; 现在 OpenAI 有要求必须充值 5 刀才能使用&#xff0c;问就是没钱&#x…

人工智能芯片封装技术及应用趋势分析

简介人工智能&#xff08;AI&#xff09;、物联网&#xff08;IoT&#xff09;和大数据的融合正在开创全新的智能时代&#xff0c;以智能解决方案改变各行各业。人工智能芯片在支持人工智能学习和推理计算方面发挥着非常重要的作用&#xff0c;可实现各行各业的多样化应用。 本…

Arduino网页服务器:如何将Arduino开发板用作Web服务器

大家好&#xff0c;我是咕噜铁蛋&#xff01;今天&#xff0c;我将和大家分享一个有趣且实用的项目——如何使用Arduino开发板搭建一个简易的网页服务器。通过这个项目&#xff0c;你可以将Arduino连接到互联网&#xff0c;并通过网页控制或查询Arduino的状态。 一、项目背景与…

C#——随机类Random类

Random类 C#的Random类是用于生成随机数的类&#xff0c;属于System命名空间&#xff0c;可以生成各种类型的随机数&#xff0c;例如整型、双精度浮点型、布尔型等。 使用方法&#xff1a; 使用random数据类型关键字 声明一个random的变量 值使用new random 来实例化这个变量…

基于STM32开发的智能农业灌溉控制系统

目录 引言环境准备智能农业灌溉控制系统基础代码实现&#xff1a;实现智能农业灌溉控制系统 4.1 土壤湿度传感器数据读取4.2 水泵控制4.3 环境监测与数据记录4.4 用户界面与多功能显示应用场景&#xff1a;农业灌溉与环境监测问题解决方案与优化收尾与总结 1. 引言 随着农业…

大模型+编程,未来程序员躺平还是失业?

前言 随着科技的飞速发展&#xff0c;大模型与编程技术的结合正在逐步改变着我们的世界。**在这样的背景下&#xff0c;很多程序员开始担忧&#xff1a;未来的我们&#xff0c;是会“躺平”享受技术的红利&#xff0c;还是会因为技术变革而面临失业的风险&#xff1f;**今天&a…

Linuxftp服务001匿名登入

在Linux系统中搭建FTP&#xff08;File Transfer Protocol&#xff09;服务&#xff0c;可以让用户通过网络在服务器与其他客户端之间传输文件。它有几种登入模式&#xff0c;今天我们讲一下匿名登入。 操作系统 CentOS Stream9 操作步骤 首先我们先下载ftp [rootlocalhost…

使用Matlab软件绘制函数图像

【实验目的】 1.利用Matlab实现平面上曲线和三维空间中曲线绘制&#xff0c;重点掌握隐函数、极坐标图像绘制的相关命令。 2.利用Matlab实现三维曲面绘制&#xff0c;加深对高等数学课程所学内容的理解 【实验内容与实现】 1、用两种方法绘制下面的曲线图 &#xff08;1&am…

区块链游戏(链游)安全防御:抵御攻击的策略与实践

一、引言 区块链游戏&#xff0c;或称为链游&#xff0c;近年来随着区块链技术的普及而迅速崛起。然而&#xff0c;如同其他任何在线平台一样&#xff0c;链游也面临着各种安全威胁。本文将探讨链游可能遭遇的攻击类型以及如何通过有效的策略和技术手段进行防御。 二、链游可…

3072. 将元素分配到两个数组中 II Rust 线段树 + 离散化

题目 给你一个下标从 1 开始、长度为 n 的整数数组 nums 。 现定义函数 greaterCount &#xff0c;使得 greaterCount(arr, val) 返回数组 arr 中 严格大于 val 的元素数量。 你需要使用 n 次操作&#xff0c;将 nums 的所有元素分配到两个数组 arr1 和 arr2 中。在第一次操…

完美解决 mysql 报错ERROR 1524 (HY000): Plugin ‘mysql_native_password‘ is not loaded

文章目录 错误描述错误原因解决步骤 跟着我下面的步骤走&#xff0c;解决你的问题&#xff0c;如果解决不了 私信我来给你解决 错误描述 执行ALTER USER root% IDENTIFIED WITH mysql_native_password BY 123456;报错ERROR 1524 (HY000): Plugin mysql_native_password is not …

PPT的文件怎么做二维码?适合多种文件使用的二维码制作技巧

现在很多人会将ppt文件转换成二维码之后&#xff0c;分享给其他人查看&#xff0c;比如常见的有学习资料、作品展示、个人简历、方案计划等内容都可以通过生成二维码的方式来提供展示。通过手机扫码就能够快速预览文件内容&#xff0c;与使用邮箱或网盘传输相比&#xff0c;更加…

SpaceX 首席火箭着陆工程师 MIT论文详解:非凸软着陆最优控制问题的控制边界和指向约束的无损凸化

上一篇blog翻译了 Lars Blackmore(Lars Blackmore is principal rocket landing engineer at SpaceX)的文章&#xff0c;SpaceX 使用 CVXGEN 生成定制飞行代码,实现超高速机载凸优化。利用地形相对导航实现了数十米量级的导航精度,着陆器在着陆过程中成像行星表面并将特征与机载…