Tutorial简述

  1. gp_XXX
  2. Standard_XXX
  3. Geom_XXX
  4. GC_MakeXXX
  5. TopoDS_XXX
  6. BRepBuilderAPI_XXX
  7. BRepPrimAPI_XXX
  8. BRepFilletAPI_XXX
  9. TopExp_Explorer
  10. TopAbs_ShapeEnum
  11. BRepAlgoAPI_XXX
  12. BRep_Tool与 Standard_Transient
  13. TopTools_XXX
  14. BRepOffsetAPI_XXX

Tutorial源代码
OCC接触两年有余了,以前使用频率不高,好多东西一知半解,现在是需要用到它的时候了。

Tutorial简述
Tutorial用一个绘制Bottle的例子描述了OCC建模的基本步骤。这里涉及了一些概念和类的用法,不细心看做笔记是很容易忘掉的。

gp_XXX
gp_Pnt 是最简单的“点”;此外对应的有还有许多这样的简单结构,这些类从其类名就可以知道它可能有哪些参数,没错,这些类包含了点、线、面、轴以及各种曲面等,其中的参数都是构建这些几何结构必须的参数,我们可以称gp_Pnt这一类的类为基本几何类。 
——————————————————————————————

  1. - gp_Ax2 
  2. - gp_Ax2d 
  3. - gp_Ax3 
  4. - gp_Ax3d 
  5. - gp_Ax22 
  6. - gp_Ax22d 
  7. - gp_Circ 
  8. - gp_Circ2d 
  9. - gp_Cone 
  10. - gp_Cylinder 
  11. - gp_Dir 
  12. - gp_Dir2d 
  13. - gp_Elips 
  14. - gp_Elips2d 
  15. - gp_EulerSequence 
  16. - gp_GTrsf 
  17. - gp_GTrsf2d 
  18. - gp_Hypr 
  19. - gp_Hypr2d 
  20. - gp_Lin 
  21. - gp_Lin2d 
  22. - gp_Mat 
  23. - gp_Mat2d 
  24. - gp_Parab 
  25. - gp_Parab2d 
  26. - gp_Pln 
  27. - gp_Pnt2d 
  28. - gp_Quaternion 
  29. - gp_QuaternionNLerp 
  30. - gp_QuaternionSLerp 
  31. - gp_Sphere 
  32. - gp_Torus 
  33. - gp_Trsf 
  34. - gp_Trsf2d 
  35. - gp_TrsfForm 
  36. - gp_TrsfNLerp 
  37. - gp_Vec 
  38. - gp_Vec2d 
  39. - gp_VectorWithNullMagnitude 
  40. - gp_XY 
  41. - gp_XYZ

Standard_XXX
Standard_XXX类型的类是OCC的类型定义、宏定义的数据结构,与我们常用的C++没有区别的,我们可以称其为OCC定义数值类型。

  1. #define Standard_False false
  2. #define Standard_True  true
  3. typedef int           Standard_Integer;
  4. typedef double        Standard_Real;
  5. typedef bool          Standard_Boolean;
  6. typedef float         Standard_ShortReal;
  7. typedef char          Standard_Character;
  8. typedef unsigned char Standard_Byte;
  9. typedef void*         Standard_Address;
  10. typedef size_t        Standard_Size;
  11. typedef std::time_t   Standard_Time;
  12. // Unicode primitives, char16_t, char32_t
  13. typedef char          Standard_Utf8Char;     //!< signed   UTF-8 char
  14. typedef unsigned char Standard_Utf8UChar;    //!< unsigned UTF-8 char

Geom_XXX
Geom定义了几何数据结构,但也仅此而已,并不包含什么算法,可以说它是由gp_XXX构建而成的数据结构,比gp_XXX高级一些。我们可以称其为构建几何类。 
——————————————————————————————

  1. Geom_Axis1Placement 
  2. Geom_Axis2Placement 
  3. Geom_AxisPlacement 
  4. Geom_BezierCurve 
  5. Geom_BezierSurface 
  6. Geom_BoundedCurve 
  7. Geom_BoundedSurface 
  8. Geom_BSplineCurve 
  9. Geom_BSplineSurface 
  10. Geom_CartesianPoint 
  11. Geom_Circle 
  12. Geom_Conic 
  13. ……

