青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

eryar

PipeCAD - Plant Piping Design Software.
PlantAssistant - Translate AVEVA RVM/SP3D VUE to glTF, STEP, etc.
posts - 606, comments - 590, trackbacks - 0, articles - 0

OpenCascade BRep 格式描述之二

Posted on 2013-07-22 21:50 eryar 閱讀(7191) 評(píng)論(11)  編輯 收藏 引用 所屬分類(lèi): 2.OpenCASCADE

OpenCascade BRep Format Description

eryar@163.com

摘要Abstract:本文結(jié)合OpenCascade的BRep格式描述文檔和源程序,對(duì)BRep格式進(jìn)行分析,詳細(xì)說(shuō)明BRep的數(shù)據(jù)組織形式。結(jié)合源程序,可以對(duì)OpenCascade中Modeling Data模塊中的模型數(shù)據(jù)結(jié)構(gòu)進(jìn)行理解。

關(guān)鍵字Key Words:OpenCascade, BRep Format, ModelingData

 

一、實(shí)例分析

OpenCascade的data目錄中的face1.brep文件:

 

  1 DBRep_DrawableShape
  2 
  3 CASCADE Topology V1, (c) Matra-Datavision
  4 Locations 5
  5 1
  6               1               0               0            -0.4 
  7               0               1               0               0 
  8               0               0               1               0 
  9 1
 10               1               0               0            -0.4 
 11               0               1               0               0 
 12               0               0               1               0 
 13 1
 14               1               0               0             0.8 
 15               0               1               0               0 
 16               0               0               1               0 
 17 1
 18               1               0               0             0.8 
 19               0               1               0               0 
 20               0               0               1               0 
 21 2  1 1 2 1 3 1 4 1 0
 22 Curve2ds 8
 23 1 0 0.8 1 0 
 24 2 0 0 1 0 0 1 0.8
 25 1 1.82347658193698 0 0 1 
 26 1 1 -1.77459666924148 1 0 
 27 1 4.45970872524261 0 0 1 
 28 1 1 -0.225403330758516 1 0 
 29 1 0 0 1 0 
 30 2 0 0 1 0 0 1 0.8
 31 Curves 4
 32 2 0 0 0.8 0 0 1 1 0 0 0 1 0 0.8
 33 1 -0.2 0.774596669241484 0 0 0 1 
 34 1 -0.2 -0.774596669241484 0 0 0 1 
 35 2 0 0 0 0 0 1 1 0 0 0 1 0 0.8
 36 Polygon3D 0
 37 PolygonOnTriangulations 0
 38 Surfaces 4
 39 2 0 0 0 0 0 1 1 0 0 0 1 0 0.8
 40 1 0 0 0.8 0 0 1 1 0 0 0 1 0 
 41 1 -1 -1 -1 1 0 0 0 0 1 0 -1 0 
 42 1 0 0 0 0 0 1 1 0 0 0 1 0 
 43 Triangulations 0
 44 
 45 TShapes 10
 46 Ve
 47 2.0000002e-007
 48 -0.2 0.774596669241483 0.8
 49 0 0
 50 
 51 0101101
 52 *
 53 Ve
 54 2.0000002e-007
 55 -0.2 -0.774596669241484 0.8
 56 0 0
 57 
 58 0101101
 59 *
 60 Ed
 61  1e-007 1 1 0
 62 1  1 0 1.82347658193698 4.45970872524261
 63 2  1 1 0 1.82347658193698 4.45970872524261
 64 2  2 2 0 1.82347658193698 4.45970872524261
 65 0
 66 
 67 0101000
 68 +10 0 -9 0 *
 69 Ve
 70 2.0000002e-007
 71 -0.2 0.774596669241483 0
 72 0 0
 73 
 74 0101101
 75 *
 76 Ed
 77  1e-008 1 1 0
 78 1  2 0 0 0.8
 79 2  3 1 0 0 0.8
 80 2  4 3 5 0 0.8
 81 0
 82 
 83 0101000
 84 +7 0 -10 0 *
 85 Ve
 86 2.0000002e-007
 87 -0.2 -0.774596669241484 0
 88 0 0
 89 
 90 0101101
 91 *
 92 Ed
 93  1e-008 1 1 0
 94 1  3 0 0 0.8
 95 2  5 1 0 0 0.8
 96 2  6 3 5 0 0.8
 97 0
 98 
 99 0101000
