Open CASCADE学习|分割

news2025/1/25 4:37:03

目录

1、添加头文件与源文件

GEOMAlgo_Splitter.h

GEOMAlgo_Splitter.cpp

2、测试

2.1平面分割立方体

2.2以边分面

2.3以面分面


1、添加头文件与源文件

GEOMAlgo_Splitter.h

// Copyright (C) 2007-2019  CEA/DEN, EDF R&D, OPEN CASCADE//// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS//// This library is free software; you can redistribute it and/or// modify it under the terms of the GNU Lesser General Public// License as published by the Free Software Foundation; either// version 2.1 of the License, or (at your option) any later version.//// This library is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU// Lesser General Public License for more details.//// You should have received a copy of the GNU Lesser General Public// License along with this library; if not, write to the Free Software// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA//// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com////  File:   GEOMAlgo_Splitter.hxx////  Author: Peter KURNEV#ifndef GEOMAlgo_Splitter_HeaderFile#define GEOMAlgo_Splitter_HeaderFile#include <Standard.hxx>#include <Standard_Macro.hxx>#include <Standard_Boolean.hxx>#include <Standard_Integer.hxx>#include <NCollection_BaseAllocator.hxx>#include <TopAbs_ShapeEnum.hxx>#include <TopoDS_Shape.hxx>#include <TopTools_ListOfShape.hxx>#include <TopTools_MapOfShape.hxx>#include <BOPAlgo_Builder.hxx>//=======================================================================//class    : GEOMAlgo_Splitter//purpose  ://=======================================================================class GEOMAlgo_Splitter : public BOPAlgo_Builder{public:    Standard_EXPORT        GEOMAlgo_Splitter();    Standard_EXPORT        GEOMAlgo_Splitter(const Handle(NCollection_BaseAllocator)& theAllocator);    Standard_EXPORT        virtual ~GEOMAlgo_Splitter();    Standard_EXPORT        void AddTool(const TopoDS_Shape& theShape);    Standard_EXPORT        const TopTools_ListOfShape& Tools()const;    Standard_EXPORT        void SetLimit(const TopAbs_ShapeEnum aLimit);    Standard_EXPORT        TopAbs_ShapeEnum Limit()const;    Standard_EXPORT        void SetLimitMode(const Standard_Integer aMode);    Standard_EXPORT        Standard_Integer LimitMode()const;    Standard_EXPORT        virtual void Clear();protected:    Standard_EXPORT        virtual void BuildResult(const TopAbs_ShapeEnum theType);    Standard_EXPORT        virtual void PostTreat();protected:    TopTools_ListOfShape myTools;    TopTools_MapOfShape myMapTools;    TopAbs_ShapeEnum myLimit;    Standard_Integer myLimitMode;};#endif

GEOMAlgo_Splitter.cpp

