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

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中的gp包

Posted on 2012-06-30 20:21 eryar 閱讀(4922) 評論(0)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

Package gp in the OpenCASCADE

eryar@163.com China

一、簡介 Introduction to Package gp

gp是幾何處理程序包(Geometric Processor package),簡稱gp。包gp提供以下功能:

  • 代數計算;如坐標計算、矩陣計算;
  • 基本解析幾何元素;如變換、點、矢量、線、面、軸、二次曲線和初等曲面;

這些實體同時在二維和三維空間中定義,且包中的類都是非持續的(non-persistent),即這些類的實例都是以值的方式處理而不是引用。當復制這種對象時,是對象本體。改變一個實例不會影響到其他的實例。

可用的幾何實體如下所示:

  1. 2D&3D Cartesian coordinates(x,y,z); 二維&三維笛卡爾坐標;
  2. Matrices; 矩陣;
  3. Cartesian points; 笛卡爾坐標點;
  4. Vector; 矢量;
  5. Direction; 方向;
  6. Axis; 軸;
  7. Line; 直線;
  8. Circle; 圓;
  9. Ellipse; 橢圓;
  10. Hyperbola; 雙曲線;
  11. Parabola; 拋物線;
  12. Plane; 面;
  13. Infinite cylindrical surface; 柱面;
  14. Spherical surface; 球面;
  15. Toroidal surface; 環面;
  16. Conical surface; 錐面;
二、幾何元素的集合 Collections of Primitive Geometric Types

創建幾何對象之前,根據你是將幾何對象用于二維還是三維來確定。若你需要一個幾何對象集而不是單一的幾何對象,即用來處理一類幾何元素,包TColgp就是提供這種功能的。

Package TColgp提供類如:XY, XYZ, Pnt, Pnt2d, Vec, Vec2d, Lin, Lin2D, Circ, Circ2dTCollection的實例。包中的類簡單列舉如下:

  • TColgp_Array1OfCirc;
  • TColgp_Array1OfDir;
  • TColgp_Array1OfPnt;
  • TColgp_Array1OfVec;
  • TColgp_Array2OfCirc2d;
  • TColgp_Array2OfPnt;
  • TColgp_HArray1OfCirc2d;
  • TColgp_HArray2OfDir;
  • TColgp_HSequenceOfDir;
  • TColgp_SequenceOfDir;
  • TColgp_SequenceOfPnt;
  • TColgp_SequenceOfXYZ;

個人意見,若使用標準C++的容器類(The STL Template Container),就不需要創建這么多類了。

三、基本幾何庫 Basic Geometric Libraries

有幾個庫提供了曲線和曲面的基本計算功能。若要處理由包gp創建的幾何對象,初等曲線曲面的有用算法庫在包:ElCLibElSLib中。包Precision提供兩個數字比較的功能。

  • Package ElCLib; ElCLib代表:Elementary Curves Library. 提供初等曲線曲面的基本幾何計算功能;
  • Package ElSLib; ElSLib代表:Elementary Surfaces Library. 提供初等曲面的基本幾何計算。
  • Package Bnd;提供二維和三維空間中幾何元素包圍盒的計算功能;
  • Package Precision; 由于浮點數在計算機內實際上是一個近似表示,在手工計算看來為正確的結果,在計算機中運算未必得出正確的結果。所以,我們得到一個重要的經驗:使用浮點數進行相等(==)和不等(!=)比較的操作通常是有問題的。浮點數的相等比較,一般總是使用兩者相減的值是否落在0的鄰域中來判斷。這就是鄰域比較技術。在OpenCASCADE中專門提供包Precision來處理兩個數值的比較問題。