GC_MakeXXX
GC_MakeXXX由简单的几何数据结构构建复杂的、常见的、带参数的几何结构Geom_XXX,它主要包含的就是构建算法,我们可以称其为几何形状构建包,构建的结果是指向Geom_XXX的指针。 
——————————————————————————————

  1. GC_MakeArcOfCircle 
  2. GC_MakeArcOfEllipse 
  3. GC_MakeArcOfHyperbola 
  4. GC_MakeArcOfParabola 
  5. GC_MakeCircle 
  6. GC_MakeConicalSurface 
  7. GC_MakeCylindricalSurface 
  8. GC_MakeEllipse 
  9. GC_MakeHyperbola. 
  10. GC_MakeLine 
  11. GC_MakeMirror 
  12. GC_MakePlane 
  13. GC_MakeRotation 
  14. GC_MakeScale 
  15. GC_MakeSegment 
  16. GC_MakeTranslation 
  17. GC_MakeTrimmedCone 
  18. GC_MakeTrimmedCylinder 
  19. GC_Root
  20. Handle(Geom_TrimmedCurve) aArcOfCircle = GC_MakeArcOfCircle(aPnt2,aPnt3,aPnt4);

TopoDS_XXX
TopoDS_XXX比Geom_XXX再高一级,是多个Geom_XXX的一种组合。每一个TopoDS_XXX类都继承至TopoDS_Shape。我们可以称这一层为几何拓扑结构。包含了拓扑点、线、面、体等简单的、复杂的几何拓扑结构。注意:这层也只是数据结构,并不包含算法。 
——————————————————————————————

  1. TopoDS_AlertWithShape 
  2. TopoDS_Builder 
  3. TopoDS_Compound 
  4. TopoDS_CompSolid 
  5. TopoDS_Edge 
  6. TopoDS_Face 
  7. TopoDS_FrozenShape 
  8. TopoDS_HShape 
  9. TopoDS_Iterator 
  10. TopoDS_ListIteratorOfListOfShape 
  11. TopoDS_ListOfShape 
  12. TopoDS_LockedShape 
  13. TopoDS_Shape 
  14. TopoDS_Shell 
  15. TopoDS_Solid 
  16. TopoDS_TCompound 
  17. TopoDS_TCompSolid 
  18. TopoDS_TEdge 
  19. TopoDS_TFace 
  20. TopoDS_TShape 
  21. TopoDS_TShell 
  22. TopoDS_TSolid 
  23. TopoDS_TVertex 
  24. TopoDS_TWire 
  25. TopoDS_UnCompatibleShapes 
  26. TopoDS_Vertex 
  27. TopoDS_Wire

BRepBuilderAPI_XXX
前边说了TopoDS_XXX只是数据结构,那么如何由Geom_XXX构建TopoDS_XXX呢,这就是BRepBuilderAPI_XXX的工作了。我们可以称这一层为拓扑结构构建包。它的返回值直接就是TopoDS_XXX。

此外这一部分有好多需要注意的事项:

通过矩阵变换获取拓扑结构
通过向下转型(TopoDS::XXX)获取拓扑结构
通过TopoDS的组合获取TopoDS结构
也就是说:这一步骤相当于使用一个CAD、SolidWorks等的造型软件。熟悉造型的功能,想必更熟悉这部分要完成的工作。——————————————————————————————

  1. BRepBuilderAPI_BndBoxTreeSelector 
  2. BRepBuilderAPI_CellFilter 
  3. BRepBuilderAPI_Collect 
  4. BRepBuilderAPI_Command 
  5. BRepBuilderAPI_Copy 
  6. BRepBuilderAPI_EdgeError 
  7. BRepBuilderAPI_FaceError 
  8. BRepBuilderAPI_FastSewing 
  9. BRepBuilderAPI_FindPlane 
  10. BRepBuilderAPI_GTransform 
  11. BRepBuilderAPI_MakeEdge 
  12. BRepBuilderAPI_MakeEdge2d 
  13. BRepBuilderAPI_MakeFace 
  14. BRepBuilderAPI_MakePolygon 
  15. BRepBuilderAPI_MakeShape 
  16. BRepBuilderAPI_MakeShell 
  17. BRepBuilderAPI_MakeSolid 
  18. BRepBuilderAPI_MakeVertex 
  19. BRepBuilderAPI_MakeWire 
  20. BRepBuilderAPI_ModifyShape 
  21. BRepBuilderAPI_NurbsConvert 
  22. BRepBuilderAPI_PipeError 
  23. BRepBuilderAPI_Sewing 
  24. BRepBuilderAPI_ShapeModification 
  25. BRepBuilderAPI_ShellError 
  26. BRepBuilderAPI_Transform 
  27. BRepBuilderAPI_TransitionMode 
  28. BRepBuilderAPI_VertexInspector 
  29. BRepBuilderAPI_WireError
  30. TopoDS_Edge aEdge1 = BRepBuilderAPI_MakeEdge(aSegment1); 
  31. TopoDS_Edge aEdge2 = BRepBuilderAPI_MakeEdge(aArcOfCircle); 
  32. TopoDS_Edge aEdge3 = BRepBuilderAPI_MakeEdge(aSegment2);

