tp钱包最新版|occ
酒店行业的ADR和Occ是什么意思? - 知乎
酒店行业的ADR和Occ是什么意思? - 知乎首页知乎知学堂发现等你来答切换模式登录/注册酒店酒店行业的ADR和Occ是什么意思?关注者67被浏览276,978关注问题写回答邀请回答好问题 3添加评论分享4 个回答默认排序知乎用户ADR (Average Daily Rate)——已售客房平均房价已售客房平均房价的计算方法为客房收入除以实际售出客房数量。【替代指标:Average Published Rate (APR)—平均牌价,当酒店普查报告或者年报中未提供ADR的相关信息时,牌价可以作为参考计算出大概的平均房价(ADR)。】ADR=客房收入/实际售出客房数量Occupancy (Occ)——入住率入住率是指某一特定时期实际售出的客房数与可售房数量的比率。Occupancy=实际售出客房数量/可售房数量RevPAR (Revenue Per Available Room)——每间可售房收入每间可售房收入(RevPAR)等于客房收入除以可售客房数。RevPAR不同于ADR,前者的分母是可售客房数量,后者是实际售出的客房数量。RevPAR= 入住率(Occupancy)X平均房价(ADR)发布于 2012-11-20 15:17赞同 1287 条评论分享收藏喜欢收起小王在酒店深圳市一城一筑美学酒店管理有限公司 联合创始人 关注酒店行业常见的大写字母缩写,如下: Occ 全称:occupancy, 入住率,按天为单位计算。Occ = 实际销售的客房数/酒店总的客房数,为精细化经营,酒店需要关注过夜房出租率、和综合出租率。综合出租率=过夜房出租率+钟点房+日租房(付全天房费,夜审前退房)。过夜房出租率越高,表明酒店的销售能力越强。目前不同酒店的出租率的统计方式不太一样,但是大概的思路是这样。ADR 全称: average daily rate。ADR=当天总的客房收入/销售的客房数。这里会设计到酒店OTA预付订单的价格提前录入酒店的PMS,只有这样ADR的数据才会准确。如果OTA预付订单的价格录入O, 就会导致酒店的每天的ADR的数据不准。Rev par 全称:revenue per available room。 Rev par = occ *ADR , 它是衡量所有酒店经营收入水平的唯一指标。它同时考虑酒店的occ 和 ADR。 一家酒店想要提高Rev par 有两个思维,通过出租率提高酒店的收入,或者通过均价提高酒店的收入。希望我的分享,可以帮到你更多酒店干货分享欢迎关注:小王在酒店发布于 2020-09-17 15:38赞同 29添加评论分享收藏喜欢收起
极越曝光OCC占用网络技术,中国版“纯视觉”方案来了 - 中国日报网
极越曝光OCC占用网络技术,中国版“纯视觉”方案来了 - 中国日报网
China Daily Homepage
中文网首页
时政
资讯
C财经
生活
视频
专栏
双语
原创
观天下
登录
注册
移动新媒体
站内搜索
站内搜索
China Daily Homepage
中文网首页
时政
资讯
C财经
生活
视频
专栏
双语
漫画
原创
观天下
极越曝光OCC占用网络技术,中国版“纯视觉”方案来了
来源:
江西网络广播电视台
2023-10-18 15:15
分享
分享到
分享到微信
CLOSE
随着智能网联汽车整车技术研发投入持续加大,中国自动驾驶技术的发展完全可以用“一日千里”来形容,L2级辅助驾驶已经成熟,L3级以及更高级别的自动驾驶商业化进程也驶入了“快车道”,落地应用速度将超出所有人的想象。
而在近日,又有一项核心技术取得突破。极越首先发布了BEV+Transformer的“纯视觉”技术方案,并已经跑通了城区领航辅助驾驶,成为国内首家具备成熟纯视觉能力智能汽车品牌。几乎同一时间,极越又曝光了与百度联合研发的国内首个OCC(Occupancy Network )占用网络技术。
BEV+Transformer“纯视觉”+OCC占用网络,也将完全取代激光雷达,进一步提升“纯视觉”高阶智驾能力。中国自动驾驶的“纯视觉”路线,将在极越和百度的引领下加速崛起。
解码OCC:“纯视觉”方案核心技术,自动驾驶新价值高地
按照自动驾驶的技术方向,其硬件方案可以划分为两大路线:“纯视觉”方案,使用摄像头等被动探测设备,不发射任何探测信号,不依赖回波感知外部世界,目前仅有特斯拉、极越两位玩家。
“多模态融合”方案,依靠激光雷达、毫米波雷达的回波反射,为车辆在行驶环境中提供静态和动态物体的可靠识别数据,绝大多数自动驾驶公司均采用这一方案。对比依赖激光雷达的“多模态融合”方案,“纯视觉”方案技术难度更高,但研发成功后成本更低,可以大幅压缩生产成本。
作为“纯视觉”方案的核心技术之一,OCC是一种基于学习的三维重建方法,通过产生3D体素,将这些3D体素与3D重建体素(Nerf离线训练得到)进行比较,从而实现感知识别,既能辨别出“不能碰的物体”又能发现“可以碰的网格”。
和BEV(Bird's Eye View)鸟瞰视角相比,OCC解决了不识别就不能作为障碍物的问题,能够更好地理解和处理三维空间数据,从而实现更精确和高效的操作,显著增强理解周围环境的能力。有业内人士认为,OCC将彻底弥补当前感知算法最后一公里的缺陷。
在2022年9月的Tesla AI Day上,OCC正式公布,甫一亮相就被公认为将是下一代的感知范式,成为自动驾驶新的价值高地。特斯拉的“如意算盘”,是OCC解决部分特殊场景问题,不需要激光雷达,从而在自动驾驶的激烈竞争中占据领先优势。
但很显然,OCC并不是特斯拉的专利。10月17日,极越公布了中国首个基于“纯视觉”的占用网络DEMO视频,中国自动驾驶技术的商业化落地,又翻开了新的一页。
OCC即将量产:引领“纯视觉”方案崛起,极越走在世界最前列
根据极越发布的OCC演示视频,极越01对周围环境有着强大的感知能力,用3D体素清晰地展示了栏杆、绿植、路障等标准障碍物,同时还精准识别出了施工中的工程车、树木中的路灯等异形障碍物。
其中蓝色网格代表静态建筑物,如路中心护栏隔离带、施工围栏;橙色代表动态交通参与者,包括机动车、非机动车;还有紫色马路沿、绿色绿化带等。每一个网格约15厘米,感知质量非常高,识别也相当准确。
据极越CEO夏一平介绍,最初定义产品时,极越就想走“纯视觉”路线,但出于安全考虑,增加了激光雷达作为冗余兜底,形成了“纯视觉为主+激光雷达”融合的智能驾驶方案,两套双独立系统互为备份、相互补充。如今,随着BEV+Transformer等技术的成熟,极越正式决定采用“纯视觉”方案。
目前,极越的高阶智驾已经进入2.0阶段,BEV+Transformer的“纯视觉”,不再借助激光雷达,并逐步降低对高精地图的依赖程度,配合OCC技术,帮助汽车机器人更准确地还原3D场景,可以获取比激光雷达点云分辨率更高的三维结构信息,还能减少漏检、误检并弥补视觉所不具备的空间高度信息,适应更为复杂的驾驶环境,大幅提升泛化能力。
值得一提的是,随着底层AI视觉算法能力的快速升级,“纯视觉”方案在系统成本、技术迭代、数据闭环、端到端等方面的优势更加明显。
据夏一平透露,极越“纯视觉”方案端到端的训练正在以“周更”的速度快速迭代,并且随着交付量的快速攀升,基于高效数据闭环体系将让极越高阶智驾呈现指数级进化。“数据生产质量和效率,是未来竞争的关键。高效的系统一定是硬件越来越少,模型越来越集中,规则和假设越来越少。”夏一平说到。
可以预料的是,在极越01的引领下,“纯视觉”方案将快速迭代,中国自动驾驶路线更加丰富,在推动自动驾驶商业化的同时,也将为全球汽车行业的创新发展注入了新的动力。
免责声明:该文章系我网转载,旨在为读者提供更多新闻资讯。所涉内容不构成投资、消费建议,仅供读者参考。
【责任编辑:钟经文】
COMPO
WS652faacda310d5acd876aa35
https://cn.chinadaily.com.cn/a/202310/18/WS652faacda310d5acd876aa35.html
专题
2024年世界看两会专题
筑梦现代化 共绘新图景
京津冀协同发展10年
新时代 我在中国
最热新闻
【100秒“瞧”见两会】台籍全国政协委员陈小艳:两岸之间需要多一些耐心和尊重 一家人没有解决不了的问题
检察机关办理妇女权益保障领域公益诉讼案件千余件
最高检开展“检护质量安全2024”专项行动
如何大力发展低碳经济?政府工作报告提出这几点
全国首个电动汽车智慧充换电示范区建成
央行重磅发声!
同比增长8.7%,我国外贸开局良好
【世界看两会】海外专家看好中国经济:在新质生产力的推动下,中国在全球产业链中的地位将会进一步提高
精彩推荐
加沙停火问题上美国滥用否决权
关于我们
|
联系我们
首页
时政
资讯
财经
生活
视频
专栏
双语
独家
招聘
地方频道:
北京
天津
河北
山西
辽宁
吉林
黑龙江
上海
江苏
浙江
福建
山东
河南
湖北
湖南
广东
广西
海南
重庆
四川
云南
贵州
西藏
陕西
新疆
深圳
友情链接:
央广网
中国西藏网
中国新闻网
中国台湾网
中国经济网
中国青年网
光明网
国际在线
央视网
中国网
新华网
人民网
违法和不良信息举报
互联网新闻信息服务许可证10120170006
信息网络传播视听节目许可证0108263号
京公网安备11010502032503号
京网文[2011]0283-097号
京ICP备13028878号-6
中国日报网版权说明:凡注明来源为“中国日报网:XXX(署名)”,除与中国日报网签署内容授权协议的网站外,其他任何网站或单位未经允许禁止转载、使用,违者必究。如需使用,请与010-84883777联系;凡本网注明“来源:XXX(非中国日报网)”的作品,均转载自其它媒体,目的在于传播更多信息,其他媒体如需转载,请与稿件来源方联系,如产生任何问题与本网无关。
版权保护:本网登载的内容(包括文字、图片、多媒体资讯等)版权属中国日报网(中报国际文化传媒(北京)有限公司)独家所有使用。 未经中国日报网事先协议授权,禁止转载使用。给中国日报网提意见:rx@chinadaily.com.cn
首页
时政
资讯
财经
文化
图片
视频
双语
中文 | English
中国日报版权所有Content@chinadaily.com.cn
Introduction to OCC: Part 1 - 知乎
Introduction to OCC: Part 1 - 知乎切换模式写文章登录/注册Introduction to OCC: Part 1南昌之星售票系统失业中事务处理很多成果是在上世纪完成的,在本世纪初,关于事务的研究是相对较少的。占主导地位的是 2PL 协议,作为最标准的并发控制实现。但是,本世纪关于事务有着不同变化:由于应用上的不同需求,相对上世纪,本世纪的应用有了显著的变化:显然,上世纪没有这么大规模的、高事务提交的互联网应用,现在的应用可能有数 M甚至数百M 的 qps,希望 ~10ms 的时间内完成一个事务。同时,新时代也有硬件性能的飞速变化,这点主要体现在:CPU 单核撞上了功耗墙,但也拥有了更多的核心;缓存大量提升,L3/L2/L1 Cache 变得大了很多;存储也有同样的提升,SSD 取代了 HDD 成为了硬件的宠儿,NVMe 等协议提供了助力,同时也有 SPDK 等 Bypass 的技术;同时,分布式事务的实现变得更加重要了。应用侧的需求、硬件的提升甚至软件栈变薄,给事务处理带来了一些变化。然而,最著名的靠谱开源数据库 MySQL、PostgreSQL 使用的还是上世纪九十年代的模型;比较常见的 Google Percolator 等模型在单机事务上还是比较简单的;H-Store/VoltDB 的方式似乎没有很主流的被采纳。数据库并发控制包括并发控制协议,但不只有并发控制协议,大致内容如下:我们可以套用到 MySQL 这样传统的 RDBMS 中:ARIES 那样的 Undo Redo LogMV2PL, 采用 Delta Space 存储变更的版本采用 Btree 索引并发本身和 2PL 有关,模型是线程(PG 甚至是进程),然后本身 Btree 之类的也会有一些 Latch Protocol它可以很方便的做一些内部的优化,比如说:对于 counter,它可以维护计数器锁,使用 Page 相关的逻辑物理日志,来达到细粒度的更改。同时,并发控制可以分为乐观的/悲观的,大概划分如下:OCC 本身是一种乐观并发协议,1981 年
delete(handler) -- 删除对象 handler
read(handler, i) -- 读取对象 handler 的字段 i
write(handler, i, v) -- 给对象 handler 的 i 赋值 v
copy(n) -- 拷贝对象 n, 返回一个新的 handler
exchange(handler1, handler2) -- 交换 然后,需要在 read 阶段提供 tcreate , tdelete, tread, twrite 等方法,使用上面的原语来操作。同时,事务开始和结束分别使用 tbegin 和 tend 操作。事务的内部结构里保存了 WriteSet 还有 DeleteSet、ReadSet,同时有一个 copy 数组。具体操作就读的时候拷贝到 copy 数组,创建删除之类的处理好对应集合,把 handler 丢到 Set 中。当 Validation 完成之后,这里逻辑就基本上是把 WriteSet 和 DeleteSet 去 apply。然后我这边截取一段假设,这里论文使用了串行 write,因为:Note that since objects are virtual (objects are referred to by name, not by physical address), the exchange operation, and hence the write phase, can be made quite fast: essentially, all that is necessary is to exchange the physical address parts of the two object descriptors.Validation Phase这里只描述了 Serializable 的验证,论文使用了时间戳有关的协议。对于一个给定的事务 T(i), 都能找到一个 t(i) 来表达事务执行的时间。事务读写的时候,需要保证 t 的顺序,即是事务的顺序。那么,这里可以给到一些条件,对于 t(i) < t(j)一: T(i) 在 T(j) 读阶段之前完成了写阶段应该不需要怎么理解,很 trivial二:T(j) 在进入 Write Phase 之前, T(i) 完成了 Write Phase ,且 WriteSet(i) 和 ReadSet(j) 无交集这里后来怎么改都行,但是不能读到之前改的地方三:T(i) 的 WriteSet 和 T(j) 的 ReadSet / WriteSet 都没有交集。且 T(i) 在 T(j) 之前完成 Read Phase这里有点点复杂,是说 T(i) 的没有影响到 T(j) 的事务。Rule3 还是相对复杂一些,关于这点可以从 CMU 的 slide 里面偷一下图:Transaction Number对事务 T, 需要找到对应的时间戳,这里选用的是 Validation 的时间戳。Here we use the simple solution of maintaining a global integer counter tnc (transaction number counter); when a transaction number is needed, the counter is incremented, and the resulting value returned. Also, transaction numbers must be assigned somewhere before validation, since the validation conditions above require knowledge of the transaction number of the transaction being validated.这里也讲了为啥不在 Read 或者 Begin 的时候拿时间戳。如果 t(i) < t(j), 但 T(j) 更早进入 Validation,那就需要等待 T(i) 了。在 Validation Phase 拿到 TS 能自然满足这个条件一些工程考量如果读事务很长,那么,它很有可能 Starve,这里解决方式是留一些事务的 WriteSet 到内存中(类似 MVCC 了):We solve this problem by only requiring the concurrency control to maintain some finite number of the most recent write sets where the number is large enough to validate almost all transactions (we say write set a is more recent than write set b if the transaction number associated with a is greater than that associated with 6). In the case of transactions like T, if old write sets are unavailable, validation fails, and the transaction is backed up (probably to the beginning).此外,这里活锁导致问题的时候,可以用全局锁或者降级到悲观的方式来处理。Serial Validation论文中,Validation Phase 和 Write Phase 都是串行执行的,Read Phase 是并行执行的,但是后续会串行 Validation 然后写(我感觉这个也太怪了...)。记 tnc 为 全局事务counter,那么有:tbegin() {
初始化 CreateSet, ReadSet, WriteSet, DeleteSet
StartTn := tnc
}
tend() {
临界区开始
FinishTn := tnc
valid := true
for t from start tn + 1 to finish tn do
if (write set of transaction with transaction number t intersects read set)
then valid := false
if valid
# 完成写阶段后 inc tnc.
then ((write phase); tnc := tnc + 1; tn := tnc))
if valid
then ( cleanup )
else ( backup )
临界区结束
}上述情况很容易验证是合法的,因为 tend 整个就是串行的,(3) 之所以不需要是因为进这个阶段就读写完了。对于单核系统+验证/写入本身会非常快的场景,上面差不多就够用了,但是多核系统或者要 I/O 的话,可能我们就希望并行处理了。有一种优化的方式是,进入临界区之前,读一下 tnc, 作为 midTn,然后先做一次验证。读取 tnc 之后,后续的提交事务 ts 都是大于 tnc 的。这里先模糊做一次 [StartTn + 1, midTn] 内的检查(是开始到现在已经提交的事务),再进临界区的时候,再拿到一个具体的 FinishTn,做验证。这里的核心逻辑就是检测 [StartTn, FinishTn] 这个 Window 中的写没有和本事务的读冲突。因为查询没有编号,所以这里不需要给查询作 tnc increment.再回顾一下这一段,这里本身把 Validation 串行操作了,其中关键的部分在于 tnc 的读取和增加,再之前的 Rules 中,Rule1/Rule2 是显而易见的,这里通过 tnc 递增和验证区间来保证;拿到这个 id 之后,再去检查读写。Parallel Validation在这里,validation 阶段将会变成并行的。这里将会使用所有的三条规则。关于 Rule2, 验证规则和之前是相同的,对 Rule 3,这里需要维护一个 active 事务集合。那么,validation 如下(这里分别记 < 和 > 为临界区的开始和结束)tend() {
<
FinishTn := tnc
FinishActive := {拷贝一份 active}
active.Append({本事务 id})
>
检查 [StartTn + 1, FinishTn] 中, 读集合是否和它们的写集合冲突
检查 FinishActive 中,它的写是否与自身的读冲突
if valid:
then (
(write phase)
<
tnc := tnc + 1
tn := tnc
active.erase({本事务 id})
>
)
}显然,这里是没问题的~概念补充这里有一个 Validation 顺序的问题,实际上,原论文描述的就是一种 BOCC(Backward OCC) 的算法,当事务进入 validation 阶段的时候,它会与之前进 Validation 的事务验证。Backward Validation: Check whether the committing txn intersects its read/write sets with those of any txns that have already committed.Forward Validation 在提交的时候广播自己的 WriteSet,让读取的事务来做一些判断。读取事务可以当即判断,也可以 Buffer 一些,最后一起判断。Forward Validation: Check whether the committing txn intersects its read/write sets with any active txns that have not yet committed.此外,我们还可以考虑基于版本的 OCC,每个数据项和一个写入版本相关联,读取的时候拿到一个时间戳,成功提交的事务会带一个唯一的时间戳写入。验证的时候通过 ts 比对来进行验证:读取的 w-ts 和现有的 w-ts 一样,就没啥问题,这里 15-445 slide 演示了相关的例子。具体一些细节可以在: https://wangziqi2013.github.io/article/2018/03/21/Analyzing-OCC-Anomalies-and-Solutions.html 这里看看。OCC 评估 期权清算公司 (OCC) | Investor's wiki Investor's wiki Search Search zh 中文 en Englishde Deutschit Italianofr Françaisru Русскийes Españolzh 中文hi हिन्दीar العربيةpt Portuguêsms Bahasa Melayuko 한국어tr Türkçeja 日本語nl Nederlandspl Polskino Norsksv Svenskais Íslenskafi Suomi Navigation Home Glossary 投资股票债券隐蔽性个人理财Fundamental Analysis技术分析贸易银行业税收 Disclaimer Terms of Use Privacy Policy Cookie Policy Navigation Home Glossary 投资股票债券隐蔽性个人理财Fundamental Analysis技术分析贸易银行业税收 Disclaimer Terms of Use Privacy Policy Cookie Policy 期权清算公司 (OCC) 投资Laws and RegulationsSEC安全和监管机构 什么是期æ�ƒæ¸…ç®—å…¬å�¸ (OCC)? 期æ�ƒæ¸…ç®—å…¬å�¸ (OCC) 是一个å�Œæ—¶æ‹…任期æ�ƒå’ŒæœŸè´§å�ˆçº¦å�‘行人和担ä¿�人的组织。它是全ç�ƒæœ€å¤§çš„股票è¡�生å“�清算机æ�„,在商å“�期货交易委员会(CFTC)和ç¾�国è¯�券交易委员会(SEC)的管辖下è¿�作。 OCC ä¸�应ä¸�ç¾�国财政部的货å¸�主计长åŠ�公室混淆,å��者的首å—æ¯�缩写è¯�为“OCCâ€�。 了解期æ�ƒæ¸…ç®—å…¬å�¸ (OCC) OCC æˆ�ç«‹äº� 1973 å¹´ï¼Œå…¶ç›®æ ‡æ˜¯ç¨³å®šè‚¡ç¥¨è¡�生å“�å¸‚åœºã€‚æ ¹æ�®å…¶ä½¿å‘½å£°æ˜�,OCC 是一家以客户为导å�‘的清算组织,æ��ä¾›é£�险管ç�†ã€�清算和结算æœ�务。 在其 SEC 管辖范围内,OCC为看跌期æ�ƒå’Œçœ‹æ¶¨æœŸæ�ƒã€�股指ã€�外å¸�ã€�利ç�‡ç»„å�ˆå’Œä¸ªè‚¡æœŸè´§äº¤æ˜“清算。å�Œæ—¶ï¼Œä½œä¸ºCFTC管辖下的注册è¡�生å“�清算机æ�„(DCO),为期货产å“�交易和期货期æ�ƒæ��供清算结算æœ�务。 OCC 还为è¯�券借贷交易æ��ä¾›ä¸å¤®å¯¹æ‰‹æ–¹æ¸…算和结算æœ�务。 该组织本质上充当担ä¿�人,以确ä¿�履行其清算的å�ˆå�Œä¹‰åŠ¡ã€‚由交易所ã€�清算会员和管ç�†å±‚代表组æˆ�的董事会(B of D)负责监ç�£ OCC,其大部分收入æ�¥è‡ªå�‘其会员收å�–的清算费用。 OCC 还æ��ä¾›ç ”ç©¶æœ�务和其他å¢�值解决方案,以支æŒ�å’Œå�‘展其æœ�务的市场。该公å�¸ä¸º 16 家ä¸�å�Œçš„交易所æ��ä¾›æœ�务,包括 C2 期æ�ƒäº¤æ˜“所ã€�èŠ�åŠ å“¥æœŸæ�ƒäº¤æ˜“所ã€�国际è¯�券交易所ã€�纳斯达克 BX 期æ�ƒã€�纳斯达克 PHLXã€�纽约è¯�券交易所ç¾�国期æ�ƒå’Œçº½çº¦è¯�券交易所 Arca 期æ�ƒã€‚ OCC 在 2020 年清算了近 75.2 亿份å�ˆçº¦ï¼Œæ˜¯è¯¥è¡Œä¸šæœ‰å�²ä»¥æ�¥æœ€é«˜çš„年度交易é‡�。 期æ�ƒæ¸…ç®—å…¬å�¸ (OCC) çš„å�†å�² 2008 年金è��å�±æœºçš„余波给 OCC 带æ�¥äº†æ–°çš„审查和目的。进行了更改,以便它å�¯ä»¥è°ƒæ•´å…¶è¿�è�¥ä»¥æ›´å¥½åœ°åº”对é£�险。è�”邦监管机æ�„开始将 OCC 视为市场治ç�†å’Œç›‘ç�£ä¸æ—¥ç›Šä¸�å�¯æˆ–缺的一部分。对该组织的高度关注带æ�¥äº†ç›‘管机æ�„的一些ä¸�利评估。 2013 年,SEC 批评了 OCC 处ç�†å¸‚场问题的方å¼�的管ç�†å’Œè§„划。 SEC还表示,OCC当时的管ç�†å±‚在公å�¸æ²»ç�†æ–¹é�¢ç¼ºä¹�适当的监ç�£ã€‚ SEC 进一æ¥åˆ—举了ä¸�管ç�†å±‚和董事会的众多利益冲çª�,这对该组织对监管å�ˆè§„的承诺æ��出了质疑。 这导致引入了新的行政领导,包括å¢�åŠ æ–°è�Œä½�ä»¥åŠ å¼º OCC çš„å�ˆè§„工作。 ç�°ä»»é¢†å¯¼ OCC 的管ç�†å’Œé¢†å¯¼ç›®å‰�ç”±æ�¥è‡ªæŠ•èµ„ç•Œä¸�å�Œåœ°åŒºçš„多元化团队组æˆ�,包括交易所ã€�清算会员和其他董事。截至 2021 å¹´ 10 月,关键数æ�®åŒ…括: Craig S. Donohue: 在 2014 å¹´åŠ å…¥ OCC 担任执行主å¸ä¹‹å‰�, Donohue 在全ç�ƒé‡‘è��市场工作了 20 多年。他在 2004 年至 2012 年期间担任CME 集团的首å¸æ‰§è¡Œå®˜ï¼Œæ¤å‰�曾è�·å¾— Harvard Business Review å’Œ Institutional Investor Magazine 的认å�¯ã€‚ John P. Davidson: 作为首å¸æ‰§è¡Œå®˜(CEO),Davidson 负责监ç�£ OCC 的财务和ä¼�业é£�险管ç�†ã€�å�ˆè§„和技术è�Œèƒ½ã€‚åœ¨åŠ å…¥ OCC 担任总è£�兼首å¸è¿�è�¥å®˜ (COO) 两年å��,戴维森äº� 2019 å¹´æˆ�为首å¸æ‰§è¡Œå®˜ã€‚æ ¹æ�®ä»–的简å�†ï¼Œä»–在全ç�ƒé‡‘è��市场拥有超过三年的ç»�验。 Scot Warren: Warren 是公å�¸çš„执行副总è£�兼首å¸è¿�è�¥å®˜(COO)。除其他外,他还负责监ç�£ OCC 的财务ã€�项目管ç�†ã€�è¿�è�¥å’ŒäººåŠ›èµ„æº�(HR)。 Warren æ¤å‰�曾担任èŠ�商所股票产å“�和指数æœ�务部的高级董事总ç»�ç�†ã€‚ ## 强调 已进行更改,以便 OCC å�¯ä»¥è°ƒæ•´å…¶ä¸šåŠ¡ä»¥æ›´å¥½åœ°åº”对 2008 年金è��å�±æœºå��çš„é£�险。 期æ�ƒæ¸…ç®—å…¬å�¸ (OCC) 是在 SEC å’Œ CFTC 的支æŒ�下在ç¾�国交易的上市期æ�ƒçš„ä¸å¤®æ¸…算所和监管机æ�„。 OCC 清算期æ�ƒå�ˆçº¦ã€�利ç�‡ç»„å�ˆå’Œå�•ä¸€è‚¡ç¥¨æœŸè´§çš„交易所交易。 OCC æ��供的å¢�å€¼è§£å†³æ–¹æ¡ˆåŒ…æ‹¬ç ”ç©¶æœ�务ã€�投资者教育ã€�客户支æŒ�å’Œè�¥é”€æ�¨å¹¿ã€‚ Stock Insights | iOS & Android Investing ideas and signals aggregator Disclaimer Terms of Use Privacy Policy Cookie Policy September 16, 2023, 20 浅谈三维建模内核Open Cascade(OCC) - 知乎切换模式写文章登录/注册浅谈三维建模内核Open Cascade(OCC)Jianhongwei810深圳力合精密装备科技有限公司 电测工程师CAD技术从60年代诞生以来,经历了二维绘图、线框模型、自由曲面模型、实体造型、特征造型等重要发展阶段。随着CAD技术的发展也诞生了许多成熟和知名的CAD引擎和软件。目前,商用CAD引擎主要包括了ACIS、HOOPS、ParaSolid等。其中使用ACIS引擎的底层产品主要包括了AutoCAD、Inventer、Catia、MicroSolid等;使用ParaSolid引擎的主要包括了UG、Solidworks、SolidEdge等。但由于关注点的差别及商业保密的因素,不同的CAD软件都有自己的一套建模方式和存储体系,这导致了系统间数据无法进行直接的传递。目前采用的方式是通过中间标准格式文件为媒介进行传递,但是这种方式会丢失一些细节特征,这就还需要进行一些其它额外的修补工作,这也一定程度上影响了CAD技术的发展。在商用CAD软件外,还有一些比较成熟的开源CAD引擎,其中使用的比较多的是OpenCascade(简称OCC)。OCC平台是由法国Matra Datavision公司开发的CAD/CAE/CAM软件平台,可以说是世界上最重要的几何造型基础软件平台之一。它是一个开放源码CAD 内核,可以定制和扩展(添加新的功能组件,类的进一步继承),面向CAD/CAM,对主流CAD 数据格式提供支持(STEP/STL/IGES 等,可自行开发转换程序提供特定数据格式的支持),提供高级建模函数(拟合,有理样条曲线,拉伸、旋转、扫出、层叠拉伸、圆角、倒角、薄壳、修剪、偏移等),参数化模型,提供几何模型的特征提取,对Visual C++/MFC 有很好的支持。 开放式级联技术(OCCT)是唯一一个开源的全尺寸三维几何库。OCCT致力于成为最好的免费cad软件内核之一,广泛用于开发涉及以下工程和机械领域的专业程序:三维建模(cad)、制造(CAM)、数值模拟(CAE)、测量设备(CMM)和质量控制(CAQ)。自1999年作为开源CAD软件内核发布以来,OCCT已成功应用于从建筑、建筑到航空航天和汽车等众多项目。Open Cascade Technology(OCCT),原名CAS.CADE,是由Open Cascade SAS开发和支持的三维CAD、CAM、CAE等的开源软件开发平台。Open CASCADE(简称OCC)平台是由法国MatraDatavision公司开发的CAD/CAE/CAM软件平台,可以说是世界上最重要的几何造型基础软件平台之一。开源OCC对象库是一个面向对象C++类库,用于快速开发设计领域的专业应用程序。OCCT是一个全面的B-Rep(边界表示)建模工具包。OCCT在LGPL-2.1-only许可证下可用,允许在开源和专有应用程序中使用。OCC主要用于开发二维和三维几何建模应用程序,包括通用的或专业的计算机辅助设计CAD系统、制造或分析领域的应用程序、仿真应用程序或图形演示工具。OcC通过有机组织的C++库文件提供了六个模块。可视化模块作为OCC的核心部分,是可视化技术的具体体现。CAS.CADE(abbreviated from Computer Aided Software for Computer Aided Design and Engineering) was originally developed in the early 1990s by MatraDatavision, developer of Euclid CAD software as the underlying infrastructure for its future version Euclid Quantum. In 1998 the company abandoned software development to concentrate on services, and most of the software development facilities were soldtoDassault Systèmes, developer of competingCATIA. OpenCascade技术是目前世界上唯一的开源软件开发平台。这家法国公司为三维曲面和实体建模、可视化和CAD数据交换提供服务和工具。 其行政和管理人员驻扎在法国总部,而大部分开发工作是由大约70名工程师组成的俄罗斯团队完成的。OpenCascade SAS位于下诺夫哥罗德的Datavision生产设施负责支持开源SDK和编写最终用户软件应用程序。1999年,Matra Datavision决定以开放级联技术公共许可证[10]下的开源模型发布其CAS.CADE基础设施,并将其更名为开放级联。2000年,成立了一家独立的公司Open Cascade SAS,以围绕Open Cascade开展业务。Open Cascade SAS于2003年出售给法国服务提供商Principia,然后在2006年被Areva的子公司Euriware Group收购。2004年,该软件更名为Open Cascade Technology,以区别于该公司本身的名称。Open Cascade S.A.S.提供该库的认证版本,该版本偶尔发布,通常每年发布1-2个版本。在版本6.5.0(2011)之前,只有次要版本和主要版本是公开的,而中间(维护)版本仅可供Open Cascade S.A.S.的客户访问。例如,版本6.3.0于2008年公开发布,下一个公开版本6.5.0于2011年初发布。从6.5.0版开始的所有最新版本都是公开的。2011年3月,Thomas Paviot启动了开放级联库的最新公开版本6.5.0。该倡议被称为开放式级联社区版。该项目旨在为图书馆建立一个独立的基于社区的发布和bug报告流程。2011年12月,OpenCascade为外部贡献者安装了一个web门户,并公开了其螳螂Bug跟踪器和更多Git存储库(只读GitHub镜像已于2020年建立)。根据新网站上的声明,鼓励开源社区的外部贡献者参与开放级联技术的开发,即直接在bugtracker中注册bug,在签署贡献者许可协议后对代码做出贡献,等等。自2013年12月18日起,LGPL-2.1中仅提供了版本为6.7.0的开放式级联技术,其他例外情况除外。在此之前的版本是根据“开放级联技术公共许可证”授权的,该许可证与GPL不兼容,Fedora项目认为该许可证是非免费的。OCCT的功能分为几个大模块。每个模块定义工具包(库)列表。主要模块:基础类:定义基本类、内存分配器、OS抽象层、集合(数据映射、数组等)、加速数据结构(BVH树)和其他模块使用的向量/矩阵数学。建模数据:提供数据结构来表示二维和三维几何图元(分析曲线:直线、圆、椭圆、双曲线、抛物线、Bézier、B样条、偏移;分析曲面:平面、圆柱体、圆锥体、球体、圆环体、Bézier、B样条、旋转、拉伸、偏移)及其组合到B-Rep模型中。建模算法:包含大量几何和拓扑算法(交集、布尔运算、曲面网格划分、圆角、形状修复)。可视化:提供在3D Viewer中显示几何图形的交互式服务;实现一个紧凑的OpenGL/OpenGL ES渲染器,支持传统的Phong、实时PBR金属粗糙度着色模型以及交互式光线跟踪/路径跟踪引擎。数据交换:提供导入/导出各种CAD格式的可能性。STEP、IGES、glTF、OBJ、STL和VRML本机支持。[24]可以使用插件导入其他格式。[25]扩展数据交换(XDE)组件依赖于统一的XCAF文档定义,其中包括CAD形状的装配结构,颜色/名称/材质/元数据/图层属性以及其他补充信息,如PMI。应用程序框架:提供处理特定于应用程序的数据的解决方案。DRAW Test Harness:基于Tcl解释器实现OCCT算法的脚本接口,用于交互式使用、自动化流程、原型应用程序和测试目的。Workshop Organization Kit(WOK)是一个开放式级联开发环境,旨在允许大量开发人员使用通过本地网络共享的公共参考版本来开发产品。在OCCT 7.0.0发布之前,如果不使用WOK,就不可能对源代码进行实质性修改,因为它是唯一一个支持CDL(CAS.CADE定义语言)的工具,用于声明大多数OCCT类,还用于定义OCCT库的逻辑结构。WOK已包含在以前的OCCT分发中;自OCCT版本6.4以来,它是一个独立的工具。在7.0.0版本中,所有CDL文件都已从OCCT源代码中删除,使得OCCT开发不再需要WOK。相对于商用软件,开源CAD引擎具有免费、可扩展性好等优点;同时随时CAD技术及开源引擎的不断优化,像OCC这样的引擎将在更多的领域得到应用。目前基于OCC的CAD软件有FreeCAD、HeeksCAD、AnyCAD等。发布于 2021-09-28 10:04FreeCADCADCATIA赞同 558 条评论分享喜欢收藏申请 开源三维建模引擎OpenCASCADE(OCC) - 知乎切换模式写文章登录/注册开源三维建模引擎OpenCASCADE(OCC)Jianhongwei810深圳力合精密装备科技有限公司 电测工程师 三维几何建模引擎 是三维CAD建模的核心,用于产品三维造型的精确数学表示和模型的管理。当今世界上流行的有Parasolid和ACIS两大建模引擎,被绝大多数三维CAD软件所采用。这两大引擎均由美国团队掌控,也就是说,国内基于这两个引擎构建的三维CAD软件,都可能面临“卡脖子”风险。另外,还有一个世界上唯一的开源几何引擎OpenCasCade,不过可惜的是未大范围被商用三维CAD软件采用。许可证:LGPL开发语言:C/C++官网:https://dev.opencascade.org/Open CASCADE Technology (OCCT) 是一个面向对象的 C++ 类库,旨在快速生成复杂的特定领域 CAD/CAM/CAE 应用程序。使用 OCCT 开发的典型应用程序处理通用或专用计算机辅助设计 (CAD) 系统、制造或分析应用程序、模拟应用程序甚至插图工具中的二维或三维(2D 或 3D)几何建模。如果没有前 MATRA DATAVISION 开发团队所做的大量工作,目前的项目就不会存在,其中包括主要 OCCT 数据结构(所谓的形状和数据框架)的架构师、OCAF 的设计师、开发了大部分内容的建模团队。几何和拓扑算法以及拓扑命名、数据交换服务设计者、图形团队以及负责内核工具包和CDL、WOK和Draw等开发工具的团队。我Open Cascade是Capgemini旗下的一家信息技术公司。Open Cascade 提供科学技术计算和模拟工具领域的服务。Open Cascade 主要因其开源而为公众所知,它提供:用于 3D 曲面和实体建模、可视化、数据交换和快速应用程序开发的开放级联技术(OCCT)Salome(软件) ——一款免费软件,为数值模拟的预处理和后处理提供通用平台Open Cascade 通过使用其开源软件为全球各种客户开发商业软件来构建其商业模式。公司总部位于法国基扬古尔(Guyancourt),Île-de-France,Issy-les-Moulineaux),在法国里昂和俄罗斯下诺夫哥罗德设有研发中心。Open Cascade 在法国和俄罗斯雇用了约 150 名工程师和开发人员。(俄乌战争,俄罗斯研发中心裁撤)Open CASCADE 是一套开放原始码的 CAD/CAM/CAE 几何模型核心,源自于法国的 Matra Datavision 公司,这一套函式库系统原来是著名的 CADCAM 软体 EUCLID 的开发平台,但是在 1998 年, Matra Datavision 改变了经营策略,从以销售软体为主改变为提供 CAD/CAM/CAE 软体服务为主的获利模式,并且在 1999 年公布 Open CASCADE 的程式原始码,任何人都可以在该公司的网站上下载并且使用这些程式码。Matra Datavision 以此函式库为基础位客户建立客制化的数值模拟软体,国内CAD/CAM 产业所需的套装软体常常动辄数百万甚至上千万,如此高昂的软体费用对于中小企业来说确实是非常沉重的负担,而且套装软体中的功能有些其实根本用不到,但是软体使用者却必须花钱购买这些用不到的功能。如果能够针对中小企业的需求建构一个精简化的 CAD/CAM 软体,并且在生产需求改变的时候才增加新的功能,将可以有效节省软体成本,而 Open CASCADE 的成功经验或许可以提供产业界甚至学术界一些新的思考方向。Open CASCADE 是一个功能强大的三维建模工具,提供了点、线、面、体和复杂形体的显示和交互操作,经过深度开发后可实现纹理、光照、图元填充、渲染等图形操作和放大、缩小、旋转、漫游、模拟飞行、模拟穿越等动态操作。历史:1980年:法国Matra Datavision公司发布Euclid CAD系统。1987 年:Euclid-IS,第一个集成 CAD/CAM 系统出现。1993:Euclid 3 发布。这是一个全新且独特的系统,支持并行工程。 Euclid 软件使 Matra Datavision 成为 CAD/CAM 领域真正的市场领导者。欧几里得应用于最广泛的工程领域,从通用机械和汽车工程到复杂的机器人和航空航天工业。1993年:由Matra Datavision创建的名为CAS.CADE(计算机辅助设计和工程的计算机辅助软件)的开发平台发布。 Matra Datavision 使用 CAS.CADE 作为开发 Euclid Quantum 的平台。1996 : Matra Datavision 发布了新一代 Euclid Quantum。1998 年:Matra Datavision 改变战略,成为软件服务提供商。当年,该公司与达索系统签署协议,收购Quantum产品线的部分产品,包括Euclid Styler、Euclid Machinist、Strim等。1999 年:Matra Datavision 在互联网上以 Open Cascade 的形式开源发布了 CAS.CADE,同时专注于围绕它的渲染服务。2000 年:12 月 7 日,Matra Datavision 宣布成立 Open Cascade SAS,这是其子公司,旨在支持和开发 Open Cascade 平台,并为其客户开展众多定制开发项目。2003 年:母公司 Matra Datavision 被 IBM 收购,而 Open Cascade 被法国有限元求解器编辑器和工程服务提供商Principia Research & Development收购。 2004 年:Open Cascade 平台更名为 Open Cascade Technology,以避免与公司本身 (Open Cascade) 名称混淆。2007 年:Open Cascade SAS 成为 Euriware 的子公司,Euriware 是阿海珐集团的子公司。2014年:Open Cascade SAS的母公司Euriware被Capgemini收购。2015年:Euriware与Capgemini合并,,Open Cascade SAS成为Capgemini的直接子公司。国内华天软件技术总监,华云三维CEO梅敬成博士归国前曾就职法国马特拉资讯、达索系统等世界知名CAD软件公司,参与Euclid、CATIA、OpenCasCade等产品和内核的研发。梅博士当年工作过的法国马特拉资讯,当年拥有两个产品:实体造型 Euclid, 曲面造型 UNISURF,客户有雷诺汽车等大型客户。但是 Euclid 是基于多面体的实体造型,UNISURF 是基于精确几何的曲面造型,两者无法融合,没法与市场上出现的新产品Pro/E进行竞争,因此迫切需要开发新一代CAD产品。新的CAD产品需要构建在一个新的基于 BRep的几何建模引擎之上,因此就开发了新内核 CasCade。这个内核的几何部分完全基于国际标准STEP定义,我当年也参与了这个内核的研发,比如里面的“曲面缝合”功能就是我开发的。后面我作为负责人,主导了基于这个内核的新一代CAD产品Euclid Designer的开发,当年中国航天非常重视Euclid Designer的研发,并给予厚望。后面欧洲宇航防务集团(EADS,也是空客母公司)的成立,导致达索系统与马特拉资讯的重组,这样新一代CAD产品Euclid Designer就下马了,内核CasCade就变成了现在大家熟知的 Open CasCade, 世界上唯一的一个开源几何造型内核。在这个大的技术变革中,做得非常成功的有两家公司。第一家就是达索系统。旗下的CATIA产品,成功地从CATIA V4 进化为 CATIA V5。CATIA V5 从 FORTRAN语言变成 C++语言,基于自己的建模引擎,整合了合并的 CISIGRAPH 、马特拉资讯 的几何造型算法。利用了俄罗斯LEDAS外包,研发了自己的几何约束求解器。并从IBM计算机系统转向当年流行的基于UNIX的工作站、以及后面的Windows系统。牢牢占据了航空、航天、汽车等高端制造市场。果子注释:(1)达索(Dassault Systemes)收购马特拉资讯(Matra Datavision)并不是为了实体技术,实体建模是基于多面体的,完全被精确实体造型超越,山大华天总工梅敬成博士当时作为技术经理负责做OCC和Euclid Designer就是为了解决这个问题。因此达索收购MDTV,Euclid完全消失了,但是积累的UNISURF、STRIM100的曲面算法、CAM等等保留了下来。整体来说,收购不是为了技术,主要是消灭一个竞争对手,拿到对手的客户。只不过马特拉几年前收购了我工作过的第一家公司Cisigraph,两家的曲面造型都很强。现在达索还保留了原Cisigraph在法国南部的研发中心,叫达索普罗旺斯,主要做曲面设计、CAM、3D打印等。(2)UNISURF是一个开创性的曲面CAD / CAM系统,旨在协助车身设计和加工。它由法国工程师Pierre Bézier于 1968 年为雷诺开发,并于 1975 年在公司全面投入使用。到 1999 年,大约 1,500 名雷诺员工使用 UNISURF 进行汽车设计和制造。编辑于 2023-11-07 16:17・IP 属地广东CAD三维建模引擎三维建模赞同 132 条评论分享喜欢收藏申请 OCC简介_occ和opengl-CSDN博客 OCC简介 最新推荐文章于 2024-01-09 21:24:31 发布 沧云 最新推荐文章于 2024-01-09 21:24:31 发布 阅读量4.2k 收藏 9 点赞数 2 分类专栏: # OCC 文章标签: 几何学 3d 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/qq_26501133/article/details/121563047 版权 OCC 专栏收录该内容 1 篇文章 0 订阅 订阅专栏 OCC全名OpenCasCade,是由法国Matra Datavision公司发布的一套CAD/CAM/CAE软件平台。开源OCC对象库是一个面向对象C++类库。 OpenCascade的显示是由OpenGL实现的,也就是说OpenGL是OpenCascade的基础。 OpenCascade提供二维和三维几何体的生成、显示和分析。主要功能有: 1.创建锥、柱、环等基本几何体; 2.对几何体进行布尔操作(相加,相减,相交运算); 3.倒角,斜切,镂空,偏移,扫视; 4.几何空间关系计算(法线,点积,叉积,投影,拟合等); 5.几何体分析(质心,体积,曲率等); 6.空间变换(平移,缩放,旋转)。 最近因为项目需要,开始研究OCC类库,后面会把研究心得和收获慢慢整理分享出来 优惠劵 沧云 关注 关注 2 点赞 踩 9 收藏 觉得还不错? 一键收藏 打赏 知道了 4 评论 OCC简介 OCC全名OpenCasCade,是由法国Matra Datavision公司发布的一套CAD/CAM/CAE软件平台。开源OCC对象库是一个面向对象C++类库。OpenCascade的显示是由OpenGL实现的,也就是说OpenGL是OpenCascade的基础。OpenCascade提供二维和三维几何体的生成、显示和分析。主要功能有:1.创建锥、柱、环等基本几何体;2.对几何体进行布尔操作(相加,相减,相交运算);3.倒角,斜切,镂空,偏移,扫视;4.几何空间关系计算(法线,点积,叉积,投影 复制链接 扫一扫 专栏目录 pythonocc实例 01-06 该实例为pythonocc库的实例,可以帮助你快速熟悉pythonocc库函数的使用,从而快速打造自己的cad软件 OCC的下载与安装简介 10-18 在 OCC 的官网 http://www.opencascade.org/getocc/download/loadocc/上下载 OpenCASCADE651.zip,大约 67M。Open CASCADE Technology 6.5.1 can be installed with binaries pre-compiled by Visual C++ 8.0 using the Installation Procedure under Windows platform only. 4 条评论 您还未登录,请先 登录 后发表或查看评论 VC++ OCCI 操作 ORACLE 04-24 让实例,让你清松掌握OCCI操作ORACLE数据库! 编写高效率的数据库操作程序 opencascade7.2 windows64位的OCC库 07-10 可以直接引用的opencascade7.2 windows64位的OCC库,再vs2013/vs2010上,亲测通过
有用OCC做三维显示的,可直接下载,直接编译麻烦,还需要安装引用库 PythonOCC的安装 04-04 PythonOCC是 tpaviot 利用python封装OpenCASCADE的社区版本而成的开源CAD库,为广大python用户操纵CAD带来了极大的便利。 OCC从入门到放弃(下载与编译) sendinn的博客 08-16 9934 下载地址:https://www.opencascade.com/content/latest-release 我的vs是2015的,vs2015版本号是vc14,这里我下载的是VC++ 2017 64 bit:opencascade-7.3.0-vc14-64.exe 这个下载完安装好的目录大概是这个亚子的 opencasecad是我们要的occ库,其他的是occ需要的库 ... MFC首次添加OCC 库 qq_39433050的博客 05-04 215 准备工作:安装opencascade。 [C++] OpenCasCade空间几何库的模型展现 Method.Jiao的博客 01-04 7885 OpenCasCade是什么 Open CASCADE(简称OCC)平台是由法国Matra Datavision公司开发的CAD/CAE/CAM软件平台,可以说是世界上最重要的几何造型基础软件平台之一。开源OCC对象库是一个面向对象C++类库,用于快速开发设计领域的专业应用程序。 最近一直在利用OpenCasCade来进行空间几何的相关算法,于是有了这个教程让大家可以更直观的看到occ内部对象... occt 几何图形库入门01 qq_25160559的博客 05-13 2050 OCCT简介: 大约 开放级联技术 (OCCT) 是用于 3D CAD、CAM、CAE 的开源软件开发平台。这是位于 https://dev.opencascade.org/ 的官方存储库的克隆。 下载地址: https://github.com/3drepo/occt.git https://github.com/Open-Cascade-SAS/OCCT.git 分成两个程序体, 主程序,外部依赖程: 主程序体: https://github.com/Open-Cascade-SAS/OCCT.git opencascad从入门到进阶之:下载 配置和编译 loujiand的博客 07-23 1612 初学OCC时,可能会不知所措,无从下手。但是网上的教程确实非常的多,但是他们都有一个特点,都是站在大佬的技术上写成的,初学c++和occ的人基本也是照着教程做一遍,中间会出现无数的问题,弄的人心力交瘁。以上就是opencascade的下载,安装,vs2017环境的配置,我是非常不专业的,也许很多地方我都是瞎说,但是这样做确实可行,简单还好理解。第一步,我们先从官网下载opencade安装包,这个安装包也只能在windows系统使用,而我也只会windows系统的配置和编译,所以我的能力只能教你这个。 OCC类基础_occ类_OCC_ 09-29 occ类说明,介绍了常用的几何建模使用类,并有具体实例 pythonocc自定义对话框 12-09 使用pythonocc为库,以pyqt中的qtdesigner为工具设计一个自定义对话框。 实现了点击 一个点弹出自定义对话框 opengl、opencascade、webgl、Direct3D关系 qq_38409301的博客 08-27 402 三维库关系。 OpenCascade显示模块的OpenGL层的实现 astrosky的专栏 07-28 5757 Normal 0 7.8 磅 0 2 false false false MicrosoftInternetExplorer4 BRepPrimAPI_MakeRevol ,对于角度而言,范围是[0,2PI],默认值是2PI,生成规则: - Vertex -> Edge. - Edge -> Face. - Wire -> Shell. - Face-> Solid. - Shell-> CompSolid. BRepOffsetAPI_MakePipe类 可以生成一个管道 类继承关系是:BRepBuilderAPI_MakeShape--〉BRepPrimAPI_MakeSweep-->BRepOffsetAPI_MakePipe 以下为生成一个管道的示例过程: --利用生成一个WIRE,作为管道的路径: Handle(Geom_BezierCurve) curve = new Geom_BezierCurve(CurvePoles); TopoDS_Edge E = BRepBuilderAPI_MakeEdge(curve); TopoDS_Wire W = BRepBuilderAPI_MakeWire(E); --生成一个面,作为生成管道的截面: gp_Circ c = gp_Circ(gp_Ax2(gp_Pnt(0.,0.,0.),gp_Dir(0.,1.,0.)),10.); TopoDS_Edge Ec = BRepBuilderAPI_MakeEdge(c); TopoDS_Wire Wc = BRepBuilderAPI_MakeWire(Ec); TopoDS_Face F = BRepBuilderAPI_MakeFace(gp_Pln(gp::ZOX()),Wc); --利用前两步生成的路径和截面来生成pipe: TopoDS_Shape S = BRepOffsetAPI_MakePipe(W,F); Handle(AIS_Shape) ais2 = new AIS_Shape(S); BRepOffsetAPI_ThruSections类 此类继承自BRepBuilderAPI_MakeShape:创建一个loft,通过一组给定的sections,生成一个shell或一个solid;通常,section是wire;但是第一个和最后一个section可以是 vertices; 比如: BRepOffsetAPI_ThruSections generator(Standard_False,Standard_True); generator.AddWire(W1); generator.AddWire(W2); generator.AddWire(W3); generator.AddWire(W4); generator.Build(); TopoDS_Shape S1 = generator.Shape(); Handle(AIS_Shape) ais1 = new AIS_Shape(S1); BRepBuilderAPI_MakePolygon类 创建一个polygonal wires,可以通过一组点或向量生成,也可以先生成一个空的对象,再添加点。 示例1: BRepBuilderAPI_MakePolygon P; P.Add(gp_Pnt(0.,0.,0.)); P.Add(gp_Pnt(200.,0.,0.)); P.Add(gp_Pnt(200.,200.,0.)); P.Add(gp_Pnt(0.,200.,0.)); P.Add(gp_Pnt(0.,0.,0.)); TopoDS_Wire W = P.Wire(); 示例2: TopoDS_Wire wprof = BRepBuilderAPI_MakePolygon(gp_Pnt(0.,0.,0.),gp_Pnt(-60.,-60.,-200.)); BRepOffsetAPI_MakeEvolved类 创建一个可展图形,它是通过一个planar spine (face or wire)和一个rofile (wire)来生成的,它是一个非循环的sweep (pipe),用profile沿着spline;自相交点将被移除; 比如: --沿着一个spline,sweep一个profile; Standard_EXPORT BRepOffsetAPI_MakeEvolved(const TopoDS_Face& Spine,const TopoDS_Wire& Profil,const GeomAbs_JoinType Join = GeomAbs_Arc,const Standard_Boolean AxeProf = Standard_True,const Standard_Boolean Solid = Standard_False,const Standard_Boolean ProfOnSpine = Standard_False,const Standard_Real Tol = 0.0000001); AxeProf参数如果为true,R是0,X,Y,Z;如果solid为真,结果为一个solid或复合的solids; 示例: TopoDS_Shape S = BRepOffsetAPI_MakeEvolved(W,wprof,GeomAbs_Arc,Standard_True,Standard_False,Standard_True,0.0001); BRepBuilderAPI_ModifyShape类 当使用BRepTools来创建一个修改类,主要有以下派生类: --BRepBuilderAPI_Copy:处理一个图形的拷贝; --BRepBuilderAPI_Transform 和BRepBuilderAPI_GTransform:用来对一个图形应用几何变形; --BRepBuilderAPI_NurbsConvert:用来将一个图形转化为NURBS几何体; --BRepOffsetAPI_DraftAngle:创建一个tapered图形; BRepOffsetAPI_DraftAngle类 创建一个tapered图形;一般过程是: --初始化构造算法; --输入要taper的特征面; --实现算法; --生成结果; 示例: TopoDS_Shape S = BRepPrimAPI_MakeBox(200.,300.,150.); BRepOffsetAPI_DraftAngle adraft(S); TopExp_Explorer Ex; for (Ex.Init(S,TopAbs_FACE); Ex.More(); Ex.Next()) { TopoDS_Face F = TopoDS::Face(Ex.Current()); Handle(Geom_Plane) surf = Handle(Geom_Plane)::DownCast(BRep_Tool::Surface(F)); gp_Pln apln = surf->Pln(); gp_Dir dirF = apln.Axis().Direction(); if (dirF.IsNormal(gp_Dir(0.,0.,1.),Precision::Angular())) adraft.Add(F, gp_Dir(0.,0.,1.), 15.*PI180, gp_Pln(gp::XOY())); } ais1->Set(adraft.Shape()); 二:关于布尔等实体修改操作相关 BRepAlgoAPI_BooleanOperation类 此类的基类是BRepBuilderAPI_MakeShape类,它是一个抽象类; 可以应用的操作有:BOP_SECTION 、BOP_COMMON、BOP_FUSE、BOP_CUT、BOP_CUT21 有时会产生错误,无法达到想要的结果,根据返回值,可以得到错误信息,含义是: 0:OK 1: 对象创建完成,但结果为空; 2:源图形为空; 3:参数类型检查错误; 4:不能为DSFiller分配内存; 5:此种类型参数的Builder无法工作; 6:不允许的操作; 7:不能为Builder分配内存; >100 参见Builder错误信息; 相关的方法介绍: --TopTools_ListOfShape& SectionEdges()方法:返回一组截面的边,它们在布尔操作过程中生成; --Standard_Boolean HasDeleted()方法:如果至少一个图形对象被删除了,返回为真; --Standard_Boolean HasGenerated()方法:如果至少生成了一个图形,返回为真; --Standard_Boolean HasModified()方法:如果至少一个图形被修改了,返回为真; --TopTools_ListOfShape& Generated(const TopoDS_Shape& S) 方法:返回生成以后的图形的集合; --TopTools_ListOfShape& Modified2(const TopoDS_Shape& aS)方法:返回修改后的图形的集合; --Standard_Boolean IsDeleted(const TopoDS_Shape& aS)方法:如果图形S已经被删除,返回为真,即结果图形中不包括图形S; -BOP_Operation Operation()方法:返回布尔操作的类型; 布尔操作类 包括有BRepAlgoAPI_Cut类, BRepAlgoAPI_Fuse类,BRepAlgoAPI_Common类:布尔交集; BRepAlgoAPI_Section类 计算两个图形或几何体的截面,几何对象可以是平面的表面,转化为face. 示例: 给定两个图形S1和S2,计算在S1和S2上的边,在新曲线上生成近似值,结果在第一部分上而不在第二部分上: Standard_Boolean PerformNow = Standard_False; BRepBoolAPI_Section S(S1,S2,PerformNow); S.ComputePCurveOn1(Standard_True); S.Approximation(Standard_True); S.Build(); TopoDS_Shape R = S.Shape(); 如果结果为空,调用NotDone(); 常见方法: --BRepAlgoAPI_Section(const Handle(Geom_Surface)& Sf1,const Handle(Geom_Surface)& Sf2,const Standard_Boolean PerformNow = Standard_True); 用来生成线: --两个图形SH1和SH2; --图形SH和平面P1; --表面SF和图形SH; --两个表面SF1和SF2; 参数PerformNow如果为真,将直接计算结果,如果为假,表示后面将通过Build()这个函数来计算结果; 生成后的图形是由方法Shape()得出的; 这些相交的边是独立的,不在一个链表上,也不在一个wire上,如果不存在一个相交边,返回结果为空; 示例: --计算相交的基本边--利用这些基本边创建一个相交线--决定相交线在两个图形的哪个图形的参数空间; TopoDS_Shape S1 = ... , S2 = ... ; Standard_Boolean PerformNow = Standard_False; BRepAlgoAPI_Section S ( S1, S2, PerformNow ); S.ComputePCurveOn1 (Standard_True); S.Approximation (Standard_True); S.Build(); TopoDS_Shape R = S.Shape(); BRepFilletAPI_LocalOperation类 基类是BRepBuilderAPI_MakeShape; 构造在一个shell的边的园角;常用方法有 --void Add(const TopoDS_Edge& E) = 0;在builder上添加一个轮廓线; --void ResetContour(const Standard_Integer IC) = 0;重置索引为IC的轮廓线; --Standard_Integer NbContours() const = 0;返回轮廓线的数目; --Standard_Integer Contour(const TopoDS_Edge& E) const = 0;返回边E的轮廓线的索引,如果边E不在轮廓线内,返回为O; --Standard_Integer NbEdges(const Standard_Integer I) const = 0;返回在轮廓线I中的边数; --void Remove(const TopoDS_Edge& E) = 0;移除一个边; --Standard_Real Length(const Standard_Integer IC) const = 0;得到某个轮廓线的长度; --TopoDS_Vertex FirstVertex(const Standard_Integer IC) const = 0;返回某个轮廓线的第一个顶点;LastVertex方法返回最后一个顶点; --Abscissa方法,返回某个顶点的横坐标; --Standard_Boolean ClosedAndTangent(const Standard_Integer IC) const如果某个轮廓线是封闭切线,返回为真; --Standard_Boolean Closed(const Standard_Integer IC) const = 0;如果某个轮廓线是封闭,返回为真; --Reset() = 0;重置所有; BRepFilletAPI_MakeFillet类 创建一个园角; 示例一: 对一个BOX园角: BRepFilletAPI_MakeFillet fillet(Box); for (TopExp_Explorer ex(Box,TopAbs_EDGE); ex.More(); ex.Next()) { TopoDS_Edge Edge =TopoDS::Edge(ex.Current()); fillet.Add(20,Edge); } 示例二: 两个BOX,合并后园角; TopoDS_Shape fusedShape = BRepAlgoAPI_Fuse(S1,S2); BRepFilletAPI_MakeFillet fill(fusedShape); for (TopExp_Explorer ex1(fusedShape,TopAbs_EDGE); ex1.More(); ex1.Next()) { TopoDS_Edge E =TopoDS::Edge(ex1.Current()); fill.Add(E); } for (Standard_Integer i = 1;i<=fill.NbContours();i++) { Standard_Real longueur(fill.Length(i)); Standard_Real Rad(0.15*longueur); fill.SetRadius(Rad,i, 1); } TopoDS_Shape blendedFusedSolids = fill.Shape(); Handle(AIS_Shape) aBlend = new AIS_Shape(blendedFusedSolids); 示例三: 只园角其中一条边: BRepFilletAPI_MakeFillet Rake(theBox); TopExp_Explorer ex(theBox,TopAbs_EDGE); ex.Next(); ex.Next(); ex.Next(); ex.Next(); Rake.Add(8,50,TopoDS::Edge(ex.Current())); Rake.Build(); if (Rake.IsDone() ){ TopoDS_Shape evolvedBox = Rake.Shape(); ais1->Set(evolvedBox); } 示例四: 园角一个园柱: BRepFilletAPI_MakeFillet fillet(theCylinder); TColgp_Array1OfPnt2d TabPoint2(1,20); for (Standard_Integer i=0; i<=19; i++) { gp_Pnt2d Point2d(i*2*PI/19,60*cos(i*PI/19-PI/2)+10); TabPoint2.SetValue(i+1,Point2d); } TopExp_Explorer exp2(theCylinder,TopAbs_EDGE); fillet.Add(TabPoint2,TopoDS::Edge(exp2.Current())); fillet.Build(); if (fillet.IsDone() ){ TopoDS_Shape LawEvolvedCylinder = fillet.Shape(); ais3->Set(LawEvolvedCylinder); myAISContext->Redisplay(ais3,Standard_False); myAISContext->SetCurrentObject(ais3,Standard_False); } BRepFilletAPI_MakeChamfer类 创建一个倒角; 基类:BRepFilletAPI_LocalOperation; 可以设置相关参数,比如倒角两个距离,角度等参数; 示例: BRepFilletAPI_MakeChamfer MC(theBox); // add all the edges to chamfer TopTools_IndexedDataMapOfShapeListOfShape M; TopExp::MapShapesAndAncestors(theBox,TopAbs_EDGE,TopAbs_FACE,M); for (Standard_Integer i = 1;i<=M.Extent();i++) { TopoDS_Edge E = TopoDS::Edge(M.FindKey(i)); TopoDS_Face F = TopoDS::Face(M.FindFromIndex(i).First()); MC.Add(5,5,E,F); } BRepBuilderAPI_MakeShell类 生成一个表面的外壳,注意,一个图形的外壳,不是一个由表面和厚度定义的实体模型,如果想要创建这种壳,需要使用BRepOffsetAPI_MakeOffsetShape,一个外壳是由一系列相互通过普通的边连接起来的面;如果表面是C2连续的,外壳将只有一个面;如果表面不是C2连续的,将把一些面细分成所有的面都是C2连续的,结果是外壳包含所有这些面;通过一个非C2连续的表面来生成一个外壳,一般过程是:--构造一个外壳对象--实现算法--生成结果; 注意:表面分解的这些C2面并没有缝合在一起,需要使用BRepOffsetAPI_Sewing,如果想实现带厚度的外壳,需要使用BRepOffsetAPI_MakeOffsetShape类; BRepBuilderAPI_Sewing类 将多个邻近图形“缝合”成为一个图形;同时有多个边的情况下无法缝合; 一般操作过程是: --创建一个空对象; 缺省的公差是1.E-06; 面分析; 缝合操作; 根据需要作剪操作; --定义公差; --添加要缝合的对象; --计算生成; --输出结果图形; --如果需要可以输出自由边; --如果需要可以输出多个边; --输出其它问题; 主要方法: --构造函数: option1 如果为假表示只控制; option2:分析退化的图形; option3:为自由边的剪操作; option4:未复制处理; BRepBuilderAPI_Sewing(const Standard_Real tolerance = 1.0e-06,const Standard_Boolean option1 = Standard_True,const Standard_Boolean option2 = Standard_True,const Standard_Boolean option3 = Standard_True,const Standard_Boolean option4 = Standard_False); 如果必要,可以初始化参数; void Init(const Standard_Real tolerance = 1.0e-06,const Standard_Boolean option1 = Standard_True,const Standard_Boolean option2 = Standard_True,const Standard_Boolean option3 = Standard_True,const Standard_Boolean option4 = Standard_False) ; --添加一个要缝合的图形的方法是; void Add(const TopoDS_Shape& shape) ; --生成图形方法是: void Perform() ; --得到缝合后的图形方法是: TopoDS_Shape& SewedShape() const; --得到自由边(只被一个面共享的边)的数量方法是: Standard_Integer NbFreeEdges() const; --得到一个自由边的方法是: const TopoDS_Edge& FreeEdge(const Standard_Integer index) const; --得到复合边(被两个及以上面共享的边)的数量: Standard_Integer NbMultipleEdges() const; --得到其中的一个复合边: const TopoDS_Edge& MultipleEdge(const Standard_Integer index) const; --得到邻近边的数量: Standard_Integer NbContigousEdges() const; --得到其中一个邻近边: const TopoDS_Edge& ContigousEdge(const Standard_Integer index) const; --得到有一个邻近边的边的集合(截面); const TopTools_ListOfShape& ContigousEdgeCouple(const Standard_Integer index) const; --一个截面是否是有边界的(使用SectionToBoundary方法之前): Standard_Boolean IsSectionBound(const TopoDS_Edge& section) const; --得到成为截面的原始边。记住,截面是由普通边所组成的,这个信息对于控制来说是很重要的,因为通过原始边可以找到被附加的截面的表面; const TopoDS_Edge& SectionToBoundary(const TopoDS_Edge& section) const; --得到每一个退化的图形: const TopoDS_Shape& DegeneratedShape(const Standard_Integer index) const; --此图形是否是退化的图形: Standard_Boolean IsDegenerated(const TopoDS_Shape& shape) const; --此图形是否已被修改过: Standard_Boolean IsModified(const TopoDS_Shape& shape) const; --得到一个修改后的图形: const TopoDS_Shape& Modified(const TopoDS_Shape& shape) const; --子图形是否被修改过: Standard_Boolean IsModifiedSubShape(const TopoDS_Shape& shape) const; --得到一个修改过的子图形: TopoDS_Shape ModifiedSubShape(const TopoDS_Shape& shape) const; --得到每一个被删除的面: const TopoDS_Face& DeletedFace(const Standard_Integer index) const; --void Dump() const;打印相关信息; --得到一个修改后的图形: TopoDS_Face WhichFace(const TopoDS_Edge& theEdg,const Standard_Integer index = 1) const; 示例: BRepOffsetAPI_Sewing aMethod; aMethod.Add(FirstShape); aMethod.Add(SecondShape); aMethod.Perform(); TopoDS_Shape sewedShape = aMethod.SewedShape(); Handle(AIS_Shape) result = new AIS_Shape(sewedShape); BRep_Tool类 提供了处理BRep图形几何对象的一些方法; 如果S是一个Solid,Shell,或Compound.返回为真; Standard_Boolean IsClosed(const TopoDS_Shape& S) ; 返回在位置L处的几何表面: Handle_Geom_Surface& Surface(const TopoDS_Face& F,TopLoc_Location& L) ; 返回面的几何表面,如果有一个位置可以是一个拷贝; Handle_Geom_Surface Surface(const TopoDS_Face& F) ; 返回面的多边三角形,如果没有三角形返回一个空句柄: const Handle_Poly_Triangulation& Triangulation(const TopoDS_Face& F,TopLoc_Location& L) ; 返加面的公差值: Standard_Real Tolerance(const TopoDS_Face& F) ; 返回面的自然约束标志: Standard_Boolean NaturalRestriction(const TopoDS_Face& F) ; 如果E是一个3D曲线或表面上的一个曲线,返回为真; Standard_Boolean IsGeometric(const TopoDS_Edge& E) ; 返回边的3D曲线,可以是NULL,返回L位置,及参数范围; Handle_Geom_Curve& Curve(const TopoDS_Edge& E,TopLoc_Location& L,Standard_Real& First,Standard_Real& Last) ; 返回边的3D多边形,返回多边形的位置L; Handle_Poly_Polygon3D& Polygon3D(const TopoDS_Edge& E,TopLoc_Location& L) TopLoc_Location类 一个Location 是一个复合的平移;对象类型是TopLoc_Datum3D; 常见方法: --TopLoc_Location(); 构造一个空的局部坐标系统对象;注意,这种被构造的缺省的数据为空;、 --TopLoc_Location(const gp_Trsf& T); 通过T构造一个局部坐标系统; --TopLoc_Location(const Handle(TopLoc_Datum3D)& D); 通过3D datum D来构造一个局部坐标系统,如果平移T不能表达一个局部坐标系统,会引发构造异常; --Standard_Boolean IsIdentity() const;如果此位置等于一个单位化平移,返回为真; -- void Identity() ;设置位置为单位化平移; --Handle_TopLoc_Datum3D& FirstDatum() 得到位置的第一个基础数据; -- const TopLoc_Location& NextLocation() const; 另外,具有加减乘除,是否相等方法; 示例: 炸开一个立方体的六个面: for (TopExp_Explorer exp (aBox,TopAbs_FACE);exp.More();exp.Next()) { TopoDS_Face aCurrentFace = TopoDS::Face(exp.Current()); //测试当前面的方向 TopAbs_Orientation orient = aCurrentFace.Orientation(); //重新生成几何平面 TopLoc_Location location; Handle (Geom_Surface) aGeometricSurface = BRep_Tool::Surface(aCurrentFace,location); Handle (Geom_Plane) aPlane = Handle (Geom_Plane)::DownCast(aGeometricSurface); //Build an AIS_Shape with a new color //创建一个新的AIS_Shape Handle(AIS_Shape) theMovingFace = new AIS_Shape(aCurrentFace); Quantity_NameOfColor aCurrentColor = (Quantity_NameOfColor)j; myAISContext->SetColor(theMovingFace,aCurrentColor,Standard_False); myAISContext->SetMaterial(theMovingFace,Graphic3d_NOM_PLASTIC,Standard_False); //查找每个面的法向量 gp_Pln agpPlane = aPlane->Pln(); gp_Ax1 norm = agpPlane.Axis(); gp_Dir dir = norm.Direction(); gp_Vec move(dir); TopLoc_Location aLocation; Handle (AIS_ConnectedInteractive) theTransformedDisplay = new AIS_ConnectedInteractive(); theTransformedDisplay->Connect(theMovingFace, aLocation); // = myAISContext->Location(theMovingFace); Handle (Geom_Transformation) theMove = new Geom_Transformation(aLocation.Transformation()); for (Standard_Integer i=1;i<=30;i++) { theMove->SetTranslation(move*i); if (orient==TopAbs_FORWARD) myAISContext->SetLocation(theTransformedDisplay,TopLoc_Location(theMove->Trsf())); else myAISContext->SetLocation(theTransformedDisplay,TopLoc_Location(theMove->Inverted()->Trsf())); myAISContext->Redisplay(theTransformedDisplay,Standard_False); } j+=15; } BRepAlgo类 BRepAlgo提供了一些布尔操作的服务; 注意,在BrepAlgoAPI包中提供了新的布尔操作,代替了旧的布尔操作; 方法: --static Standard_Boolean IsValid(const TopoDS_Shape& S) ;检测图形是否合法; --Standard_EXPORT static Standard_Boolean IsValid(const TopTools_ListOfShape& theArgs,const TopoDS_Shape& theResult,const Standard_Boolean closedSolid = Standard_False,const Standard_Boolean GeomCtrl = Standard_True) ; 检查在结果图形中所生成和修改后的面是否合法,参数theArgs可以为空,表示所有的面都被检查;如果closedSolid 为真,表示只有封闭的图形合法,如果参数GeomCtrl为假,几何体的顶点和边不检查,自相交的新的wire也不检查; --Standard_Boolean IsTopologicallyValid(const TopoDS_Shape& S) ; 也是检查图形是否合法,和前一个不同的是,检查 no geometric contols (intersection of wires, pcurve validity) are performed. GProp_GProps类 计算图元的属性; gp_Trsf类 定义一个矩阵变换的类 --可以定义平移、旋转、缩放的矩阵; --可以对称于一个点,一条线,一个平面; 示例一: 对称于一个点: gp_Trsf theTransformation; gp_Pnt PntCenterOfTheTransformation(110,60,60); theTransformation.SetMirror(PntCenterOfTheTransformation); 示例二: 绕一个轴旋转: gp_Trsf theTransformation; gp_Ax1 axe = gp_Ax1(gp_Pnt(200,60,60),gp_Dir(0.,1.,0.)); theTransformation.SetRotation(axe,30*PI/180); 示例三: 缩放: gp_Trsf theTransformation; gp_Pnt theCenterOfScale(200,60,60); theTransformation.SetScale(theCenterOfScale,0.5); 示例四: 平移: gp_Trsf theTransformation; gp_Vec theVectorOfTranslation(-6,-6,6); theTransformation.SetTranslation(theVectorOfTranslation); 示例五: Displacement: TopoDS_Shape S = BRepPrimAPI_MakeWedge(60.,100.,80.,20.); gp_Trsf theTransformation; gp_Ax3 ax3_1(gp_Pnt(0,0,0),gp_Dir(0,0,1)); gp_Ax3 ax3_2(gp_Pnt(60,60,60),gp_Dir(1,1,1)); theTransformation.SetDisplacement(ax3_1,ax3_2); BRepBuilderAPI_Transform myBRepTransformation(S,theTransformation); TopoDS_Shape TransformedShape = myBRepTransformation.Shape(); 示例六: 变形 gp_GTrsf theTransformation; gp_Mat rot(1, 0, 0, 0, 0.5, 0, 0, 0, 1.5); theTransformation.SetVectorialPart(rot); theTransformation.SetTranslationPart(gp_XYZ(5,5,5)); BRepBuilderAPI_GTransform myBRepTransformation(S,theTransformation); TopoDS_Shape S2 = myBRepTransformation.Shape(); BuilderAPI_MakeEdge类 定义一生成一个边;此类有多个构造函数,现举其中一个介绍如下: Standard_EXPORT BRepBuilderAPI_MakeEdge(const Handle(Geom2d_Curve)& L,const Handle(Geom_Surface)& S,const TopoDS_Vertex& V1,const TopoDS_Vertex& V2,const Standard_Real p1,const Standard_Real p2); 其参数含义是: 顶点V1和V2用来限制曲线(定义边的约束),值p1和p2为顶点的参数; 曲线可以定义成在一个表面的2D曲线,应用缺省的公差; 参数规则: 对于曲线来说: --句柄不能为空; --如果曲线是一个trimmed曲线,使用基础曲线; 对于顶点来说: --可以为空,表示此参数为无限大;静态方法 Precision::Infinite()用来定义一个无限大的数; --两个顶点如果位于同一位置,必须一样,当曲线是封闭时使用相同的顶点; 对于参数来说: --参数为必须在曲线参数范围内,如果曲线是trimmed,使用基础曲线;如果边的条件不满足,返回BRepAPI_ParameterOutOfRange错误; --参数值不能相等,如果条件不满足,边无法创建,返回BRepAPI_LineThroughIdenticPoints错误; --参数值可以这样给出C->FirstParameter() --如果参数值需要切换,比如第一个顶点的参数为P2,第二个顶点的参数为P1,边的方向可以“reversed”; --对于一个周期曲线,值P1和P2可以通过加或减周期来得到; --参数值可以无限大,在对应的方向上边是开放的。然而,对应的顶点必须是空图形,如果条件不满足,边无法创建,返回BRepAPI_PointWithInfiniteParameter错误; --参数值可以被忽略,将通过曲线上的投影进行计算; --可以给定空间三维点; BRepFeat_MakePipe类 基类为:BRepFeat_Form; 通过基本图形生成一个Pipe; BRepFeat_MakeLinearForm 类 基类为:BRepFeat_RibSlot 在一个平面表面上建一个肋或开凹槽; BRepFeat_Gluer类 粘合两个实体为一个实体; 示例: (1):创建两个BOX,并找到要粘合的面; (2):创建要粘合的对象: BRepFeat_Gluer glue2(S4,S3); (3):用两个面粘合对象; glue2.Bind(F4,F3); (4):重新生成对象: LocOpe_FindEdges CommonEdges(F4,F3); for (CommonEdges.InitIterator(); CommonEdges.More(); CommonEdges.Next()) glue2.Bind(CommonEdges.EdgeFrom(),CommonEdges.EdgeTo()); TopoDS_Shape res2 = glue2.Shape(); myAISContext->Erase(ais3,Standard_False,Standard_False); ais4->Set(res2); myAISContext->Redisplay(ais4,Standard_False); Graphic2d_Polyline类 创建一个多边形. 常见方法: --Length()得到线的点数; --void Values(const Standard_Integer aRank,Quantity_Length& X,Quantity_Length& Y) const;得到序号为aRank的点; --void DrawElement(const Handle(Graphic2d_Drawer)& aDrawer,const Standard_Integer anIndex) ;绘制多边形的一条边; --void DrawVertex(const Handle(Graphic2d_Drawer)& aDrawer,const Standard_Integer anIndex) ;绘制多边形的一个顶点; --Standard_Boolean Pick(const Standard_ShortReal X,const Standard_ShortReal Y,const Standard_ShortReal aPrecision,const Handle(Graphic2d_Drawer)& aDrawer) ;得到此多边形是否被拾取,注意:PickIndex()方法得到的是最后拾取的点,如果拾取点在线的内部,返回0; Graphic2d_Line类 是Polyline, Circle ... 等图元的基类; 常见方法: --SetWidthIndex(const Standard_Integer anIndex) ;得到在width map中的宽度的索引;设定对应的线宽值; --SetTypeIndex(const Standard_Integer anIndex) ;设置线型; --SetInteriorColorIndex(const Standard_Integer anIndex) ;设置颜色; --void SetDrawEdge(const Standard_Boolean aDraw) ;设置边是否绘出,注意,这种情况下,polygon的类型必须为: Graphic2d_TOPF_FILLED 或者 Graphic2d_TOPF_PATTERNED; --SetInteriorPattern(const Standard_Integer anIndex) ;定义封闭线的内部图案,polygon的填充类型必须是:Graphic2d_TOPF_PATTERNED; --SetTypeOfPolygonFilling(const Graphic2d_TypeOfPolygonFilling aType) ;定义封闭线的图案,TypeOfPolygonFilling可选类型有: - Graphic2d_TOPF_EMPTY - Graphic2d_TOPF_FILLED - Graphic2d_TOPF_PATTERNED ; --Standard_Integer InteriorColorIndex() const;得到颜色索引; --Standard_Integer InteriorPattern() const;得到所使用的图案索引; --Graphic2d_TypeOfPolygonFilling TypeOfPolygonFilling() const;得到多边形填充模式; Graphic2d_Primitive类 是Graphic2d_Line类的基类, 常见方法: --得到及获取颜色索引; --得到图元元素的数量和顶点的数量: Standard_Integer NumOfElemIndices() const; Standard_Integer NumOfVertIndices() const; --Standard_Integer PickedIndex() const;得到最后拾取的图元元素的索引值; --void Highlight(const Standard_Integer anIndex = 0) ;高亮显示图元或图元的一部分,当anIndex=0表示所有的图元高亮显示,>0为当所要求的图元元素高亮显示时,<0为所要求的顶点高亮显示时; --void Unhighlight() ;禁止图元高亮显示; -- Standard_Boolean IsHighlighted() const;图元是否高亮显示; --Handle_TColStd_HSequenceOfInteger HighlightIndices() const;得到图元高亮显示的索引序列; --void SetDisplayMode(const Standard_Integer aMode) ;设置图元显示的模式; --Standard_Integer DisplayMode() const;得到图元显示的模式; --Standard_Boolean Graphic2d_GraphicObject::Pick(const Standard_Real X,const Standard_Real Y,const Standard_Real aPrecision,const Handle(Graphic2d_Drawer)& aDrawer) ; 用一个矩形框拾取图形对象,如果图形对象被拾取,返回为真,通过方法Graphic2d_View::Pick调用; --Standard_Boolean Graphic2d_GraphicObject::PickByCircle(const Standard_Real X,const Standard_Real Y,const Standard_Real Radius,const Handle(Graphic2d_Drawer)& aDrawer) ; 用一个园来拾取图形对象,如果图形对象被拾取,返回为真,通过方法Graphic2d_View::PickByCircle调用; --Standard_Boolean Graphic2d_GraphicObject::Pick(const Standard_Real Xmin,const Standard_Real Ymin,const Standard_Real Xmax,const Standard_Real Ymax,const Handle(Graphic2d_Drawer)& aDrawer,const Graphic2d_PickMode aPickMode) ; 以下情况下返回值为真: 包括在矩形内:included in rectangle (), 不在矩形内:excluded from rectangle (), 相交于矩形框:intersected by rectangle (), 通过 Xmin, Ymin, Xmax, Ymax定义矩形框。 --得到所有在图元内的markers的最小最大值,注意,如果me为空,或未显示,或没有markers返回为假, Minx = Miny = RealFirst () ;Maxx = Maxy = RealLast () Standard_EXPORT Standard_Boolean Graphic2d_GraphicObject::MarkerMinMax(Quantity_Length& Minx,Quantity_Length& Maxx,Quantity_Length& Miny,Quantity_Length& Maxy) const; --移除图元;Standard_EXPORT void Graphic2d_GraphicObject::RemovePrimitive(const Handle(Graphic2d_Primitive)& aPrimitive) ; --绘制图元,以默认的图元属性绘制;void Graphic2d_TransientManager::Draw(const Handle(Graphic2d_Primitive)& aPrimitive) ; AIS2D_InteractiveObject类 使用显示和选择服务,来可视化和选择机制,交互式对象常用来显示数据,曲线,图形,markers,尺寸标注等。 常用方法: --获取及设置属性 Handle_Prs2d_Drawer Attributes() const; void SetAttributes(const Handle(Prs2d_Drawer)& aDrawer) ; --通过Aspect设置属性,到所有图元分配这个Aspect. Standard_EXPORT void SetAspect(const Handle(Prs2d_AspectRoot)& anAspect) ; --通过Aspect设置属性,到所有通过InteractiveContext被链接的图元对象; Standard_EXPORT void SetAspect(const Handle(Prs2d_AspectRoot)& anAspect,const Handle(Graphic2d_Primitive)& aPrimitive) ; --得到图元的Aspect; Standard_EXPORT Handle_Prs2d_AspectRoot GetAspect(const Handle(Graphic2d_Primitive)& aPrimitive) const; --如果图元用一个aspect链接的话返回为真; Standard_EXPORT Standard_Boolean HasAspect(const Handle(Graphic2d_Primitive)& aPrimitive) const; --指出交互对象是否有一个交互上下文设备; Standard_EXPORT Standard_Boolean HasInteractiveContext() const; --得到交互对象的上下文设备; Standard_EXPORT Handle_AIS2D_InteractiveContext GetContext() const; Graphic2d_GraphicObject类 是AIS2D_InteractiveObject类的基类;在一个view内创建一个图形对象,一个图形对象管理一系列图元;默认值为:空,可输出,可绘制,可拾取,不显示,不高亮,优先权为0; 主要方法: 设置视图,设置一个变形,设置获取图层,设置获取优先权,禁用/使用输出,是否可输出,禁用/使用Draw.是否可显示,Erase,高亮显示,颜色,拾取等; Graphic2d_ImageFile类 定义一个图像,以图像的中心位置作为插入点,X,Y定义在模型空间的位置,adx,ady 定义在设备空间的偏移量.ascale定义一个缩放系数; Aspect_WidthMap类 定义一个WidthMap集合对象; 主要方法有, --添加一个入口: Standard_Integer AddEntry(const Aspect_WidthOfLine aStyle) ; void AddEntry(const Aspect_WidthMapEntry& AnEntry) ; Standard_Integer AddEntry(const Quantity_Length aStyle) ; --根据索引得到一个入口: Aspect_WidthMapEntry Entry(const Standard_Integer AnIndex) const; 示例: --定义private : Handle(Aspect_WidthMap) myWidthMap; --遍历: for(int i =1;i<=myWidthMap->Size();i++) { Aspect_WidthMapEntry aWidthMapEntry = myWidthMap->Entry(i); } --得到一个入口: Aspect_WidthMapEntry aWidthMapEntry = myWidthMap->Entry(CurrentSelectionIndex); Aspect_TypeMap类 定义一个线型集合对象: Aspect_MarkMap类 定义一个MarkMap集合对象; Aspect_FontMap类 定义一个字体集合对象; Aspect_ColorMap类 定义一个颜色集合对象; GGraphic2d_SetOfCurves类 基类是:Graphic2d_Line; 定义一图元为由多个curves 的集合;主要方法有添加一个curves, 得到curves的数量,得到其中一个curves等;只绘制其中一个元素,是否为拾取状态; 示例: Handle(Prs2d_AspectLine) aLineAspect = new Prs2d_AspectLine; aLineAspect->SetTypeOfFill(Graphic2d_TOPF_EMPTY); aLineAspect->SetTypeIndex(...); aLineAspect->SetColorIndex(...); aLineAspect->SetWidthIndex(...); Handle(Graphic2d_SetOfCurves) segment; segment = new Graphic2d_SetOfCurves(this); segment->Add(myGeom2dCurve); 将此曲线集合应用所定义的线型线宽等; SetAspect(aLineAspect, segment); 创建交互式对象相关的类介绍 AIS_Line 此类的继承关系是: Standard_Transient->MMgt_TShared->PrsMgr_PresentableObject-->SelectMgr_SelectableObject-->AIS_InteractiveObject->AIS_Line Standard_Transient:抽象类,主要定义分配空间,得到类型,引用计数等; MMgt_TShared:抽象类,主要用来管理对象的内存; PrsMgr_PresentableObject类:表示一个可表达的二维或三维图形对象;主要方法有设置位置,更新,图形类型等; 此类的派生类类型有: -AIS_InteractiveObject -AIS_ConnectedInteractive -AIS_MultipleConnectedInteractive -AIS_Shape SelectMgr_SelectableObject类:表示一个可选择的对象; AIS_Line,AIS_Circle等类 定义一个直线,园等;主要方法有,返回对象的类型,设置线宽,线型,颜色等; 示例: GC_MakeCircle C(gp_Pnt(-100.,-300.,0.),gp_Pnt(-50.,-200.,0.),gp_Pnt(-10.,-250.,0.)); Handle(AIS_Circle) anAISCirc = new AIS_Circle(C.Value()); myAISContext->Display(anAISCirc); AIS_InteractiveContext类 交互式设备类,可以用它来管理交互式图形对象,可以在一个或多个视图中。如果图形对象已经装入交互式设备,可以直接调用交互式对象的方法。 使用设备时必须区分两种状态: -没有打开本地设备。也称为不确定点; -打开了一个或多个设备; 有的方法可以使用在打开的设备中,有的方法用在关闭的设备中,有的方法与设备状态无关; --当想工作在一个入口类型上,应设置选项UseDisplayedObjects为假,可显示对象可以重新可视化交互对象; --当使用缺省的选项来打开一个设备时,注意: :可视化的交互对象在缺省选择模式下是活动的,必须分离那些不想使用的对象; :交互式对象可以自动分解为子图形; :“临时的”交互对象不会自动计入总数,,如果想使用它,必须手动装载它; 使用过程是: --用正确的选项打开设备; --装载/显示对象; --如果需要,激活标准模式; --创建一个过滤器,添加到设备中; --查找/选择/重置所需的入口; --根据索引关闭设备; --创建一个交互设备编辑器很有用,可以设置不同的设备用不用的选择/表达方式; 常见方法: --如果没有设备打开,交互对象没有显示模式,缺省的显示模式是0,如果一个设备是打开的并且更新为假,对象不会更新显示。 void Display(const Handle(AIS_InteractiveObject)& anIobj,const Standard_Integer amode,const Standard_Integer aSelectionMode,const Standard_Boolean updateviewer = Standard_True,const Standard_Boolean allowdecomposition = Standard_True) ; --使用给定的选择模式载入一个交互对象: void Load(const Handle(AIS_InteractiveObject)& aniobj,const Standard_Integer SelectionMode = -1,const Standard_Boolean AllowDecomp = Standard_False) ; --擦除一个对象:如果putinCollector为假,对象被擦除但不放入集合中; void Erase(const Handle(AIS_InteractiveObject)& aniobj,const Standard_Boolean updateviewer = Standard_True,const Standard_Boolean PutInCollector = Standard_True) ; --擦除视图集合中的每个对象; void EraseAll(const Standard_Boolean PutInCollector = Standard_True,const Standard_Boolean updateviewer = Standard_True) ; --从集合中显示所有对象; void DisplayAll(const Standard_Boolean OnlyFromCollector = Standard_True,const Standard_Boolean updateviewer = Standard_True) ; --从集合中显示一个对象; void DisplayFromCollector(const Handle(AIS_InteractiveObject)& anIObj,const Standard_Boolean updateviewer = Standard_True) --擦除选择的对象; void EraseSelected(const Standard_Boolean PutInCollector = Standard_True,const Standard_Boolean updateviewer = Standard_True) ; --改变临时对象的状态, Standard_Boolean KeepTemporary(const Handle(AIS_InteractiveObject)& anIObj,const Standard_Integer InWhichLocal = -1) ; --从所有的视图中移除交互对象; void Clear(const Handle(AIS_InteractiveObject)& aniobj,const Standard_Boolean updateviewer = Standard_True) ; --从每个视图中移除对象; void Remove(const Handle(AIS_InteractiveObject)& aniobj,const Standard_Boolean updateviewer = Standard_True) ; --从所有打开的设备中移除所有对象; void RemoveAll(const Standard_Boolean updateviewer = Standard_True) ; --通过鼠标动态检测,感知的图元被高亮显示。缺省的鼠标移过时的颜色为白色。 void Hilight(const Handle(AIS_InteractiveObject)& aniobj,const Standard_Boolean updateviewer = Standard_True) ; --改变视图中线的颜色; void HilightWithColor(const Handle(AIS_InteractiveObject)& aniobj,const Quantity_NameOfColor aCol,const Standard_Boolean updateviewer = Standard_True) ; --从入口对象中移除高亮;更新视图; void Unhilight(const Handle(AIS_InteractiveObject)& aniobj,const Standard_Boolean updateviewer = Standard_True) ; --设置显示的优先权; void SetDisplayPriority(const Handle(AIS_InteractiveObject)& anIobj,const Standard_Integer aPriority) ; --设置所看到的交互对象的显示模式; void SetDisplayMode(const Handle(AIS_InteractiveObject)& aniobj,const Standard_Integer aMode,const Standard_Boolean updateviewer = Standard_True) ; --设置/移除交互对象的选择模式: void SetSelectionMode(const Handle(AIS_InteractiveObject)& aniobj,const Standard_Integer aMode) ; void UnsetSelectionMode(const Handle(AIS_InteractiveObject)& aniobj) ; --设置感知的精度: void SetSensitivity(const Standard_Real aPrecision) ; --定义当前选择感知的像素: void SetSensitivity(const Standard_Integer aPrecision = 4) ; --设置/重置初始图形的位置;如果有一个位置返回为真; void SetLocation(const Handle(AIS_InteractiveObject)& aniobj,const TopLoc_Location& aLocation) ; void ResetLocation(const Handle(AIS_InteractiveObject)& aniobj) ; Standard_Boolean HasLocation(const Handle(AIS_InteractiveObject)& aniobj) const; 得到实体对象的位置; const TopLoc_Location& Location(const Handle(AIS_InteractiveObject)& aniobj) const; --改变当前面的模式;缺省模式是Aspect_TOFM_TWO_SIDE。意味着属性在前面和后面都应用; void SetCurrentFacingModel(const Handle(AIS_InteractiveObject)& aniobj,const Aspect_TypeOfFacingModel aModel = Aspect_TOFM_BOTH_SIDE) ; --设置/获得三角形的尺寸,缺省值是100mm. void SetTrihedronSize(const Standard_Real aSize,const Standard_Boolean updateviewer = Standard_True) ; Standard_Real TrihedronSize() const; --设置/获取平面的尺寸: Standard_EXPORT void SetPlaneSize(const Standard_Real aSizeX,const Standard_Real aSizeY,const Standard_Boolean updateviewer = Standard_True) ; --得到实体对象的显示状态; AIS_DisplayStatus DisplayStatus(const Handle(AIS_InteractiveObject)& anIobj) const; --得到实体对象的显示模式的列表: const TColStd_ListOfInteger& DisplayedModes(const Handle(AIS_InteractiveObject)& aniobj) const; --关于绘制隐藏线相关的一些函数,通过名称就可以知道函数的意思; EnableDrawHiddenLine(); DisableDrawHiddenLine(); Standard_Boolean DrawHiddenLine(); --设置/得到UV等高参数;等高参数是否可用; Standard_Integer IsoNumber(const AIS_TypeOfIso WhichIsos = AIS_TOI_Both) ; --设置/添加/移除当前对象..... InitCurrent() ;MoreCurrent();NextCurrent(); Standard_Boolean IsCurrent(const Handle(AIS_InteractiveObject)& aniobj) const; Handle_AIS_InteractiveObject Current() const; Handle_AIS_InteractiveObject FirstCurrentObject() ; void HilightCurrents(const Standard_Boolean updateviewer = Standard_True) ; void UnhilightCurrents(const Standard_Boolean updateviewer = Standard_True) ; void ClearCurrents(const Standard_Boolean updateviewer = Standard_True) ; posted @ 2016-12-26 16:56 一花一世界,一叶一乾坤 阅读(11911) 评论(0) 编辑 收藏 举报 会员力量,点亮园子希望 刷新页面返回顶部 公告 Copyright © 2024 一花一世界,一叶一乾坤 Powered by .NET 8.0 on Kubernetes期权清算公司 (OCC) | Investor's wiki
浅谈三维建模内核Open Cascade(OCC) - 知乎
开源三维建模引擎OpenCASCADE(OCC) - 知乎
OCC简介_occ和opengl-CSDN博客
>