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

eryar

PipeCAD - Plant Piping Design Software.
RvmTranslator - Translate AVEVA RVM to OBJ, glTF, etc.
posts - 603, comments - 590, trackbacks - 0, articles - 0

OpenCASCADE中的gp包

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

Package gp in the OpenCASCADE

eryar@163.com China

一、簡(jiǎn)介 Introduction to Package gp

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

  • 代數(shù)計(jì)算;如坐標(biāo)計(jì)算、矩陣計(jì)算;
  • 基本解析幾何元素;如變換、點(diǎn)、矢量、線、面、軸、二次曲線和初等曲面;

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

可用的幾何實(shí)體如下所示:

  1. 2D&3D Cartesian coordinates(x,y,z); 二維&三維笛卡爾坐標(biāo);
  2. Matrices; 矩陣;
  3. Cartesian points; 笛卡爾坐標(biāo)點(diǎn);
  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; 環(huán)面;
  16. Conical surface; 錐面;
二、幾何元素的集合 Collections of Primitive Geometric Types

創(chuàng)建幾何對(duì)象之前,根據(jù)你是將幾何對(duì)象用于二維還是三維來(lái)確定。若你需要一個(gè)幾何對(duì)象集而不是單一的幾何對(duì)象,即用來(lái)處理一類幾何元素,包TColgp就是提供這種功能的。

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

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

個(gè)人意見(jiàn),若使用標(biāo)準(zhǔn)C++的容器類(The STL Template Container),就不需要?jiǎng)?chuàng)建這么多類了。

三、基本幾何庫(kù) Basic Geometric Libraries

有幾個(gè)庫(kù)提供了曲線和曲面的基本計(jì)算功能。若要處理由包gp創(chuàng)建的幾何對(duì)象,初等曲線曲面的有用算法庫(kù)在包:ElCLibElSLib中。包Precision提供兩個(gè)數(shù)字比較的功能。

  • Package ElCLib; ElCLib代表:Elementary Curves Library. 提供初等曲線曲面的基本幾何計(jì)算功能;
  • Package ElSLib; ElSLib代表:Elementary Surfaces Library. 提供初等曲面的基本幾何計(jì)算。
  • Package Bnd;提供二維和三維空間中幾何元素包圍盒的計(jì)算功能;
  • Package Precision; 由于浮點(diǎn)數(shù)在計(jì)算機(jī)內(nèi)實(shí)際上是一個(gè)近似表示,在手工計(jì)算看來(lái)為正確的結(jié)果,在計(jì)算機(jī)中運(yùn)算未必得出正確的結(jié)果。所以,我們得到一個(gè)重要的經(jīng)驗(yàn):使用浮點(diǎn)數(shù)進(jìn)行相等(==)和不等(!=)比較的操作通常是有問(wèn)題的。浮點(diǎn)數(shù)的相等比較,一般總是使用兩者相減的值是否落在0的鄰域中來(lái)判斷。這就是鄰域比較技術(shù)。在OpenCASCADE中專門(mén)提供包Precision來(lái)處理兩個(gè)數(shù)值的比較問(wèn)題。
四、代碼示例 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;
}

輸出結(jié)果如下:

   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 . . .

 