BRepPrimAPI_XXX
这一层包的功能是把之前的拓扑结构建立成实体,它们构建的结果当然也是拓扑结果的TopoDS_XXX。我们可以称这一层为实体构建包,拓扑构建满足以下的规律:

形状    生成形状
顶点(vertex)    边(edge)
边(edge)    面(face)
线(wire)    壳(shell)
面(face)    体(solid)
壳(shell)    组合体(compound of solids)
——————————————————————————————

  1. BRepPrimAPI_MakeBox 
  2. BRepPrimAPI_MakeCone 
  3. BRepPrimAPI_MakeCylinder 
  4. BRepPrimAPI_MakeHalfSpace 
  5. BRepPrimAPI_MakeOneAxis 
  6. BRepPrimAPI_MakePrism 
  7. BRepPrimAPI_MakeRevol 
  8. BRepPrimAPI_MakeRevolution 
  9. BRepPrimAPI_MakeSphere 
  10. BRepPrimAPI_MakeSweep 
  11. BRepPrimAPI_MakeTorus 
  12. BRepPrimAPI_MakeWedge

BRepFilletAPI_XXX
倒角包:计算倒角。 
——————————————————————————————

  1. BRepFilletAPI_LocalOperation 
  2. BRepFilletAPI_MakeChamfer 
  3. BRepFilletAPI_MakeFillet 
  4. BRepFilletAPI_MakeFillet2d

TopExp_Explorer
这个类比较特殊,专门用于TopoDS_XXX的解析的,就是将已知实体(拓扑结构)解析为边组合、面组合等等。我们可以称其为拓扑解析包。

  1. for(TopExp_Explorer aFaceExplorer(myBody, TopAbs_FACE) ; aFaceExplorer.More() ; aFaceExplorer.Next())
  2. TopoDS_Face aFace = TopoDS::Face(aFaceExplorer.Current()); 
  3. }

TopAbs_ShapeEnum
这也是一个特殊的结构,类似一个拓扑结构的数组,具有.More().Next().Current()三个重要的方法,我们可以称其为拓扑解析结果集。

BRepAlgoAPI_XXX
这个是核心算法包,专门用于Shape的交common(Boolean intersection)、差cut(Boolean subtraction)、和fuse(Boolean union)的计算。底层采用的是布尔操作。我们可以称其为几何算法包。 
——————————————————————————————

  1. BRepAlgoAPI_Algo 
  2. BRepAlgoAPI_BooleanOperation 
  3. BRepAlgoAPI_BuilderAlgo 
  4. BRepAlgoAPI_Check 
  5. BRepAlgoAPI_Common 
  6. BRepAlgoAPI_Cut 
  7. BRepAlgoAPI_Defeaturing 
  8. BRepAlgoAPI_Fuse 
  9. BRepAlgoAPI_Section 
  10. BRepAlgoAPI_Splitter

BRep_Tool与 Standard_Transient
这个BRep_Tool类主要有三个方法,用于从TopoDS_XXX向Geom_XXX转换。

  1. TopoDS_Face -> Geom_Surface 
  2. TopoDS_Edge -> Geom_Curve 
  3. TopoDS_Vertex -> Geom_Point 

Standard_Transient类主要有两个用途。 
DynamicType 函数用来获取 Handle(Geom_Surface)的真实类型,因为Geom_Surface有可能是任何一种面。 
IsKind 用来判断该类型是否是某个类的子类。

  1. Handle(Geom_Surface) aSurface = BRep_Tool::Surface(aFace);
  2. if(aSurface->DynamicType() == STANDARD_TYPE(Geom_Plane))
  3. Handle(Geom_Plane) aPlane = Handle(Geom_Plane)::DownCast(aSurface);
  4. //
  5. }

TopTools_XXX
组。List,Array,Sequence等。

  1. TopTools_Array1OfListOfShape 
  2. TopTools_Array1OfShape 
  3. TopTools_Array2OfShape 
  4. TopTools_DataMapIteratorOfDataMapOfIntegerListOfShape 
  5. TopTools_DataMapIteratorOfDataMapOfIntegerShape 
  6. ……