// Copyright (C) 2007-2019  CEA/DEN, EDF R&D, OPEN CASCADE//// Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS//// This library is free software; you can redistribute it and/or// modify it under the terms of the GNU Lesser General Public// License as published by the Free Software Foundation; either// version 2.1 of the License, or (at your option) any later version.//// This library is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU// Lesser General Public License for more details.//// You should have received a copy of the GNU Lesser General Public// License along with this library; if not, write to the Free Software// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA//// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com//// File:        GEOMAlgo_Splitter.cxx// Created:     Thu Sep 06 10:54:04 2012// Author:      Peter KURNEV//              <pkv@irinox>//#include"GEOMAlgo_Splitter.h"#include <TopAbs_ShapeEnum.hxx>#include <TopoDS_Shape.hxx>#include <TopoDS_Compound.hxx>#include <TopoDS_Iterator.hxx>#include <BRep_Builder.hxx>#include <TopTools_MapOfShape.hxx>#include <TopTools_ListOfShape.hxx>#include <TopExp.hxx>staticvoid TreatCompound(const TopoDS_Shape& aC,    TopTools_ListOfShape& aLSX);//=======================================================================//function : //purpose  : //=======================================================================GEOMAlgo_Splitter::GEOMAlgo_Splitter()    :    BOPAlgo_Builder(),    myTools(myAllocator),    myMapTools(100, myAllocator){    myLimit = TopAbs_SHAPE;    myLimitMode = 0;}//=======================================================================//function : //purpose  : //=======================================================================GEOMAlgo_Splitter::GEOMAlgo_Splitter(const Handle(NCollection_BaseAllocator)& theAllocator)    :    BOPAlgo_Builder(theAllocator),    myTools(myAllocator),    myMapTools(100, myAllocator){    myLimit = TopAbs_SHAPE;    myLimitMode = 0;}//=======================================================================//function : ~//purpose  : //=======================================================================GEOMAlgo_Splitter::~GEOMAlgo_Splitter(){}//=======================================================================//function : AddTool//purpose  : //=======================================================================void GEOMAlgo_Splitter::AddTool(const TopoDS_Shape& theShape){    if (myMapTools.Add(theShape)) {        myTools.Append(theShape);        //        AddArgument(theShape);    }}//=======================================================================//function : Tools//purpose  : //=======================================================================const TopTools_ListOfShape& GEOMAlgo_Splitter::Tools()const{    return myTools;}//=======================================================================//function : SetLimit//purpose  : //=======================================================================void GEOMAlgo_Splitter::SetLimit(const TopAbs_ShapeEnum aLimit){    myLimit = aLimit;}//=======================================================================//function : Limit//purpose  : //=======================================================================TopAbs_ShapeEnum GEOMAlgo_Splitter::Limit()const{    return myLimit;}//=======================================================================//function : SetLimitMode//purpose  : //=======================================================================void GEOMAlgo_Splitter::SetLimitMode(const Standard_Integer aMode){    myLimitMode = aMode;}//=======================================================================//function : LimitMode//purpose  : //=======================================================================Standard_Integer GEOMAlgo_Splitter::LimitMode()const{    return myLimitMode;}//=======================================================================//function : Clear//purpose  : //=======================================================================void GEOMAlgo_Splitter::Clear(){    myTools.Clear();    myMapTools.Clear();    myLimit = TopAbs_SHAPE;    BOPAlgo_Builder::Clear();}//=======================================================================//function : BuildResult//purpose  : //=======================================================================void GEOMAlgo_Splitter::BuildResult(const TopAbs_ShapeEnum theType){    TopAbs_ShapeEnum aType;    BRep_Builder aBB;    TopTools_MapOfShape aM;    TopTools_ListIteratorOfListOfShape aIt, aItIm;    //    aIt.Initialize(myArguments);    for (; aIt.More(); aIt.Next()) {        const TopoDS_Shape& aS = aIt.Value();        aType = aS.ShapeType();        if (aType == theType && !myMapTools.Contains(aS)) {            if (myImages.IsBound(aS)) {                const TopTools_ListOfShape& aLSIm = myImages.Find(aS);                aItIm.Initialize(aLSIm);                for (; aItIm.More(); aItIm.Next()) {                    const TopoDS_Shape& aSIm = aItIm.Value();                    if (aM.Add(aSIm)) {                        aBB.Add(myShape, aSIm);                    }                }            }            else {                if (aM.Add(aS)) {                    aBB.Add(myShape, aS);                }            }        }    }}//=======================================================================//function : PostTreat//purpose  : //=======================================================================void GEOMAlgo_Splitter::PostTreat(){    if (myLimit != TopAbs_SHAPE) {        Standard_Integer i, aNbS;        BRep_Builder aBB;        TopoDS_Compound aC;        TopTools_IndexedMapOfShape aMx;        //        aBB.MakeCompound(aC);        //        TopExp::MapShapes(myShape, myLimit, aMx);        aNbS = aMx.Extent();        for (i = 1; i <= aNbS; ++i) {            const TopoDS_Shape& aS = aMx(i);            aBB.Add(aC, aS);        }        if (myLimitMode) {            Standard_Integer iType, iLimit, iTypeX;            TopAbs_ShapeEnum aType, aTypeX;            TopTools_ListOfShape aLSP, aLSX;            TopTools_ListIteratorOfListOfShape aIt, aItX, aItIm;            TopTools_MapOfShape  aM;            //            iLimit = (Standard_Integer)myLimit;            //            // 1. Collect the shapes to process aLSP            aIt.Initialize(myArguments);            for (; aIt.More(); aIt.Next()) {                const TopoDS_Shape& aS = aIt.Value();                if (myMapTools.Contains(aS)) {                    continue;                }                //                aType = aS.ShapeType();                iType = (Standard_Integer)aType;                //                if (iType > iLimit) {                    aLSP.Append(aS);                }                //                else if (aType == TopAbs_COMPOUND) {                    aLSX.Clear();                    //                    TreatCompound(aS, aLSX);                    //                    aItX.Initialize(aLSX);                    for (; aItX.More(); aItX.Next()) {                        const TopoDS_Shape& aSX = aItX.Value();                        aTypeX = aSX.ShapeType();                        iTypeX = (Standard_Integer)aTypeX;                        //                        if (iTypeX > iLimit) {                            aLSP.Append(aSX);                        }                    }                }            }// for (; aIt.More(); aIt.Next()) {            //            aMx.Clear();            TopExp::MapShapes(aC, aMx);            // 2. Add them to aC            aIt.Initialize(aLSP);            for (; aIt.More(); aIt.Next()) {                const TopoDS_Shape& aS = aIt.Value();                if (myImages.IsBound(aS)) {                    const TopTools_ListOfShape& aLSIm = myImages.Find(aS);                    aItIm.Initialize(aLSIm);                    for (; aItIm.More(); aItIm.Next()) {                        const TopoDS_Shape& aSIm = aItIm.Value();                        if (aM.Add(aSIm)) {                            if (!aMx.Contains(aSIm)) {                                aBB.Add(aC, aSIm);                            }                        }                    }                }                else {                    if (aM.Add(aS)) {                        if (!aMx.Contains(aS)) {                            aBB.Add(aC, aS);                        }                    }                }            }        }// if (myLimitMode) {        myShape = aC;    }//if (myLimit!=TopAbs_SHAPE) {    //    Standard_Integer aNbS;    TopoDS_Iterator aIt;    TopTools_ListOfShape aLS;    //    aIt.Initialize(myShape);    for (; aIt.More(); aIt.Next()) {        const TopoDS_Shape& aS = aIt.Value();        aLS.Append(aS);    }    aNbS = aLS.Extent();    if (aNbS == 1) {        myShape = aLS.First();    }    //    //BOPAlgo_Builder::PostTreat();}//=======================================================================//function : TreatCompound//purpose  : //=======================================================================void TreatCompound(const TopoDS_Shape& aC1,    TopTools_ListOfShape& aLSX){    Standard_Integer aNbC1;    TopAbs_ShapeEnum aType;    TopTools_ListOfShape aLC, aLC1;    TopTools_ListIteratorOfListOfShape aIt, aIt1;    TopoDS_Iterator aItC;    //    aLC.Append(aC1);    for (;;) {        aLC1.Clear();        aIt.Initialize(aLC);        for (; aIt.More(); aIt.Next()) {            const TopoDS_Shape& aC = aIt.Value(); //C is compound            //            aItC.Initialize(aC);            for (; aItC.More(); aItC.Next()) {                const TopoDS_Shape& aS = aItC.Value();                aType = aS.ShapeType();                if (aType == TopAbs_COMPOUND) {                    aLC1.Append(aS);                }                else {                    aLSX.Append(aS);                }            }        }        //        aNbC1 = aLC1.Extent();        if (!aNbC1) {            break;        }        //        aLC.Clear();        aIt.Initialize(aLC1);        for (; aIt.More(); aIt.Next()) {            const TopoDS_Shape& aSC = aIt.Value();            aLC.Append(aSC);        }    }// while(1)}//// myErrorStatus// // 0  - Ok// 1  - The object is just initialized// 2  - PaveFiller is failed// 10 - No shapes to process// 30 - SolidBuilder failed