五、結(jié)論

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

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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精品国产在热久久婷婷| 国产精品大全| 免费在线观看日韩欧美| 欧美日本在线播放| 久久国产精品电影| 欧美大片第1页| 久久不见久久见免费视频1| 老牛嫩草一区二区三区日本| 中文在线一区| 久久一综合视频| 亚洲欧美一区二区在线观看| 久久久精品午夜少妇| 亚洲一区黄色| 欧美成人一二三| 久久精品日产第一区二区三区| 久久午夜影视| 久久精品人人做人人爽电影蜜月| 欧美区日韩区| 欧美激情视频网站| 韩日成人av| 亚洲欧美日韩网| 亚洲综合日本| 欧美日韩精品久久久| 欧美激情一区二区三区成人| 国产一区二区三区免费不卡 | 久久激情综合| 亚洲综合第一| 欧美日韩在线一二三| 欧美激情精品久久久久久变态| 国产欧美日本一区二区三区| 国产亚洲精品bt天堂精选| 亚洲国产日韩欧美在线动漫| 欧美va天堂| 久久中文久久字幕| 国产手机视频一区二区| 一区二区三区视频观看| 99re6这里只有精品视频在线观看| 久久久久国产精品厨房| 久久精品视频导航| 国产欧美一区二区三区久久人妖| 一本久道久久综合狠狠爱| 亚洲伦理中文字幕| 美日韩免费视频| 久久综合色播五月| 极品少妇一区二区| 久久久久高清| 欧美激情免费观看| 日韩视频一区二区三区| 欧美高清在线播放| 亚洲精品国产精品国自产观看浪潮| 亚洲国产高清一区| 另类天堂视频在线观看| 欧美jizz19性欧美| 亚洲精品美女| 欧美全黄视频| 亚洲午夜精品久久久久久app| 亚洲免费一级电影| 国产欧美日韩免费| 久久久久久久综合色一本| 裸体一区二区| 亚洲狼人综合| 国产精品videosex极品| 亚洲尤物视频网| 久久久久国产精品午夜一区| 激情综合中文娱乐网| 欧美+日本+国产+在线a∨观看| 亚洲黄色在线看| 亚洲专区在线| 韩日精品在线| 欧美噜噜久久久xxx| 亚洲视频免费在线| 久久婷婷综合激情| 亚洲三级影院| 国产欧美日韩一区| 免费在线观看精品| 亚洲视频免费在线观看| 久久尤物视频| 一区二区三区欧美成人| 国产模特精品视频久久久久| 久久久久国产精品www| 亚洲人线精品午夜| 亚洲欧美日韩中文在线制服| 国产综合自拍| 欧美日韩国产一中文字不卡 | 亚洲国产免费看| 欧美日韩精品免费观看| 性刺激综合网| 亚洲国产精品悠悠久久琪琪| 亚洲欧美综合国产精品一区| 精品动漫一区| 国产精品国产三级国产普通话三级 | 亚洲欧美日韩国产一区二区| 猛男gaygay欧美视频| 国产午夜精品久久久久久久| 亚洲高清在线精品| 性色av一区二区三区| 娇妻被交换粗又大又硬视频欧美| 欧美金8天国| 久久成人亚洲| 99精品久久久| 老司机成人网| 午夜日韩av| 亚洲精品乱码| 国外成人在线视频| 欧美视频官网| 欧美~级网站不卡| 久久国产一二区| 在线视频一区观看| 亚洲国产精品一区| 美女脱光内衣内裤视频久久网站| 亚洲午夜高清视频| 最新日韩中文字幕| 伊人精品久久久久7777| 国产精品美女久久久免费| 欧美激情综合色| 蜜臀久久久99精品久久久久久| 性色av一区二区三区| 一区二区三区欧美亚洲| 亚洲精品视频一区| 亚洲全部视频| 亚洲电影观看| 欧美国产成人在线| 免费成人高清在线视频| 久久久精品日韩| 欧美在线|欧美| 性欧美8khd高清极品| 亚洲免费在线视频一区 二区| 日韩视频三区| 一本色道久久综合亚洲精品按摩| 亚洲激情一区| 亚洲人屁股眼子交8| 亚洲国产视频一区二区| 亚洲成人在线| 亚洲国产精品一区二区尤物区| 国内精品福利| 狠狠色综合网| 亚洲第一区在线| 亚洲激情黄色| 亚洲免费播放| 一区二区欧美日韩| 亚洲午夜一二三区视频| 亚洲新中文字幕| 午夜精品成人在线视频| 欧美一区二区三区喷汁尤物| 欧美一级大片在线免费观看| 欧美在线综合| 麻豆成人在线| 亚洲黄一区二区| 中文av一区二区| 欧美一级久久久| 久久久久久久久久久一区| 免费观看成人网| 欧美剧在线观看| 国产精品久久久久av免费| 国产乱码精品1区2区3区| 国产一区91| 亚洲高清在线| 一区二区三区四区国产精品| 亚洲一区欧美激情| 久久精品国产一区二区三| 久久人人九九| 最近中文字幕日韩精品| 这里只有精品视频在线| 午夜在线观看欧美| 久久综合网色—综合色88| 欧美大片免费观看在线观看网站推荐| 欧美激情精品久久久久久大尺度 | 久久久国产91| 国产欧美亚洲视频| 亚洲综合欧美日韩| 在线一区亚洲| 欧美一区二区三区免费视| 另类成人小视频在线| 亚洲精品日产精品乱码不卡| 亚洲一区二区免费视频| 久久嫩草精品久久久久| 欧美日韩国产综合视频在线观看| 国产精品日韩欧美综合| 亚洲国产老妈| 性欧美18~19sex高清播放| 亚洲电影激情视频网站| 亚洲免费影视| 欧美二区视频| 国产三级精品在线不卡| 日韩视频免费在线| 久久噜噜亚洲综合| 99国产精品久久久久久久成人热| 久久狠狠久久综合桃花| 欧美日韩福利视频| 在线欧美三区| 亚洲欧美日韩国产一区二区三区| 欧美va亚洲va国产综合| 亚洲欧美在线播放| 欧美日韩国产成人在线91| 精品99视频| 欧美一级播放| 妖精视频成人观看www|