100 +5 0 -9 0 *
101 Ed
102  1e-007 1 1 0
103 1  4 0 1.82347658193698 4.45970872524261
104 2  7 1 0 1.82347658193698 4.45970872524261
105 2  8 4 0 1.82347658193698 4.45970872524261
106 0
107 
108 0101000
109 +7 0 -5 0 *
110 Wi
111 
112 0101100
113 -8 0 -6 0 +4 0 +3 0 *
114 Fa
115 0  1e-007 1 0
116 
117 0101000
118 +2 0 *
119 
120 +1 0 
121 0
122 
123 


顯示結(jié)果如下圖所示:

wps_clip_image-13242

Figure 1. Wireframe mode

wps_clip_image-31210

Figure 2. Shaded mode

二、結(jié)論

因?yàn)镺penCascade的Brep格式是自己的格式,只用到了ModelingData模塊,不使用DataExchange模塊,可以作為數(shù)據(jù)交換的一種格式。

三、參考資料

1. BNF范式:http://hi.baidu.com/xuyingming2012/item/9060029141427bd81b49df9e

2. BRep Format Description

3. OpenCascade source code

 

 

 

Feedback

# re: OpenCascade BRep 格式描述之二  回復(fù)  更多評(píng)論   

2014-10-26 22:44 by 佚名
博主您好!
讀您的博客受益非淺,我有個(gè)問(wèn)題想請(qǐng)教,通過(guò)頂點(diǎn)vertex生成face,然后explorer face里面的vertex,發(fā)現(xiàn)face里的頂點(diǎn)與原來(lái)的頂點(diǎn)不相同,就是用issame也找不出相同的頂點(diǎn),不知道什么原因,后來(lái)輸出頂點(diǎn)坐標(biāo)發(fā)現(xiàn)坐標(biāo)值有誤差,是不是因?yàn)榫鹊脑颍恐x謝!

# re: OpenCascade BRep 格式描述之二  回復(fù)  更多評(píng)論   

2014-10-27 17:56 by eryar
@佚名
您好!

不知道你用的哪個(gè)類(lèi)的函數(shù) issame()?

可以貼出相關(guān)代碼看看

# re: OpenCascade BRep 格式描述之二  回復(fù)  更多評(píng)論   

2014-10-28 12:01 by 佚名
TopoDS_Face WhiteFace, BrownFace, RedFace, PinkFace;
TopoDS_Edge Edge1, Edge2, Edge3, Edge4, Edge5, Edge6, Edge7;
TopoDS_Wire Wire1;
gp_Pnt P1, P2, P3, P4, P5, P6, P7;

gp_Sphere sphere (gp_Ax3(gp_Pnt(0,0,0),gp_Dir(1,0,0)),150);

WhiteFace = BRepBuilderAPI_MakeFace(sphere,0.1,0.7,0.2,0.9);

//////////////////////////////////

P1.SetCoord(-15,200,10);
P2.SetCoord(5,204,0);
P3.SetCoord(15,200,0);
P4.SetCoord(-15,20,15);
P5.SetCoord(-5,20,0);
P6.SetCoord(15,20,35);
TColgp_Array2OfPnt array(1,3,1,2);
array.SetValue(1,1,P1);
array.SetValue(2,1,P2);
array.SetValue(3,1,P3);
array.SetValue(1,2,P4);
array.SetValue(2,2,P5);
array.SetValue(3,2,P6);
Handle (Geom_BSplineSurface) curve = GeomAPI_PointsToBSplineSurface(array,3,8,GeomAbs_C2,0.001);

RedFace = BRepBuilderAPI_MakeFace(curve);

////////////////////