2、测试

2.1平面分割立方体

#include <BRepPrimAPI_MakeBox.hxx>#include"GEOMAlgo_Splitter.h"#include <gp_Pln.hxx>#include <BRepBuilderAPI_MakeFace.hxx>#include <TopExp_Explorer.hxx>#include"Viewer.h"int main(int argc, char* argv[]){    gp_Pnt p0 = gp_Pnt(5, 5, 5);    gp_Dir vnorm = gp_Dir(1, 1, 1);    gp_Pln pln = gp_Pln(p0, vnorm);    TopoDS_Face face = BRepBuilderAPI_MakeFace(pln, -10, 10, -10, 10).Face();    TopoDS_Shape box = BRepPrimAPI_MakeBox(10, 10, 10).Shape();    //启动分割函数    GEOMAlgo_Splitter splitter = GEOMAlgo_Splitter();    //将box作为参数,将面face作为分割工具。    splitter.AddArgument(box);    splitter.AddTool(face);    splitter.Perform();    Viewer vout(50, 50, 500, 500);    //显示分割后的体    for (TopExp_Explorer i(splitter.Shape(), TopAbs_SOLID); i.More(); i.Next())    {        vout << i.Current();    }    vout << face;    vout.StartMessageLoop();    return 0;}

#include <BRepPrimAPI_MakeBox.hxx>#include"GEOMAlgo_Splitter.h"#include <gp_Pln.hxx>#include <BRepBuilderAPI_MakeFace.hxx>#include <TopExp_Explorer.hxx>#include"Viewer.h"int main(int argc, char* argv[]){    gp_Pnt p0 = gp_Pnt(5, 5, 5);    gp_Dir vnorm = gp_Dir(1, 1, 1);    gp_Pln pln = gp_Pln(p0, vnorm);    TopoDS_Face face = BRepBuilderAPI_MakeFace(pln, -10, 10, -10, 10).Face();    TopoDS_Shape box = BRepPrimAPI_MakeBox(10, 10, 10).Shape();    //启动分割函数    GEOMAlgo_Splitter splitter = GEOMAlgo_Splitter();    //将box作为参数,将面face作为分割工具。    splitter.AddArgument(box);    splitter.AddTool(face);    splitter.Perform();    Viewer vout(50, 50, 500, 500);    //显示分割后的体    TopExp_Explorer i(splitter.Shape(), TopAbs_SOLID);    i.Next();    vout << i.Current();    vout << face;    vout.StartMessageLoop();    return 0;}

