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

            eryar

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

            OpenCascade Law Function

            Posted on 2018-03-25 17:11 eryar 閱讀(1305) 評論(0)  編輯 收藏 引用 所屬分類: 2.OpenCASCADE

            OpenCascade Law Function

            eryar@163.com

            1.Introduction

            在OpenCASCADE的TKGeomAlgo Toolkit中提供了一個Law Package,在Law包中有一個基類:Law_Function,字面上翻譯為 規(guī)則函數(shù)。其類圖如下所示:

            wps_clip_image-22828

            Figure 1. Law Function class diagram

            本文主要對Law_Function的子類進行介紹,進一步理解OpenCASCADE中Law相關類的作用。

            2.Law Functions

            根據(jù)Law_Function可知,Law_Function的子類有常量規(guī)則Law_Constant、線性規(guī)則Law_Linear、組合規(guī)則Law_Composite及B樣條規(guī)則Law_BSpFunc。抽象類Law_Function的純虛函數(shù)有:

            l Continuity(): 規(guī)則函數(shù)的連續(xù)性;

            l Value():計算對應參數(shù)X的函數(shù)值Y;

            l D1():計算規(guī)則函數(shù)在參數(shù)X處的一階導數(shù);

            l D2():計算規(guī)則函數(shù)在參數(shù)X處的二階導數(shù);

            l Bounds():規(guī)則函數(shù)的定義區(qū)間;

            wps_clip_image-13300

            從上面的虛函數(shù)可以看出類Law_Function是一個一元變量的函數(shù),與類math_Function的功能類似。

            3.Test Code

            下面的代碼將規(guī)則函數(shù)Law_Function的幾個子類通過生成Draw腳本,在Draw Test Harness中進行可視化,直觀地顯示出了幾個規(guī)則函數(shù),便于理解。

            /*
            Copyright(C) 2018 Shing Liu(eryar@163.com)
            Permission is hereby granted, free of charge, to any person obtaining a copy
            of this software and associated documentation files(the "Software"), to deal
            in the Software without restriction, including without limitation the rights
            to use, copy, modify, merge, publish, distribute, sublicense, and / or sell
            copies of the Software, and to permit persons to whom the Software is
            furnished to do so, subject to the following conditions :
            The above copyright notice and this permission notice shall be included in all
            copies or substantial portions of the Software.
            THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
            IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
            FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.IN NO EVENT SHALL THE
            AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
            LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
            OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
            SOFTWARE.
            */
            #include <TColgp_Array1OfPnt2d.hxx>
            #include <Law_Constant.hxx>
            #include <Law_Linear.hxx>
            #include <Law_BSpFunc.hxx>
            #include <Law_S.hxx>
            #include <Law_Interpol.hxx>
            #pragma comment(lib, "TKernel.lib")
            #pragma comment(lib, "TKMath.lib")
            #pragma comment(lib, "TKG2d.lib")
            #pragma comment(lib, "TKG3d.lib")
            #pragma comment(lib, "TKGeomBase.lib")
            #pragma comment(lib, "TKGeomAlgo.lib")
            Standard_Integer aId = 0;
            void draw(const Handle(Law_Function)& theLaw, std::ostream& theOutput)
            {
                const Standard_Integer aStep = 20;
                Standard_Real aFirst = 0.0;
                Standard_Real aLast = 0.0;
                Standard_Real aDelta = 0.0;
                Standard_Real aX = 0.0;
                Standard_Real aY = 0.0;
                theLaw->Bounds(aFirst, aLast);
                aDelta = (aLast - aFirst) / aStep;
                theOutput << "polyline law" << ++aId;
                for (Standard_Integer i = 0; i <= aStep; ++i)
                {
                    aX = aFirst + i * aDelta;
                    aY = theLaw->Value(aX);
                    theOutput  << " " << aX << " " << aY << " 0.0";
                }
                theOutput << "\n vdisplay law" << aId << std::endl;
                theOutput << "vaspects law" << aId << " -setColor " << ((aId % 2) ? " red " : " yellow ") << std::endl;
            }
            void test(std::ostream& theOutput)
            {
                // 1. Constant law.
                Handle(Law_Constant) aConstantLaw = new Law_Constant();
                aConstantLaw->Set(2.0, 0.0, 1.0);
                draw(aConstantLaw, theOutput);
                // 2. Linear evolution law.
                Handle(Law_Linear) aLinearLaw = new Law_Linear();
                aLinearLaw->Set(1.0, 2.0, 3.0, 5.0);
                draw(aLinearLaw, theOutput);
                // 3. An "S" evolution law.
                Handle(Law_S) aSLaw = new Law_S();
                aSLaw->Set(3.0, 5.0, 6.0, 8.0);
                draw(aSLaw, theOutput);
                // 4. Provides an evolution law that interpolates a set of parameter and value pairs (wi, radi)
                TColgp_Array1OfPnt2d aPoints(1, 4);
                aPoints.SetValue(1, gp_Pnt2d(6.0, 8.0));
                aPoints.SetValue(2, gp_Pnt2d(7.0, 5.0));
                aPoints.SetValue(3, gp_Pnt2d(8.0, 9.0));
                aPoints.SetValue(4, gp_Pnt2d(9.0, 2.0));
                Handle(Law_Interpol) anInterpolativeLaw = new Law_Interpol();
                anInterpolativeLaw->Set(aPoints);
                draw(anInterpolativeLaw, theOutput);
            }
            int main(int argc, char* argv[])
            {
                std::ofstream aTclFile("d:/tcl/law.tcl");
                test(aTclFile);
                return 0;
            }

            程序會在d:/tcl中生成一個law.tcl文件,將此文件加載到Draw 中即可顯示出規(guī)則函數(shù)對應的曲線,如下圖所示:

            wps_clip_image-6615

            Figure 2. Visualization Law Function Curves

            由圖可知,常量規(guī)則函數(shù)在定義區(qū)間內(nèi)是一條直線;線性規(guī)則函數(shù)是一條直線;S型函數(shù)是S型的B樣條曲線;插值函數(shù)是根據(jù)指定點插值得到的B樣條曲線。

            4.Conclusion

            在OpenCASCADE中經(jīng)常可以看到一些與Law相關的類,本文介紹了TKGeomAlgo中的Law包,綜上所述可知,Law就是一元函數(shù),與math_Function的概念一致。

            本文顯示規(guī)則曲線的方式可供借鑒,提高開發(fā)效率。只需要生成一個文本文件,就可以將結(jié)果可視化,對于其他三維的也是一樣。



            為了方便大家在移動端也能看到我的博文和討論交流,現(xiàn)已注冊微信公眾號,歡迎大家掃描下方二維碼關注。
            Shing Liu(eryar@163.com)

             

            亚洲熟妇无码另类久久久| 久久无码国产专区精品| 久久免费高清视频| 久久se精品一区二区影院| 国内精品欧美久久精品| 午夜精品久久久久9999高清| 99久久99久久精品国产片果冻| 国产精品久久久久久福利漫画| 精品无码久久久久久久久久| 一本色道久久综合狠狠躁| 精品国产91久久久久久久a| 色播久久人人爽人人爽人人片AV| 狠狠色丁香婷综合久久| 亚洲人成网亚洲欧洲无码久久 | 国产成人综合久久综合| 久久亚洲精品无码观看不卡| 亚洲中文精品久久久久久不卡| 久久久噜噜噜久久| 99久久无色码中文字幕| 精品人妻伦九区久久AAA片69| 草草久久久无码国产专区| 久久国产精品77777| 国产毛片欧美毛片久久久| 久久久久亚洲AV成人网人人网站| 久久91精品国产91久久小草| 婷婷五月深深久久精品| 久久精品国产久精国产一老狼| 香蕉久久影院| 久久亚洲熟女cc98cm| 久久久午夜精品| 久久婷婷五月综合成人D啪| 亚洲午夜无码AV毛片久久| 精品无码久久久久久国产| 国产高潮国产高潮久久久91 | 777米奇久久最新地址| 亚洲va国产va天堂va久久| 久久婷婷人人澡人人爽人人爱| 一本色道久久88综合日韩精品 | 久久久WWW成人| 亚洲国产成人精品91久久久 | 无码人妻久久久一区二区三区|