gp_Circ circle(gp_Ax2(gp_Pnt(0,0,0),gp_Dir(1,0,0)),80);
Edge1 = BRepBuilderAPI_MakeEdge(circle,0,PI);

Edge2 = BRepBuilderAPI_MakeEdge(gp_Pnt(0,0,-80),gp_Pnt(0,-10,40));
Edge3 = BRepBuilderAPI_MakeEdge(gp_Pnt(0,-10,40),gp_Pnt(0,0,80));

TopoDS_Wire YellowWire;
BRepBuilderAPI_MakeWire MW1(Edge1,Edge2,Edge3);
if (MW1.IsDone()) {
YellowWire = MW1;
}

BrownFace = BRepBuilderAPI_MakeFace(YellowWire);


/////////////

P1.SetCoord(35,-200,40);
P2.SetCoord(50,-204,30);
P3.SetCoord(65,-200,30);
P4.SetCoord(35,-20,45);
P5.SetCoord(45,-20,30);
P6.SetCoord(65,-20,65);
TColgp_Array2OfPnt array2(1,3,1,2);
array2.SetValue(1,1,P1);
array2.SetValue(2,1,P2);
array2.SetValue(3,1,P3);
array2.SetValue(1,2,P4);
array2.SetValue(2,2,P5);
array2.SetValue(3,2,P6);

Handle (Geom_BSplineSurface) BSplineSurf = GeomAPI_PointsToBSplineSurface(array2,3,8,GeomAbs_C2,0.001);

TopoDS_Face aFace = BRepBuilderAPI_MakeFace(BSplineSurf);

//2d lines
gp_Pnt2d P12d(0.9,0.1);
gp_Pnt2d P22d(0.2,0.7);
gp_Pnt2d P32d(0.02,0.1);

Handle (Geom2d_Line) line1 = new Geom2d_Line(P12d,gp_Dir2d((0.2-0.9),(0.7-0.1)));
Handle (Geom2d_Line) line2 = new Geom2d_Line(P22d,gp_Dir2d((0.02-0.2),(0.1-0.7)));
Handle (Geom2d_Line) line3 = new Geom2d_Line(P32d,gp_Dir2d((0.9-0.02),(0.1-0.1)));


//Edges are on the BSpline surface
Edge1 = BRepBuilderAPI_MakeEdge(line1,BSplineSurf,0,P12d.Distance(P22d));
Edge2 = BRepBuilderAPI_MakeEdge(line2,BSplineSurf,0,P22d.Distance(P32d));
Edge3 = BRepBuilderAPI_MakeEdge(line3,BSplineSurf,0,P32d.Distance(P12d));
Wire1 = BRepBuilderAPI_MakeWire(Edge1,Edge2,Edge3);
Wire1.Reverse();
PinkFace = BRepBuilderAPI_MakeFace(aFace,Wire1);
TopExp_Explorer ex;
TopoDS_Shape s;
for(ex.Init(PinkFace,TopAbs_EDGE);ex.More(); ex.Next())
{
s=ex.Current();
Edge4=TopoDS::Edge(s);
if(Edge4.IsEqual(Edge2))
Edge3=Edge3;

}
這是在mfc例2中的部分代碼,for循環(huán)式我加的,問(wèn)題是PinkFace 明明由edge1、2、3 生成,為什么explorer PinkFace 中的edge就找不到與edge2相同的邊呢??jī)H能找到與edge1相同的邊,這種不確定的結(jié)果讓人無(wú)法捉摸。
另外博主有沒(méi)有好辦法,在不改occ庫(kù)代碼的情況下,給每個(gè)topods_shape一個(gè)全局唯一標(biāo)識(shí)號(hào)或標(biāo)識(shí)名稱。我試用hashcode,但不知如何正確設(shè)置它的上限,似乎它有可能重復(fù),不能當(dāng)作唯一標(biāo)識(shí)符。

# re: OpenCascade BRep 格式描述之二  回復(fù)  更多評(píng)論   