四、代碼示例 Code Sample
//------------------------------------------------------------------------------
//    Copyright (c) 2012 eryar All Rights Reserved.
//
//        File    : Main.cpp
//        Author  : eryar@163.com
//        Date    : 2012-6-23 21:30
//        Version : 1.0v
//
//    Description : Test primitive Geometric Types in OpenCASCADE.
//
//      The Geometric Processor package, called gp.
//
//      The pg package offers classes for both 2D and 3D objects which
//      are handled by value rather than by reference. When this sort of object
//      is copied, it is copied entirely. Changes in one instance will not be 
//      reflected in another.
//
//==============================================================================
 
// Use Toolkit TKernel.
#pragma comment(lib,"TKernel.lib")
// Use Toolkit TKMath.
#pragma comment(lib, "TKMath.lib")
 
#include <gp.hxx>
#include <gp_Pnt.hxx>
#include <gp_Trsf.hxx>
#include <Precision.hxx>
 
void DumpPoint(const gp_Pnt& p);
 
int main(int argc, char* argv[])
{
    gp_Pnt  aPoint(0, 0, 0);
 
    // 1. Translate a point in a direction.
    // The direction determined by a gp_Vec or two gp_Pnt.
    cout<<"Before translated:";
    DumpPoint(aPoint);
 
    aPoint.Translate(gp_Pnt(2, 2, 3), gp_Pnt(10, 10, 0));
 
    cout<<"After translated:";
    DumpPoint(aPoint);
 
    // 2. Rotate a point.
    // Rotate a point by an axis and the rotate angle.
    cout<<"Before rotated:";
    DumpPoint(aPoint);
 
    // Roate 45 degree about Z axis.
    // Positive angle value will be rotated counterclockwise.
    aPoint.Rotate(gp::OZ(), PI/4);
    
    cout<<"After rotated 45 degree about Z axis:";
    DumpPoint(aPoint);
 
    // 2.1 Test Package Precision.
    if (aPoint.X() < Precision::Confusion() && aPoint.X() > -Precision::Confusion())
    {
        cout<<"Point X value:"<<aPoint.X()<<endl;
        cout<<"Precision::Confusion() value:"<<Precision::Confusion()<<endl;
    }
 
    aPoint.Rotate(gp::OZ(), PI/4);
    cout<<"After rotate 45 degree about Z axis:";
    DumpPoint(aPoint);
 
    // 3. Transform a point by gp_Trsf.
    gp_Trsf transform;
    transform.SetMirror(gp::OX());
 
    cout<<"Before gp_Trsf:";
    DumpPoint(aPoint);
 
    aPoint.Transform(transform);
 
    cout<<"After gp_Trsf:";
    DumpPoint(aPoint);
 
    // 4. Mirror a point.
    // 4.1 Performs the symmetrical transformation of
    // a point with respect to an axis placement which
    // is the axis of the symmetry.
    cout<<"Before mirrored with a symmetric axis:";
    DumpPoint(aPoint);
 
    aPoint.Mirror(gp::OY());
 
    cout<<"After mirrored with a symmetric axis:";
    DumpPoint(aPoint);
 
    // 4.2 Performs the symmetrical transformation of
    // a point with respect to a plane.
    cout<<"Before mirrored with a symmetric plane:";
    DumpPoint(aPoint);
 
    aPoint.Mirror(gp::XOY());
 
    cout<<"After mirrored with a symmetric plane";
    DumpPoint(aPoint);
 
    // 5. Scale a point.
    aPoint.SetCoord(1, 2, 1);
    cout<<"Before Scaled:";
    DumpPoint(aPoint);
 
    /*
    // Scale point source code...
    inline void gp_Pnt::Scale (const gp_Pnt& P,
    const Standard_Real S)
    {
    gp_XYZ XYZ = P.coord;
    XYZ.Multiply (1.0 - S);
    coord.Multiply (S);
    coord.Add      (XYZ);
    }
    */
 
    aPoint.Scale(gp_Pnt(1, 2, 2), 2);
 
    cout<<"After Scaled:";
    DumpPoint(aPoint);
 
    return 0;
}
 