BRepOffsetAPI_XXX
非常有用的包,通俗点讲它的功能:如果你的线框模型可以生成实体,模型,那么它可以……里边是一个复杂而漫长的过程……我可以称他形体生成包

  1. BRepOffsetAPI_ThruSections aTool(Standard_True); 
  2. aTool.AddWire(threadingWire1); 
  3. aTool.AddWire(threadingWire2); 
  4. aTool.CheckCompatibility(Standard_False); 
  5. TopoDS_Shape myThreading = aTool.Shape();

Tutorial源代码

  1. TopoDS_Shape MakeBottle(const Standard_Real myWidth, const Standard_Real myHeight, const Standard_Real myThickness) 
  2. // Profile : Define Support Points 
  3. gp_Pnt aPnt2(-myWidth / 2., -myThickness / 4., 0); 
  4. gp_Pnt aPnt3(0, -myThickness / 2., 0); 
  5. gp_Pnt aPnt4(myWidth / 2., -myThickness / 4., 0); 
  6. gp_Pnt aPnt5(myWidth / 2., 0, 0);
  7. // Profile : Define the Geometry 
  8. Handle(Geom_TrimmedCurve) aSegment1 = GC_MakeSegment(aPnt1, aPnt2); 
  9. Handle(Geom_TrimmedCurve) aSegment2 = GC_MakeSegment(aPnt4, aPnt5);
  10. // Profile : Define the Topology 
  11. TopoDS_Edge anEdge1 = BRepBuilderAPI_MakeEdge(aSegment1); 
  12. TopoDS_Edge anEdge3 = BRepBuilderAPI_MakeEdge(aSegment2); 
  13. TopoDS_Wire aWire = BRepBuilderAPI_MakeWire(anEdge1, anEdge2, anEdge3);
  14. // Complete Profile 
  15. gp_Ax1 xAxis = gp::OX(); 
  16. gp_Trsf aTrsf;
  17. aTrsf.SetMirror(xAxis); 
  18. BRepBuilderAPI_Transform aBRepTrsf(aWire, aTrsf); 
  19. TopoDS_Wire aMirroredWire = TopoDS::Wire(aMirroredShape);
  20. BRepBuilderAPI_MakeWire mkWire; 
  21. mkWire.Add(aMirroredWire); 
  22. TopoDS_Wire myWireProfile = mkWire.Wire();
  23. // Body : Prism the Profile 
  24. TopoDS_Face myFaceProfile = BRepBuilderAPI_MakeFace(myWireProfile); 
  25. gp_Vec aPrismVec(0, 0, myHeight); 
  26. TopoDS_Shape myBody = BRepPrimAPI_MakePrism(myFaceProfile, aPrismVec);
  27. // Body : Apply Fillets 
  28. BRepFilletAPI_MakeFillet mkFillet(myBody); 
  29. TopExp_Explorer anEdgeExplorer(myBody, TopAbs_EDGE); 
  30. while(anEdgeExplorer.More())
  31. TopoDS_Edge anEdge = TopoDS::Edge(anEdgeExplorer.Current()); //Add edge to fillet algorithm 
  32. mkFillet.Add(myThickness / 12., anEdge); 
  33. anEdgeExplorer.Next(); 
  34. }
  35. myBody = mkFillet.Shape();
  36. // Body : Add the Neck 
  37. gp_Pnt neckLocation(0, 0, myHeight); 
  38. gp_Dir neckAxis = gp::DZ(); 
  39. gp_Ax2 neckAx2(neckLocation, neckAxis);
  40. Standard_Real myNeckRadius = myThickness / 4.; 
  41. Standard_Real myNeckHeight = myHeight / 10.;
  42. BRepPrimAPI_MakeCylinder MKCylinder(neckAx2, myNeckRadius, myNeckHeight); 
  43. TopoDS_Shape myNeck = MKCylinder.Shape();
  44. myBody = BRepAlgoAPI_Fuse(myBody, myNeck);
  45. // Body : Create a Hollowed Solid 
  46. TopoDS_Face faceToRemove; 
  47. Standard_Real zMax = -1;
  48. for(TopExp_Explorer aFaceExplorer(myBody, TopAbs_FACE); aFaceExplorer.More(); aFaceExplorer.Next())
  49. TopoDS_Face aFace = TopoDS::Face(aFaceExplorer.Current()); // Check if <aFace> is the top face of the bottle’s neck 
  50. Handle(Geom_Surface) aSurface = BRep_Tool::Surface(aFace); 
  51. if(aSurface->DynamicType() == STANDARD_TYPE(Geom_Plane))
  52. Handle(Geom_Plane) aPlane = Handle(Geom_Plane)::DownCast(aSurface); 
  53. gp_Pnt aPnt = aPlane->Location(); 
  54. Standard_Real aZ = aPnt.Z(); 
  55. if(aZ > zMax)
  56. zMax = aZ; 
  57. faceToRemove = aFace; 
  58. }
  59. }
  60. }
  61. TopTools_ListOfShape facesToRemove; 
  62. facesToRemove.Append(faceToRemove); 
  63. BRepOffsetAPI_MakeThickSolid BodyMaker; 
  64. BodyMaker.MakeThickSolidByJoin(myBody, facesToRemove, -myThickness / 50, 1.e-3); 
  65. myBody = BodyMaker.Shape(); 
  66. // Threading : Create Surfaces 
  67. Handle(Geom_CylindricalSurface) aCyl1 = new Geom_CylindricalSurface(neckAx2, myNeckRadius * 0.99); 
  68. Handle(Geom_CylindricalSurface) aCyl2 = new Geom_CylindricalSurface(neckAx2, myNeckRadius * 1.05);
  69. // Threading : Define 2D Curves 
  70. gp_Pnt2d aPnt(2. * M_PI, myNeckHeight / 2.); 
  71. gp_Dir2d aDir(2. * M_PI, myNeckHeight / 4.); 
  72. gp_Ax2d anAx2d(aPnt, aDir);
  73. Standard_Real aMajor = 2. * M_PI; 
  74. Standard_Real aMinor = myNeckHeight / 10;
  75. Handle(Geom2d_Ellipse) anEllipse1 = new Geom2d_Ellipse(anAx2d, aMajor, aMinor); 
  76. Handle(Geom2d_Ellipse) anEllipse2 = new Geom2d_Ellipse(anAx2d, aMajor, aMinor / 4); 
  77. Handle(Geom2d_TrimmedCurve) anArc1 = new Geom2d_TrimmedCurve(anEllipse1, 0, M_PI); 
  78. Handle(Geom2d_TrimmedCurve) anArc2 = new Geom2d_TrimmedCurve(anEllipse2, 0, M_PI); 
  79. gp_Pnt2d anEllipsePnt1 = anEllipse1->Value(0); 
  80. gp_Pnt2d anEllipsePnt2 = anEllipse1->Value(M_PI);
  81. Handle(Geom2d_TrimmedCurve) aSegment = GCE2d_MakeSegment(anEllipsePnt1, anEllipsePnt2); 
  82. // Threading : Build Edges and Wires 
  83. TopoDS_Edge anEdge1OnSurf1 = BRepBuilderAPI_MakeEdge(anArc1, aCyl1); 
  84. TopoDS_Edge anEdge2OnSurf1 = BRepBuilderAPI_MakeEdge(aSegment, aCyl1); 
  85. TopoDS_Edge anEdge1OnSurf2 = BRepBuilderAPI_MakeEdge(anArc2, aCyl2); 
  86. TopoDS_Edge anEdge2OnSurf2 = BRepBuilderAPI_MakeEdge(aSegment, aCyl2); 
  87. TopoDS_Wire threadingWire1 = BRepBuilderAPI_MakeWire(anEdge1OnSurf1, anEdge2OnSurf1); 
  88. TopoDS_Wire threadingWire2 = BRepBuilderAPI_MakeWire(anEdge1OnSurf2, anEdge2OnSurf2); 
  89. BRepLib::BuildCurves3d(threadingWire1); 
  90. BRepLib::BuildCurves3d(threadingWire2);
  91. // Create Threading 
  92. BRepOffsetAPI_ThruSections aTool(Standard_True); 
  93. aTool.AddWire(threadingWire1); 
  94. aTool.AddWire(threadingWire2); 
  95. aTool.CheckCompatibility(Standard_False);
  96. TopoDS_Shape myThreading = aTool.Shape();
  97. // Building the Resulting Compound 
  98. TopoDS_Compound aRes; 
  99. BRep_Builder aBuilder; 
  100. aBuilder.MakeCompound (aRes); 
  101. aBuilder.Add (aRes, myBody); 
  102. aBuilder.Add (aRes, myThreading);
  103. return aRes;
  104. }