2014-10-28 18:16 by eryar
@佚名
inline Standard_Boolean TopoDS_Shape::IsEqual (const TopoDS_Shape& other) const
{
return (myTShape == other.myTShape) &&
(myLocation == other.myLocation) &&
(myOrient == other.myOrient);
}
函數(shù)IsEqual()的作用是:
Returns True if two shapes are partners, i.e. if they share the same TShape. Locations and Orientations may differ.
根據(jù)上面的代碼可知只是判斷是不是共享了相同的TShape,如果朝向Orientation不同,返回值也是不同的。看你前面將wire1.Reverse(),可能朝向會(huì)不同。
==================================
TopoDS_Shape的HashCode產(chǎn)生函數(shù)代碼如下:
Standard_Integer TopoDS_Shape::HashCode(const Standard_Integer Upper) const
{
//PKV
const Standard_Integer aI = (Standard_Integer) ptrdiff_t(myTShape.operator->());
const Standard_Integer aHS = ::HashCode(aI,Upper);
const Standard_Integer aHL = myLocation.HashCode(Upper);
return (aHS^aHL)%Upper;
}
應(yīng)該取個(gè)大一點(diǎn)的Upper。

也可參考Singleton模式,使用一個(gè)static的std::map<std::string, TopoDS_Shape>自己來(lái)根據(jù)名字映射TopoDS_Shape,這就像Draw Test Harness中一樣了。

# re: OpenCascade BRep 格式描述之二  回復(fù)  更多評(píng)論   

2014-10-29 10:17 by 佚名
謝謝博主!
我試過(guò)了,即使不reverse,用issame也找不到與原來(lái)對(duì)應(yīng)的邊,我原以為頂點(diǎn)、邊、面、體自底而上構(gòu)建模型會(huì)逐級(jí)引用,這樣便于建立共享邊界的圖元,現(xiàn)在看來(lái)這一規(guī)則不成立,也許它僅在一個(gè)shape內(nèi)成立。
我現(xiàn)在使用的是static的std::map<std::int, TopoDS_Shape>的問(wèn)題,似乎它也不能解決反向檢索的問(wèn)題,比如你可以指定繪制一個(gè)編號(hào)為1的shape,但反過(guò)來(lái),你在繪圖區(qū)感知到了一個(gè)shape,不能確定它的編號(hào)是1還是其它。以前采用給topods_shape增加公共成員變量的方法來(lái)識(shí)別。后來(lái)為了避免修改occ庫(kù)保持原庫(kù)的完整性放棄了。

# re: OpenCascade BRep 格式描述之二  回復(fù)  更多評(píng)論   

2014-10-29 10:26 by 佚名
補(bǔ)充一點(diǎn),如果保存成Handle(TopoDS_Shape)采用正向檢索也能解決問(wèn)題,但該方法有局限性,效率太低,當(dāng)圖元上萬(wàn)甚至更多時(shí)及近癱瘓。

# re: OpenCascade BRep 格式描述之二  回復(fù)  更多評(píng)論   

2014-10-29 14:11 by eryar
@佚名
在繪圖區(qū)感知到了一個(gè)shape,直接對(duì)其操作即可,為什么又要得到其ID?

如果一定要這個(gè)ID,可以通過(guò)SetOwner()將ID設(shè)置到AIS_InteractiveObject中去,這樣在感知到shape時(shí)可以取出ID了。

# re: OpenCascade BRep 格式描述之二  回復(fù)  更多評(píng)論   

2014-11-10 09:59 by 佚名
id是CAE建模的需要,這點(diǎn)和CAD不同,比如有幾千個(gè)點(diǎn),要在某兩點(diǎn)之間連線,用id指定點(diǎn),再如選擇其中的幾百個(gè)點(diǎn)連成spline,沒(méi)有編號(hào)操作難度大。謝謝您提的建議,我研究研究setowner。

# re: OpenCascade BRep 格式描述之二  回復(fù)  更多評(píng)論   

2014-11-10 22:47 by eryar
@佚名
哦。

