-
OCCT软件架构简单介绍
1. 编码规范 工具集前缀:TK 类名:<package-name>_<classname> 见名知义:局部变量 aWidthOfBox; 函数参数 theWidth2. 模块规范3. 项目目录结构-- adm -- cmake -- qmake -- scripts -- templates-- data-- dox-- samples-- src -- Adaptor2d -- xx.h -- xx.cpp -- FILES .......-- te...…
-
OCCT编译
1. OpenCASCADE 安装编译 OpenCASCADE 7.6 + vs2019 去官网下载安装包(很慢),下载那个exe得,这样就省去使用makefile进行编译 我下载了vs2019,估计vs2015也是可以使用得。 打开opencascade-7.6.0/adm/msvc/vc142里得OCCT.sln vs2019打开后,点查看解决方案资源管理器,按顺序点生成 FoundationClasses ModelingData Mod...…
-
MeshVS in DRAWEXE
meshVS服务MeshVS专门是用来使用OCCT的可视化模块来显示网格,MeshVS (Mesh Visualization Service) component provides flexible means of displaying meshes with associated pre- and post- processor data. 读取STL作为网格数据初始化 # meshfromstlvinit View1meshfromstl mesh myfile.stl #...…
-
LeetCode_100Hot_day1
day1 {Topic2: 两数相加}题目描述给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。请你将两个数相加,并以相同形式返回一个表示和的链表。你可以假设除了数字 0 之外,这两个数都不会以 0 开头。输入:l1 = [2,4,3], l2 = [5,6,4]输出:[7,0,8]解释:342 + 465 = 807.示例 2:输入:l1 = [0], l2 = [0]输出:[0]示例 3:输入:l1 = [9,9,9...…
-
LeetCode_100Hot_day0
[toc]LeetCode hot 100day0 {Topic1: 两数之和}题目描述给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。你可以假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回答案。示例 1:输入:nums = [2,7,11,15], target = 9输出:[0,1]解释:因为 nums[0] + nums[1] == 9 ,...…
-
千万不要将动态库的接口返回一个STL
0. 千万不要将动态库的接口返回一个STL参考链接参考链接参考链接参考链接简单来说,对于运行库为MTD时,千万不能将一个动态库的接口,返回一个标准库内容。更好的做法时,不要将动态库的接口返回一个STL…
-
m_balance_record
[toc]week0Thursday, December 20, 2022Shoulder training(30min) Dumbbell press: 4-12 weight: 2-8.5kg Front neck barbell press 4-12 weight: 2-7kg Back neck barbell press 4-12 weight: 2-7kg Dumbbell Fro...…
-
Git本地已有仓库,如何推送到Github?
[toc]Git本地已有仓库,如何推送到Github?本地已经 git init ,并且已经有了commit 记录,如何将本地仓库推送到远端 在远端仓库GitHub中建立一个仓库(最好不要添加ReadMe) 在本地的该仓库下,输入如下命令,把新建的仓库添加为和本地仓库关联的默认远程仓库git remote add origin https://github.com/xxxx/xxxx.gitgit remote add 含义在于将本地仓库与远端仓具 建立一个链接,a...…
-
对于C++左值和右值的简单总结
0. 引言在 C/C++ 编程中并不会经常用到 左值 (lvalue) 和 右值 (rvalue) 两个术语。然而一旦遇见,又常常不清楚它们的含义。最可能出现两这个术语的地方是在编译错误或警告的信息中。例如,使用 gcc 编译以下代码时:int foo() {return 2;}int main(){ foo() = 2;// foo()是一个左值,2是一个右值 return 0;}// 运行后,编译器输出结果:test.c: In function 'main':test.c...…
-
对于C++函数指针与lamda的简单总结
1. 函数指针与lamda1.1 C语言风格的函数指针 定义方式void(*function)() = Print; //很少用,一般用auto关键字 函数指针的使用 无参数的函数指针 void Print() { std::cout << "hello,world" << std::endl;}int main() { //void(*function)() = Print; 正常写法,但一般用aut...…
-
对象性能:Flyweight
5.2 Flyweight(享元模式)5.2.1 动机(Motivation) 在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中,从而带来很高的运行时代价——主要指内存需求方面的代价。 如何在避免大量细粒度对象问题的同时,让外部客户程序仍然能够透明地使用面向对象的方式来进行操作? 5.2.2 模式定义 运行共享技术有效地支持大量细粒度的对象。 ——《设计模式》GoF 5.2.3 要点总结 面向对象很好地解决了抽象性的问题,但是作为yield...…
-
对象性能:Singleton
5 对象性能面向对象很好的解决了“抽象”问题,但是不可避免的要付出一定代码。对于通常情况来讲,面向对象的成本大都可以忽略,但某些情况,面向对象所带来的成本必须谨慎处理; Singleton(单件模式) Flyweight(享元模式 ) 5.1 Singleton(单件模式) 5.1.1 动机(Motivation) 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性、以及良好的效率。 如何绕过常规的构造器,提供一种机制...…
-
创建型:Builder
4.4 Builder(构建器)4.4.1 动机(Motivation) 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法却相对稳定。 如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?4.4.2 模式定义将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以...…
-
创建型:Prototype
4.3 Prototype(原型模式)4.3.1 模式动机 在软件系统中,经常面临这“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。 如何应对这种变化?如何向“客户程序(使用这些对象的程序)”隔离出“这些易变对象”,从而使得依赖这些”易变对象“的客户程序不随着需求改变而改变。 4.3.2 模式定义 使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。 ——《设计模式》GoF 4.3.3 ...…
-
创建型:Abstract Factory
4.2 Abstract Factory Method(抽象工厂模式)4.2.1 模式动机 在软件系统中,经常面临着“一系列相互依赖的对象工作”;同时,由于需求的变化,往往存在更多系列对象的创建工作。 如何应对这种变化?如何绕过常规的对象创建方法(new),提供一种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合。 4.2.2 模式定义 提供一个接口,让该接口负责创建一系列”相关或者相互依赖的对象“,无需指定它们具体的类。 ——《设计模式》GoF 4...…
-
创建型:Factory Method
4. 对象创建型设计模式通过“对象创建” 模式绕开new,来避免对象创建(new)过程中所导致的紧耦合(依赖具体类),从而支持对象创建的稳定。它是接口抽象之后的第一步工作 Factory Method Abstract Factory Prototype Builder 4.1 Factory Method(简单工厂模式) 4.1.1 模式动机 在软件系统中,经常面临着创建对象的工作;由于需求的变化,需要创建的对象的具体类型经常变化。 如何应对这种变化?如何绕过...…
-
单一职责:Bridge
3.2 Bridge(桥模式)3.2.1 动机(Motivation) 由于某些类型的固有的实现逻辑,使得它们具有两个变化的维度,乃至多个纬度的变化。 如何应对这种“多维度的变化”?如何利用面向对象技术来使得类型可以轻松地沿着两个乃至多个方向变化,而不引入额外的复杂度? 3.2.2 模式定义 将抽象部分(业务功能)与实现部分(平台实现)分离,使它们都可以独立地变化。 ——《设计模式》GoF 3.2.3 要点总结 Bridge模式使用“对象间的组合关系”解耦了抽象...…
-
单一职责:Decorator
3. 单一职责3.1 Decorator(装饰模式)3.1.1 动机(Motivation) 在某些情况下我们可能会“过度地使用继承来扩展对象的功能”,由于继承为类型引入的静态特质,使得这种扩展方式缺乏灵活性; 并且随着子类的增多(扩展功能的增多),各种子类的组合(扩展功能的组合)会导致更多子类的膨胀。 如何使“对象功能的扩展”能够根据需要来动态地实现?同时避免“扩展功能的增多”带来的子类膨胀问题?从而使得任何“功能扩展变化”所导致的影响将为最低?3.1.2 模式定义动态(组合)地给一...…
-
组件协作:Observer/Event
2.3 Observer / Event2.3.1 动机(Motivation) 在软件构建过程中,我们需要为某些对象建立一种“通知依赖关系” ——一个对象(目标对象)的状态发生改变,所有的依赖对 象(观察者对象)都将得到通知。如果这样的依赖关系过于紧密,将使软件不能很好地抵御变化。 使用面向对象技术,可以将这种依赖关系弱化,并形成一种稳定的依赖关系。从而实现软件体系结构的松耦合。 2.3.2 模式定义 定义对象间的一种一对多(变化)的依赖关系,以便当一个对象(Subjec...…
-
组件协作:Strategy
2.2 Strategy定义一系列算法,把它们一个个封装起来,并且使它们可互相替换(变化)。该模式使得算法可独立于使用它的客户程序(稳定)而变化(扩展,子类化)。 ——《设计模式》 GoF2.2.1 动机(Motivation) 在软件构建过程中,某些对象使用的算法可能多种多样,经常改变,如果将这些算法都编码到对象中,将会使对象变得异常复杂;而且有时候支持不使用的算法也是一个性能负担。 如何在运行时根据需要透明地更改对象的算法?将算法与对象本身解耦,从而避免上述问题? 2.2.2...…