原文:https://blog.csdn.net/u012541187/article/details/81021064

OpenCasCade部分API剖析--入门tutorial相关推荐

  1. 报表引擎API开发入门— EJB程序数据源

    2019独角兽企业重金招聘Python工程师标准>>> 我们前面讲了几个数据源,今天我们来讲一下EJB数据源,这篇讲完我们数据源这部分就讲完了.数据连接不需要直接访问数据库,而是使用 ...

  2. Keras functional API快速入门

    2019独角兽企业重金招聘Python工程师标准>>> Keras functional API快速入门 The Keras functional API is the way to ...

  3. php yii2 api框架,Yii2框架制作RESTful风格的API快速入门教程

    先给大家说下什么是REST restful REST全称是Representational State Transfer,中文意思是表述(编者注:通常译为表征)性状态转移. 它首次出现在2000年Ro ...

  4. ORTP库API使用入门

    转自:https://www.cnblogs.com/elisha-blogs/p/3963126.html ORTP库API使用入门 一.简介 ORTP是一个支持RTP以及RFC3550协议的库,有 ...

  5. Windows API程序设计入门(新手的第一个Windows程序)

    Windows API程序设计入门 一.实验目的 二.实验工具 三.参考资料 四.步骤 五.代码分析 六.运行效果 七.补充 一.实验目的 了解 windows操作系统应用程序开发的基本概念,win3 ...

  6. qq位置如何用启动百度地图定位服务器,腾讯位置服务API快速入门

    前言 之前项目有个需求,在网页上显示微信发送过来的位置信息,该开始想用百度地图,后来发现腾讯地图相对简单一点 快速入门 申请Key 引入js 把###替换成你申请的key 定义容器 设置好宽高度 设置 ...

  7. windows API程序设计入门(简单练习)

    windows API程序设计入门(简单练习) 目录 windows API程序设计入门(简单练习) 窗口过程函数 用绘图工具输出输出hello world! 定义窗口主函数 设计窗口类 注册窗口类 ...

  8. 5 Hibernate:Java Persistence API (JPA) 入门

    Java Persistence API (JPA),Java 持久层 API,是 JCP 组织发布的 Java EE 标准规范,通过注解或 XML 描述实体对象和数据库表的映射关系. Hiberna ...

  9. Android Google Maps API教程-入门

    This is android google maps api tutorial. 这是android Google Maps API教程. In this tutorial I will teach ...

  10. 1.1ASP.NET Web API 2入门

    HTTP 不只是为了生成 web 页面.它也是建立公开服务和数据的 Api 的强大平台.HTTP 是简单的. 灵活的和无处不在.你能想到的几乎任何平台有 HTTP 库,因此,HTTP 服务可以达到范围 ...