2.2以边分面

#include <vector>#include <gp_Pnt.hxx>#include <gp_Circ.hxx>#include <gp_Pln.hxx>#include <BRepBuilderAPI_MakeFace.hxx>#include <BRepBuilderAPI_MakeEdge.hxx>#include"Viewer.h"#include"GEOMAlgo_Splitter.h"#include <TopExp_Explorer.hxx>int main(int argc, char* argv[]){    gp_Pnt p0 = gp_Pnt();    gp_Dir vnorm = gp_Dir(1, 0, 0);    gp_Pln pln = gp_Pln(p0, vnorm);    TopoDS_Shape face = BRepBuilderAPI_MakeFace(pln, -10, 10, -10, 10);    gp_Pnt p1 = gp_Pnt(0, 0, 15);    gp_Pnt p2 = gp_Pnt(0, 0, -15);    TopoDS_Shape edge = BRepBuilderAPI_MakeEdge(p1, p2);    //启动分割函数    GEOMAlgo_Splitter splitter = GEOMAlgo_Splitter();     //将面作为参数,将边edge作为分割工具。    splitter.AddArgument(face);    splitter.AddTool(edge);    splitter.Perform();    //显示分割后的体    TopExp_Explorer i(splitter.Shape(), TopAbs_FACE);    i.Next();    Viewer vout(50, 50, 500, 500);    vout << i.Current();    vout << edge;    vout.StartMessageLoop();             return 0;}

2.3以面分面

#include <vector>#include <gp_Pnt.hxx>#include <gp_Circ.hxx>#include <gp_Pln.hxx>#include <BRepBuilderAPI_MakeFace.hxx>#include <BRepBuilderAPI_MakeEdge.hxx>#include"Viewer.h"#include"GEOMAlgo_Splitter.h"#include <TopExp_Explorer.hxx>int main(int argc, char* argv[]){    //第一个面    gp_Pnt p0 = gp_Pnt(5, 5, 5);    gp_Dir vnorm = gp_Dir(1, 1, 1);    gp_Pln pln = gp_Pln(p0, vnorm);    TopoDS_Shape face1 = BRepBuilderAPI_MakeFace(pln, -10, 10, -10, 10);    //工具面    vnorm = gp_Dir(1, 1, 0);    pln = gp_Pln(p0, vnorm);    TopoDS_Shape face2 = BRepBuilderAPI_MakeFace(pln, -20, 20, -20, 20);     //启动分割函数    GEOMAlgo_Splitter splitter = GEOMAlgo_Splitter();     //将面作为参数,将边edge作为分割工具。    splitter.AddArgument(face1);    splitter.AddTool(face2);    splitter.Perform();    //显示分割后的体    TopExp_Explorer i(splitter.Shape(), TopAbs_FACE);    i.Next();    Viewer vout(50, 50, 500, 500);    vout << i.Current();    vout << face2;    vout.StartMessageLoop();             return 0;}

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

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

