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

eryar

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

PlaneGCS-平面幾何約束求解器用法

Posted on 2023-03-24 22:10 eryar 閱讀(1584) 評(píng)論(0)  編輯 收藏 引用 所屬分類(lèi): 2.OpenCASCADE

PlaneGCS-平面幾何約束求解器用法

eryar@163.com

1 Introduction

在傳統(tǒng)的機(jī)械設(shè)計(jì)軟件中,一般使用幾何約束求解器來(lái)畫(huà)草圖,再通過(guò)對(duì)草圖進(jìn)行拉伸旋轉(zhuǎn)等生成特征實(shí)現(xiàn)建模功能。基于參數(shù)化歷史特征方式來(lái)建模的軟件繞不開(kāi)幾何約束求解器,目前主流商用軟件一般使用西門(mén)子D-Cubed DCM及達(dá)索的CGM。開(kāi)源世界也有兩款幾何約束求解器:SolveSpace和PlaneGCS。

PlaneGCS字面意思是平面幾何約束求解器,主要用于繪制二維草圖。因?yàn)镻laneGCS代碼相對(duì)清晰,功能簡(jiǎn)單,只能處理平面幾何元素的約束,本文主要結(jié)合示例代碼介紹PlaneGCS的使用方法,在會(huì)用的基礎(chǔ)上去理解源碼的實(shí)現(xiàn)邏輯。

2 PlaneGCS

PlaneGCS主要包含三部分:

  • 幾何元素?cái)?shù)據(jù)結(jié)構(gòu)文件:h/Geo.cpp
  • 約束條件文件:h/Constraints.cpp
  • 約束求解實(shí)現(xiàn)文件:h/GCS.cpp

其中幾何元素?cái)?shù)據(jù)結(jié)構(gòu)中定義的幾何元素如下圖所示:

從上圖可以看到,目前支持的幾何元素有點(diǎn)Point,直線Line,圓Circle,橢圓Ellipse,雙曲線Hyperbola,拋物線Parabola,圓弧Arc/ArcOfEllipse/ArcOfHyperbola/ArcOfParabola,及B樣條曲線BSpline,不過(guò)看代碼BSpline部分函數(shù)沒(méi)有實(shí)現(xiàn),應(yīng)該是不支持的。

約束條件文件定義的約束類(lèi)型如下圖所示:

從約束求解文件中可以看到,其中數(shù)學(xué)計(jì)算主要使用Eigen中非線性方程組求解算法和boost的圖graph算法,從中可以推測(cè)出實(shí)現(xiàn)平面幾何約束求解器中需要的關(guān)鍵技術(shù)。先掌握PlaneGCS的用法,然后再分析其背后的實(shí)現(xiàn)原理細(xì)節(jié)。

3 Code Example

這里給出一個(gè)簡(jiǎn)單的示例程序,先讓大家對(duì)PlaneGCS有個(gè)認(rèn)識(shí)。示例程序中演示了給兩條直線加上水平和垂直約束。為了便于查看約束后的結(jié)果,在代碼中生成Draw Test Harness腳本文件。

程序代碼如下所示:

/*
Copyright(C) 2023 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 "GCS.h"
#include <fstream>
void test()
{
    double aPx1 = 0.0;
    double aPy1 = 0.0;
    double aPx2 = 3.0;
    double aPy2 = 3.0;
    double aPx3 = 6.0;
    double aPy3 = 9.0;
    GCS::VEC_pD aParameters;
    aParameters.push_back(&aPx1);
    aParameters.push_back(&aPy1);
    aParameters.push_back(&aPx2);
    aParameters.push_back(&aPy2);
    aParameters.push_back(&aPx3);
    aParameters.push_back(&aPy3);
    GCS::Point aP1(&aPx1, &aPy1);
    GCS::Point aP2(&aPx2, &aPy2);
    GCS::Point aP3(&aPx3, &aPy3);
    GCS::Line aLine1;
    GCS::Line aLine2;
    aLine1.p1 = aP1;
    aLine1.p2 = aP2;
    aLine2.p1 = aP2;
    aLine2.p2 = aP3;
    std::ofstream aTclFile("d:/gcs.tcl");
    aTclFile << "# 2 lines before PlaneGCS solve" << std::endl;
    aTclFile << "vinit" << std::endl;
    aTclFile << "vertex aP1 " << aPx1 << " " << aPy1 << " 0" << std::endl;
    aTclFile << "vertex aP2 " << aPx2 << " " << aPy2 << " 0" << std::endl;
    aTclFile << "vertex aP3 " << aPx3 << " " << aPy3 << " 0" << std::endl;
    aTclFile << "polyvertex aPolyline1 aP1 aP2 aP3" << std::endl;
    aTclFile << "vdisplay aPolyline1 " << std::endl;
    aTclFile << "vsetcolor aPolyline1 RED" << std::endl;
    GCS::System aSolver;
    aSolver.addConstraintHorizontal(aLine1);
    aSolver.addConstraintVertical(aLine2);
    if (aSolver.solve(aParameters) == GCS::Success)
    {
        aSolver.applySolution();
        aTclFile << "# 2 lines after PlaneGCS solve" << std::endl;
        aTclFile << "vertex aV1 " << aPx1 << " " << aPy1 << " 0" << std::endl;
        aTclFile << "vertex aV2 " << aPx2 << " " << aPy2 << " 0" << std::endl;
        aTclFile << "vertex aV3 " << aPx3 << " " << aPy3 << " 0" << std::endl;
        aTclFile << "polyvertex aPolyline2 aV1 aV2 aV3" << std::endl;
        aTclFile << "vdisplay aPolyline2 " << std::endl;
        aTclFile << "vsetcolor aPolyline2 GREEN" << std::endl;
    }
    aTclFile.close();
}
int main(int argc, char* argv[])
{
    test();
    return 0;
}

從程序代碼中可以看出PlaneGCS的使用先要定義需要計(jì)算的參數(shù)aParameters,這些參數(shù)是幾何元素中的數(shù)據(jù),都是使用的指針。然后將約束加入到GCS::System中,最后代入?yún)?shù)調(diào)用solve函數(shù)進(jìn)行求解。求解成功后使用applySolution()函數(shù)應(yīng)用求解結(jié)果。求解結(jié)果在Draw中顯示的綠色的線如下圖所示:

4 Conclusion

本文結(jié)合示例代碼演示如何使用PlaneGCS,主要使用了水平和垂直約束。PlaneGCS中還支持其他約束類(lèi)型,童鞋們可以自己探索一下。幾何造型內(nèi)核和幾何約束求解器常被看作是工業(yè)CAD軟件的卡脖子技術(shù),開(kāi)源庫(kù)一般功能不太完善,但是用來(lái)探索背后的實(shí)現(xiàn)原理還是有參考借鑒意義的。希望有更多的童鞋去了解背后的原理,共同來(lái)提高國(guó)內(nèi)三維CAD軟件開(kāi)發(fā)水平。

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <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久久综合婷婷| 亚洲人成在线观看一区二区| 欧美精品色综合| 这里只有精品视频在线| 99视频国产精品免费观看| 国产精品久久久久久久浪潮网站| 亚洲欧美精品一区| 欧美在线视频a| 亚洲国产欧美在线| 一区二区三区av| 国产亚洲欧美日韩美女| 亚洲电影免费观看高清完整版在线观看| 久久露脸国产精品| 一本一本久久a久久精品综合妖精| 一区二区国产日产| 狠狠噜噜久久| 亚洲美女毛片| 国产日韩欧美一二三区| 欧美激情成人在线| 国产精品久久久久久久久果冻传媒 | 久久国产精品72免费观看| 久久九九国产精品怡红院| 99国产精品视频免费观看| 亚洲在线观看免费视频| 亚洲国产欧美在线| 亚洲少妇自拍| 亚洲国产精品嫩草影院| 一本一本a久久| 亚洲狠狠婷婷| 亚洲欧美在线一区二区| 亚洲日韩中文字幕在线播放| 亚洲欧美日韩国产精品| 日韩一区二区精品葵司在线| 亚洲欧美国产不卡| 亚洲免费av观看| 欧美专区在线观看一区| 亚洲一区二区三区在线观看视频| 久久久国产91| 久久av一区二区三区| 欧美国产精品一区| 欧美电影美腿模特1979在线看 | 亚洲欧美清纯在线制服| 亚洲精品乱码久久久久久黑人| 亚洲欧美日韩综合aⅴ视频| 亚洲六月丁香色婷婷综合久久| 欧美一区二区在线看| 亚洲永久精品国产| 欧美激情1区| 欧美好骚综合网| 国产一区二区av| 亚洲愉拍自拍另类高清精品| 亚洲一区二区av电影| 男女av一区三区二区色多| 久久一区二区三区四区| 国产欧美日韩综合| 亚洲一区美女视频在线观看免费| 99精品热视频只有精品10| 欧美成人一区在线| 欧美激情导航| 91久久在线| 免费观看一级特黄欧美大片| 美女任你摸久久| 亚洲第一搞黄网站| 久久美女艺术照精彩视频福利播放| 欧美在线亚洲在线| 国产亚洲亚洲| 久久国产主播精品| 蜜桃av噜噜一区二区三区| 在线成人激情视频| 玖玖国产精品视频| 欧美成人第一页| 亚洲精品国精品久久99热| 免费久久久一本精品久久区| 欧美福利视频在线| 亚洲精品欧美精品| 欧美日韩三级电影在线| 99国产精品99久久久久久粉嫩| 在线一区免费观看| 国产精品久久99| 性色av香蕉一区二区| 久久婷婷av| 亚洲国产99精品国自产| 蜜臀99久久精品久久久久久软件| 亚洲国产精品va在线看黑人| 一本色道久久综合亚洲精品小说| 欧美日韩亚洲一区在线观看| 亚洲一区视频在线| 你懂的成人av| 亚洲视频你懂的| 国产欧美综合在线| 模特精品裸拍一区| 亚洲一区二区三区国产| 久久久久青草大香线综合精品| 亚洲国产导航| 欧美午夜精品一区二区三区| 亚欧成人在线| 91久久精品日日躁夜夜躁欧美| 久久久亚洲成人| 欧美中文字幕视频| 久久综合色播五月| 欧美另类高清视频在线| 国产精品一区二区你懂得| 亚洲国产视频直播| 这里只有精品丝袜| 亚洲精品国产精品国产自| 国产欧美日韩亚洲| 久久嫩草精品久久久精品一| 亚洲精品乱码久久久久久蜜桃麻豆| 亚洲性图久久| 亚洲国产精品t66y| 国产精品入口夜色视频大尺度| 久久亚洲视频| 亚洲午夜av| 亚洲欧洲一区二区在线播放| 久久精品毛片| 亚洲欧美日韩另类精品一区二区三区| 极品av少妇一区二区| 国产精品久久久久久妇女6080 | 亚洲精品小视频在线观看| 久久久99国产精品免费| 夜夜狂射影院欧美极品| 在线观看视频欧美| 国产欧美在线视频| 欧美三区在线视频| 欧美电影打屁股sp| 久久精品免视看| 午夜精品久久久久久久99樱桃 | 久久精品国产久精国产思思| 亚洲视频中文| 一区二区高清| 日韩亚洲精品视频| 亚洲日本中文| 91久久在线观看| 亚洲欧洲一级| 亚洲第一色在线| 永久555www成人免费| 国产主播一区二区三区四区| 国产农村妇女精品一区二区 | 亚洲综合清纯丝袜自拍| 一本色道精品久久一区二区三区| 亚洲人成网站精品片在线观看 | 午夜精品国产| 亚洲视频在线观看免费| 亚洲视频每日更新| 亚洲深夜影院| 亚洲欧美文学| 午夜精品美女久久久久av福利| 亚洲天堂第二页| 午夜精品在线看| 久久岛国电影| 牛牛影视久久网| 亚洲第一视频网站| 亚洲精品欧美精品| 亚洲视频1区2区| 免费中文日韩| 久久一区二区三区av| 欧美精品首页| 亚洲风情亚aⅴ在线发布| 亚洲国产精品久久久久婷婷老年| 欧美成人免费一级人片100| 国产精品激情| 亚洲久久在线| 亚洲欧美在线aaa| 国产日韩欧美麻豆| 国产精品一区二区久久精品 | 欧美二区不卡| 欧美激情精品久久久久久黑人 | 国产精品国产三级国产a| 久久综合一区二区| 久久在线免费观看| 久久免费视频网站| 狼狼综合久久久久综合网| 麻豆成人91精品二区三区| 蜜臀av性久久久久蜜臀aⅴ| 欧美激情二区三区| 日韩午夜激情电影| 欧美自拍丝袜亚洲| 欧美gay视频| 国产乱子伦一区二区三区国色天香| 国产精品系列在线播放| 伊人久久久大香线蕉综合直播| 亚洲人成在线播放| 欧美在线影院在线视频| 免费在线成人av| 亚洲天堂av高清| 久久亚洲不卡| 欧美日韩一级黄| 黄色成人免费观看| 亚洲欧美国产高清va在线播| 久久综合狠狠综合久久综青草| 日韩视频中文| 欧美激情麻豆| 亚洲精品国久久99热| 久久久久国内|