那可以看看
SetOwner (const Handle< Standard_Transient > &ApplicativeEntity);
//Allows you to attribute the owner ApplicativeEntity to
//an Interactive Object. This can be a shape for a set of
//sub-shapes or a sub-shape for sub-shapes which it
//is composed of. The owner takes the form of a transient.

SetOwner把一個(gè)指針數(shù)據(jù)放到AIS_InteractiveObject中去了,所以你也可以將ID放進(jìn)去。

# re: OpenCascade BRep 格式描述之二  回復(fù)  更多評(píng)論   

2014-11-13 17:02 by 佚名
“SetOwner把一個(gè)指針數(shù)據(jù)放到AIS_InteractiveObject中去了,所以你也可以將ID放進(jìn)去“。
本人水平有限,真沒(méi)看出看來(lái)怎么放一個(gè)ID(int數(shù))到AIS_InteractiveObject中,博主能否以示例代碼告知,比如我想給Handle(AIS_Shape) Point 賦一個(gè)ID號(hào)為整數(shù)3,該怎么做?謝謝!

# re: OpenCascade BRep 格式描述之二  回復(fù)  更多評(píng)論   

2014-11-15 18:01 by eryar
@佚名
SetOwner可以將一塊內(nèi)存設(shè)置到AIS_Shape中去,
所以你可以將ID或其他數(shù)據(jù)組織成一個(gè)結(jié)構(gòu)體或類(lèi),需要時(shí)取出轉(zhuǎn)換一下即可。
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            国产欧美二区| 亚洲精品偷拍| 亚洲人成在线观看网站高清| 国内综合精品午夜久久资源| 国内在线观看一区二区三区| 国产一区二区日韩精品| 伊人婷婷欧美激情| 亚洲日本黄色| 亚洲欧美日韩天堂一区二区| 欧美亚洲一区二区在线| 久久夜色精品国产亚洲aⅴ | 国产精品免费网站在线观看| 国产精品高清网站| 国产一区二区三区的电影| 亚洲福利视频一区二区| 在线亚洲欧美| 久久午夜精品| 一本色道久久综合亚洲二区三区| 亚洲欧美另类在线| 欧美国产视频在线观看| 欧美日韩色综合| 在线观看国产精品网站| 亚洲天堂第二页| 久久婷婷麻豆| 一区二区三区国产在线| 久久米奇亚洲| 国产精品推荐精品| 亚洲国产cao| 欧美在线首页| 亚洲最新中文字幕| 久久综合九色综合久99| 国产精品嫩草久久久久| 亚洲美女91| 免费看亚洲片| 欧美一区二区三区日韩视频| 欧美日韩一区二区视频在线| 亚洲级视频在线观看免费1级| 欧美在线在线| 亚洲影院高清在线| 欧美午夜不卡在线观看免费| 亚洲国产精品热久久| 久久人人爽爽爽人久久久| 亚洲一区二区欧美| 国产精品国产精品国产专区不蜜| 亚洲精品视频免费| 嫩模写真一区二区三区三州| 亚洲欧美第一页| 国产精品免费一区二区三区观看 | 国产亚洲精品久久久久婷婷瑜伽 | 日韩视频在线观看国产| 午夜在线精品| 亚洲美女在线视频| 欧美精品亚洲一区二区在线播放| 在线成人h网| 老司机免费视频一区二区三区| 亚洲伊人伊色伊影伊综合网| 国产精品日日摸夜夜摸av| 亚洲欧美日韩电影| 中文av字幕一区| 欧美日韩在线大尺度| 99热在线精品观看| 亚洲三级影院| 老**午夜毛片一区二区三区| 极品av少妇一区二区| 免费视频一区| 女同性一区二区三区人了人一 | 欧美色网一区二区| 一区二区欧美在线观看| 亚洲乱码国产乱码精品精天堂 | 黄色av一区| 欧美成人福利视频| 欧美黄污视频| 亚洲免费影视| 午夜视黄欧洲亚洲| 精品av久久久久电影| 欧美mv日韩mv国产网站| 欧美h视频在线| 亚洲天堂免费观看| 午夜精品视频| 91久久一区二区| 亚洲最新合集| 国产一区二区三区四区在线观看| 老牛影视一区二区三区| 免费成人黄色av| 亚洲自拍偷拍网址| 欧美在线播放一区| 91久久在线| 亚洲欧美日韩在线一区| 亚洲第一精品在线| 在线视频日韩| 激情亚洲网站| 在线亚洲一区二区| 黄色欧美日韩| 一区二区三区视频免费在线观看| 国产自产2019最新不卡| 亚洲国产天堂网精品网站| 国产精品久久久久久久久久ktv | 亚洲美女中出| 午夜精彩国产免费不卡不顿大片| 在线观看亚洲视频啊啊啊啊| 日韩午夜中文字幕| 在线电影一区| 亚洲深夜福利网站| 亚洲国产日韩美| 亚洲欧美综合国产精品一区| 亚洲乱码一区二区| 欧美在线www| 裸体女人亚洲精品一区| 亚洲欧美日韩国产另类专区| 久久―日本道色综合久久| 亚洲女爱视频在线| 欧美激情黄色片| 久久一本综合频道| 国产精品三级久久久久久电影| 亚洲国产成人精品久久久国产成人一区| 国产精品区一区二区三| 亚洲国产日韩欧美在线动漫| 国模 一区 二区 三区| 亚洲视频中文字幕| av不卡在线看| 欧美精品1区2区3区| 你懂的一区二区| 激情小说亚洲一区| 久久久精品免费视频| 久久国产精品高清| 国产精品欧美一区喷水| 一区二区冒白浆视频| 夜夜精品视频一区二区| 欧美韩日一区二区| 亚洲国产精品尤物yw在线观看 | 欧美一区二区三区喷汁尤物| 亚洲视频导航| 欧美日韩亚洲高清| 亚洲精品一区二区在线| 亚洲精品一级| 欧美精品乱码久久久久久按摩| 欧美成人精品福利| 在线欧美小视频| 噜噜噜在线观看免费视频日韩| 久久伊人一区二区| 亚洲成人影音| 欧美黄色一级视频| 亚洲欧洲午夜| 中国成人黄色视屏| 欧美日韩亚洲91| 亚洲专区在线| 久久精品水蜜桃av综合天堂| 韩国久久久久| 欧美成人日本| 99re热精品| 欧美一区二区三区免费观看| 国产日韩欧美一区二区三区四区| 久久黄色小说| 亚洲黄页视频免费观看| 亚洲少妇诱惑| 国产一区日韩欧美| 免费观看亚洲视频大全| 亚洲毛片在线看| 亚洲欧美日韩在线| 黄网站色欧美视频| 欧美成人午夜免费视在线看片| 亚洲乱码国产乱码精品精可以看| 亚洲综合不卡| 韩国精品一区二区三区| 欧美啪啪成人vr| 欧美与欧洲交xxxx免费观看| 亚洲福利专区| 亚洲欧美日韩一区在线观看| 激情欧美一区| 欧美视频在线看| 久久人人97超碰精品888| 亚洲伦理网站| 免费黄网站欧美| 亚洲精品三级| 欧美韩日精品| 久久久91精品国产| 在线亚洲精品福利网址导航| 蜜桃久久精品一区二区| 在线一区日本视频| 怡红院精品视频| 国产精品成人久久久久| 久久久久9999亚洲精品| 一本一本久久a久久精品综合妖精| 久久九九有精品国产23| 一本色道久久88综合日韩精品| 国产在线不卡| 国产精品免费网站在线观看| 欧美极品aⅴ影院| 久久亚洲国产精品一区二区| 亚洲欧美激情四射在线日 | 欧美日产在线观看| 久久久蜜臀国产一区二区| 亚洲一区二区三区在线看| 亚洲国产老妈| 媚黑女一区二区| 久久av资源网站| 亚洲自拍三区| 在线一区二区三区做爰视频网站| 亚洲日本成人在线观看| 尤物九九久久国产精品的特点|