相关文章

【打工日常】使用docker部署Dashdot工具箱

一、Dashdot介绍 dashdot是一个简洁清晰的服务器数据仪表板&#xff0c;基于React实现 &#xff0c;主要是显示操作系统、进程、存储、内存、网络这五个的数据。 二、本次实践介绍 1. 本次实践简介 本次实践部署环境为个人测试环境 2. 本地环境规划 本次实践环境规划&#xf…

解锁Spring Boot中的设计模式—02.解释器模式:探索【解释器模式】的奥秘与应用实践!

解释器模式 1.简介 解释器模式&#xff08;Interpreter Pattern&#xff09;是一种行为设计模式&#xff0c;它用于定义语言的文法&#xff0c;并且解释语言中的表达式。在Java中&#xff0c;解释器模式可以用于构建解释器以解析特定的语言或表达式&#xff0c;如数学表达式、…

x86使用内敛汇编实现简单的临界段保护

临界资源保护 实现方法 禁用中断 __attribute__((used)) static inline uint32_t read_eflags (void){uint32_t eflags;ASM_V("pushf\n\tpop %%eax":"a"(eflags));return eflags; } __attribute__((used)) static inline void write_eflags (uint32_t e…

002 GIS数据的基本格式

1 地理空间信息 地理空间信息的数据模型是现实世界的特征组到理想状态的简化或抽象&#xff0c; 并且可以在各种GIS软件的用户使用层&#xff08;结构化&#xff09;模型有很多。 该层模型由多个空间数据的分层构建&#xff0c;如 图 1.5 。 根据内容&#xff0c;离散特征信息…

Win32汇编数组学习2

之前学习过win32汇编数组&#xff1b;还不熟悉&#xff1b;继续熟悉&#xff1b; 先做几个基本的对话框&#xff0c;有一个静态文本框&#xff1b; 定义数组之后&#xff0c;用 wsprintf 函数格式化&#xff0c;然后调用 SetDlgItemText 赋值给静态文本框&#xff1b; arr1 …

ARM 之十六 详解 CMSIS 版本变迁、各组件使用示例

目前,CMSIS 已经发展到了第六版,其目录结构也发生了重大的变化。在不断发展中,很多原来 CMSIS 的组件被不断独立出去,并因此成立了很多开源社区,今天就来学习一下! 由于 CMSIS 已经包含了相当丰富的文档,因此,本文重点学习版本之间的变化以及一些实际使用示例。 什么是…

第11章 GUI

11.1 Swing概述 Swing是Java语言开发图形化界面的一个工具包。它以抽象窗口工具包&#xff08;AWT&#xff09;为基础&#xff0c;使跨平台应用程序可以使用可插拔的外观风格。Swing拥有丰富的库和组件&#xff0c;使用非常灵活&#xff0c;开发人员只用很少的代码就可以创建出…

2024年还在持续热门的头像壁纸项目,取图小程序是怎么搭建的,头像壁纸项目为什么还在持续有在发展分析看文

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 目录 文章目录 前言 一、壁纸取图小程序项目为什么可以这么久还能兴起&#xff1f; 二、壁纸取图小程序功能介绍 1.功能介绍 总结 前言 兴起了好几年的壁纸取图小程序项目目…

【leetcode题解C++】51.N皇后 and 76.最小覆盖子串

51. N皇后 按照国际象棋的规则&#xff0c;皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上&#xff0c;并且使皇后彼此之间不能相互攻击。 给你一个整数 n &#xff0c;返回所有不同的 n 皇后问题 的解决方…

OpenGL学习——15.投光物_聚光

前情提要&#xff1a;本文代码源自Github上的学习文档“LearnOpenGL”&#xff0c;我仅在源码的基础上加上中文注释。本文章不以该学习文档做任何商业盈利活动&#xff0c;一切著作权归原作者所有&#xff0c;本文仅供学习交流&#xff0c;如有侵权&#xff0c;请联系我删除。L…

《Go 简易速速上手小册》第10章:微服务与云原生应用(2024 最新版)

文章目录 10.1 构建微服务架构 - 探索 Go 语言的微观世界10.1.1 基础知识讲解10.1.2 重点案例&#xff1a;订单处理系统订单服务测试服务 10.1.3 拓展案例 1&#xff1a;用户认证服务安装所需的包实现用户模型和存储实现 JWT 生成和验证实现认证服务测试服务 10.1.4 拓展案例 2…

166基于matlab的通过峭度指标与互相关系数筛选IMF进行SVD分解去噪

基于matlab的通过峭度指标与互相关系数筛选IMF进行SVD分解去噪&#xff0c;分辨虚假imf&#xff0c;提取最大峭度imf图。输出去噪前后时域及其包络谱结果。程序已调通&#xff0c;可直接运行。 166 matlab SVD去噪 IMF筛选 包络谱 (xiaohongshu.com)

C语言题目:一些简单的编程和递归题目

以下的题目的较难的点都在注释里面讲解清楚了 一. 1.喝汽水&#xff0c;1瓶汽水1元&#xff0c;2个空瓶可以换一瓶汽水&#xff0c;给20元&#xff0c;可以喝多少汽水&#xff08;编程实现&#xff09;。 代码实现&#xff1a; int main() {int money 20;int price 1;int e…

PyCharm 格式化代码 (Reformat Code)

PyCharm 格式化代码 [Reformat Code] 1. Ctrl A2. Code -> Reformat Code (自动调整代码格式 - 自动规范化代码)References 1. Ctrl A 全选代码。 2. Code -> Reformat Code (自动调整代码格式 - 自动规范化代码) 格式化快捷键为 Ctrl Alt L&#xff0c;但是和锁屏…

【Python】【Pycharm】Python Script头文件设置

1、步骤&#xff1a;File->settings->Editor->File and CodeTemplates->Python Script 2、复制粘贴以下代码&#xff0c;应用即可&#xff1a; #!/usr/bin/env python# -*- coding: utf-8 -*-# Time :${DATE} ${TIME}# Author : admin# Site :${SITE}# Fi…

docker (七)-部署容器

实战开始&#xff1a; 1 docker 部署 kafka 集群&#xff0c;并验证 参考 Docker搭建Kafka集群 优秀文档 2 docker 部署 mysql 参考上一篇docker(六) 3.docker 部署 zabbix 参考 docker部署zabbix 优秀文档 BUG&#xff1a;根据这篇文章部署后&#xff0c;发现zabbix-s…

git相关内容

一.git安装 该操作相信不用介绍了&#xff0c;为什么用yum&#xff0c;大家也是非常清楚的。 如果是root账户&#xff1a;yum -y install git 如果是普通账户&#xff1a; sudo yum -y install git 二.git和gitee/github区别 Git&#xff08;读音为/gɪt/&#xff09;是一个…

【以解决】Pyinstaller打包报错IndexError: tuple index out of range

问题 这个问题主要是在Python3.7以上的版本中遇到&#xff0c;用pyinstaller打包的时候发现报错 (pyinstallerEnv) D:\virtualEnv\pyinstallerEnv\Scripts>auto-py-to-exe pygame 2.5.2 (SDL 2.28.3, Python 3.10.0) Hello from the pygame community. https://www.pygame…

鸿蒙开发(七)添加常用控件(上)

开工大吉&#xff01;相信大家已经对鸿蒙开发的布局有了基本的了解。之前我们提到过&#xff0c;一个好的UI&#xff0c;离不开选择合理的布局。当然&#xff0c;也离不开适当的控件。本篇文章&#xff0c;带着大家一起学习下如何在页面里面添加常用的控件。由于控件较多&#…

【开源】JAVA+Vue.js实现城市桥梁道路管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 查询城市桥梁4.2 新增城市桥梁4.3 编辑城市桥梁4.4 删除城市桥梁4.5 查询单个城市桥梁 五、免责说明 一、摘要 1.1 项目介绍 基于VueSpringBootMySQL的城市桥梁道路管理系统&#xff0c;支持…