/**
* Description: Dump point information.
*/
void DumpPoint( const gp_Pnt& p )
{
    cout<<"("<<p.X()<<","<<p.Y()<<","<<p.Z()<<")"<<endl;
}

輸出結果如下:

   1:  Before translated:(0,0,0)
   2:  After translated:(8,8,-3)
   3:  Before rotated:(8,8,-3)
   4:  After rotated 45 degree about Z axis:(8.88178e-016,11.3137,-3)
   5:  Point X value:8.88178e-016
   6:  Precision::Confusion() value:1e-007
   7:  After rotate 45 degree about Z axis:(-8,8,-3)
   8:  Before gp_Trsf:(-8,8,-3)
   9:  After gp_Trsf:(-8,-8,3)
  10:  Before mirrored with a symmetric axis:(-8,-8,3)
  11:  After mirrored with a symmetric axis:(8,-8,-3)
  12:  Before mirrored with a symmetric plane:(8,-8,-3)
  13:  After mirrored with a symmetric plane(8,-8,3)
  14:  Before Scaled:(1,2,1)
  15:  After Scaled:(1,2,0)
  16:  Press any key to continue . . .

 

五、結論

gp提供了基本的幾何元素表示及初等解析幾何計算功能。對于幾何元素的集合也有自己的類庫。對于兩個數值的比較采用了鄰域比較技術。

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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>
            日韩一区二区精品视频| 久久影院午夜片一区| 久久激情五月激情| 欧美一区在线视频| 欧美在线观看视频在线| 久久精品国产亚洲精品| 久久国产精品99久久久久久老狼| 亚洲一区二区三区在线播放| 亚洲欧美另类在线| 久久免费99精品久久久久久| 亚洲国产精品一区二区www在线| 麻豆免费精品视频| 亚洲国产精品国自产拍av秋霞| 亚洲欧洲精品一区二区三区| 一区二区精品国产| 久久久久久亚洲精品中文字幕| 久久综合久久综合久久| 欧美日本精品一区二区三区| 国产精品久久久亚洲一区| 国产在线视频不卡二| 亚洲三级电影全部在线观看高清| 久久最新视频| 欧美久久九九| 国产精品色午夜在线观看| 国产欧美日韩一区| 最近中文字幕日韩精品| 亚洲欧美清纯在线制服| 久久综合九九| 99国产精品99久久久久久| 久久精品91久久久久久再现| 欧美极品一区二区三区| 黑人巨大精品欧美一区二区小视频| 亚洲精品少妇30p| 欧美在线观看网站| 亚洲人体1000| 久久色在线播放| 国产美女精品视频免费观看| 亚洲最新视频在线播放| 欧美jizzhd精品欧美喷水| 亚洲一级在线观看| 欧美日韩网址| 亚洲精品一区二区三区av| 久久婷婷一区| 午夜精品久久久久久久白皮肤 | 欧美高清视频一区二区| 欧美刺激午夜性久久久久久久| 99综合在线| 欧美国产激情二区三区| 黄色小说综合网站| 欧美影院成年免费版| 99国产一区| 欧美精品一区二区视频| 亚洲国产成人久久综合| 久久综合电影一区| 欧美与黑人午夜性猛交久久久| 国产精品啊啊啊| 在线天堂一区av电影| 欧美高清视频免费观看| 老司机67194精品线观看| 激情综合亚洲| 欧美xart系列高清| 久久香蕉国产线看观看网| 狠狠噜噜久久| 久久综合色综合88| 久久久国产视频91| 尤物yw午夜国产精品视频明星| 久久国内精品视频| 欧美在线播放视频| 激情成人综合| 麻豆精品网站| 蜜桃av综合| 亚洲精品乱码久久久久久久久 | 国产精品乱子久久久久| 亚洲一区二区三区久久| 亚洲视频一区在线观看| 欧美在线看片| 一区二区亚洲| 欧美电影在线免费观看网站| 欧美99在线视频观看| 日韩一级在线| 亚洲在线成人| 一区视频在线| 亚洲国产精品一区制服丝袜 | 性色一区二区三区| 狠狠做深爱婷婷久久综合一区| 美女啪啪无遮挡免费久久网站| 老巨人导航500精品| 亚洲久久一区| 亚洲免费婷婷| 91久久久久久久久久久久久| 99国产精品私拍| 黄色日韩精品| aa级大片欧美三级| 国模精品一区二区三区| 亚洲啪啪91| 国产偷国产偷亚洲高清97cao| 欧美成年人视频网站欧美| 欧美日韩精品| 久久久久久有精品国产| 欧美国产91| 久久精品国产99国产精品澳门| 欧美激情2020午夜免费观看| 欧美一区二区视频在线| 欧美大成色www永久网站婷| 午夜精品久久久久久久99水蜜桃 | 麻豆精品在线视频| 欧美人与性禽动交情品| 久久久久久久一区| 欧美国产激情二区三区| 久久精品国产96久久久香蕉| 欧美日本一道本| 老鸭窝亚洲一区二区三区| 欧美日韩精品一区二区| 久久综合九色九九| 国产精品午夜在线| 亚洲国产精品高清久久久| 国产午夜精品麻豆| 日韩午夜三级在线| 亚洲国内欧美| 欧美专区18| 欧美中文字幕| 国产精品视频免费观看| 99国内精品久久| 99国产精品私拍| 欧美超级免费视 在线| 久久性天堂网| 国产亚洲精品久久久| 亚洲视频专区在线| 在线中文字幕不卡| 欧美大片在线影院| 欧美激情中文字幕乱码免费| 激情欧美一区二区三区| 欧美一区二区三区在线视频 | 另类专区欧美制服同性| 激情综合自拍| 欧美亚洲专区| 久久国产夜色精品鲁鲁99| 国产精品一区在线播放| 亚洲午夜一区二区| 亚洲自拍三区| 国产精品久久久久久久久借妻 | 美女精品在线| 欧美va亚洲va香蕉在线| 亚洲国产精品久久久久秋霞不卡| 久久久久久亚洲精品中文字幕| 免费欧美在线| 亚洲国产精品久久久久婷婷884| 久久精品国产免费观看| 老巨人导航500精品| 久久不见久久见免费视频1| 在线观看欧美成人| 亚洲国产网站| 在线亚洲伦理| 亚洲性感美女99在线| 99国产精品99久久久久久| 久久午夜影视| 狂野欧美激情性xxxx欧美| 亚洲精品国产精品国产自| 亚洲一区二区三区视频播放| 久久成年人视频| 欧美精品日韩www.p站| 亚洲精品久久久久久一区二区| 久久久亚洲成人| 国产精品99久久久久久久女警 | 欧美一区二区三区在线视频 | 亚洲欧美日韩人成在线播放| 欧美日韩免费观看中文| 日韩一区二区久久| 亚洲欧美999| 国产一区在线播放| 美女视频一区免费观看| 亚洲免费精彩视频| 久久久久天天天天| 亚洲免费av观看| 国产乱码精品一区二区三| 久久久亚洲欧洲日产国码αv| 亚洲黑丝在线| 欧美一级久久久| 亚洲经典自拍| 老司机一区二区三区| 9色porny自拍视频一区二区| 国产精品亚洲片夜色在线| 久久综合久久综合九色| 亚洲特级片在线| 欧美激情一区二区| 久久av二区| 日韩一级黄色大片| 国内精品福利| 欧美日韩精品一二三区| 亚洲国产精品热久久| 亚洲精品自在久久| 亚洲欧洲精品一区二区三区不卡| 欧美三级电影一区| 香蕉乱码成人久久天堂爱免费| 亚洲美女诱惑| 欧美精品一区在线| 亚洲国产欧美一区二区三区同亚洲| 玖玖视频精品| 欧美三区美女| 亚洲成色www8888|