最新文章

  1. Keil μVision 5版新建工程详细步骤(版本2)
  2. K-Means算法理论及Python实现
  3. 如何提升微服务的幸福感?
  4. 监听微信、支付宝等移动app及浏览器的返回、后退、上一页按钮的事件方法
  5. 浅谈缓存技术在ASP.NET中的运用
  6. 3.Java 面试题整理(线程篇)
  7. 数据分析之Pandas VS SQL!
  8. linux shutdown 命令
  9. Server2008 安装 Zune
  10. windows优化大师怎么用_操作系统不仅有XP、win7和win10,这些更好用的系统你都用过吗...
  11. 保姆级讲解Transformer
  12. NavigationDuplicated: Avoided redundant navigation to current location
  13. 工作知识记录—TDMA和物理层协议
  14. 如何测试app启动时间?
  15. HTML5实现简单留言板1
  16. java计算机毕业设计数字家谱管理系统设计与实现MyBatis+系统+LW文档+源码+调试部署
  17. BUUCTF MISC刷题笔记(一)
  18. Dos窗口的打开与基本命令
  19. 生成树最小树形图 -- 朱刘算法详解
  20. KVM--安装centos7虚拟机

热门文章

  1. 【python】去除\n\r\t最佳方法
  2. python calendar模块实例_Python Datetime模块和Calendar模块用法实例分析
  3. linux程序后台运行
  4. 前端谷歌浏览器跨域问题
  5. 傅里叶变换理论基础,手撸源码
  6. ViewModel加强——应对无声杀死后台程序(非主动关闭)
  7. WPS 如何识别当前工作区
  8. 智慧大脑助力道路交通管理构建智能化管理系统
  9. 加特林大战僵尸(时间的比较问题)
  10. Win10下搭建绿色版MongoDB