zoukankan      html  css  js  c++  java
  • NXOpen 方式创建拉伸和预览

    C++

    HPP 关键代码

    //用户代码
    #include "ExtrudewithPreview.hpp"
    #include "NXOpen/Body.hxx"
    #include "NXOpen/Direction.hxx"
    #include "NXOpen/DisplayableObject.hxx"
    #include "NXOpen/DisplayModification.hxx"
    #include "NXOpen/DisplayManager.hxx"
    #include "NXOpen/Expression.hxx"
    #include "NXOpen/Facet_FacetedBodyCollection.hxx"
    #include "NXOpen/Features_BodyFeature.hxx"
    #include "NXOpen/Features_Extrude.hxx"
    #include "NXOpen/Features_ExtrudeBuilder.hxx"
    #include "NXOpen/Features_Feature.hxx"
    #include "NXOpen/Features_FeatureCollection.hxx"
    #include "NXOpen/GeometricUtilities_Extend.hxx"
    #include "NXOpen/GeometricUtilities_Limits.hxx"
    #include "NXOpen/ModelingView.hxx"
    #include "NXOpen/ModelingViewCollection.hxx"
    #include "NXOpen/Part.hxx"
    #include "NXOpen/PartCollection.hxx"
    #include "NXOpen/Update.hxx"
    #include "NXOpen/View.hxx"
    #include "NXOpen/ViewCollection.hxx"
    #include "NXOpen/Preferences_SessionVisualizationVisual.hxx"
    #include <sstream>
    #include <iomanip>

        Part* workPart;
        Part* displayPart;
        std::vector<NXOpen::TaggedObject *> vectCol;
        NXOpen::Direction* extrudeDirection;
        std::vector<NXOpen::TaggedObject *> tagObjArray;
        NXOpen::Features::Feature* feature1;
        bool isFeatureCreated;
        bool preview;
        NXOpen::Session::UndoMarkId markId1;
        double startValueOfExt;
        double endValueOfExt;
        NXOpen::Direction* directionToSet;
        bool value;
     bool Translucency1;

        void createExtrude();
        void redefineFeature();
        void visibility();
        void showOrCreate(int transparencyValue);
        void setBoolean(bool value);
        NXString doubleToNXString(double value);
        NXString intToNXString(int value);

    CPP 关键代码

    void ExtrudewithPreview::initialize_cb()
    {
        try
        {
            SectionGroup = dynamic_cast<NXOpen::BlockStyler::Group*>(theDialog->TopBlock()->FindBlock("SectionGroup"));
            SectionToExtrude = dynamic_cast<NXOpen::BlockStyler::SectionBuilder*>(theDialog->TopBlock()->FindBlock("SectionToExtrude"));
            DirectionGroup = dynamic_cast<NXOpen::BlockStyler::Group*>(theDialog->TopBlock()->FindBlock("DirectionGroup"));
            DirectionToExtrude = dynamic_cast<NXOpen::BlockStyler::SpecifyVector*>(theDialog->TopBlock()->FindBlock("DirectionToExtrude"));
            LimitsGroup = dynamic_cast<NXOpen::BlockStyler::Group*>(theDialog->TopBlock()->FindBlock("LimitsGroup"));
            StartLimit = dynamic_cast<NXOpen::BlockStyler::DoubleBlock*>(theDialog->TopBlock()->FindBlock("StartLimit"));
            EndLimit = dynamic_cast<NXOpen::BlockStyler::DoubleBlock*>(theDialog->TopBlock()->FindBlock("EndLimit"));
            PreviewGroup = dynamic_cast<NXOpen::BlockStyler::Group*>(theDialog->TopBlock()->FindBlock("PreviewGroup"));
            PreviewToggle = dynamic_cast<NXOpen::BlockStyler::Toggle*>(theDialog->TopBlock()->FindBlock("PreviewToggle"));
            ResultButton = dynamic_cast<NXOpen::BlockStyler::Button*>(theDialog->TopBlock()->FindBlock("ResultButton"));

      //用户代码
            NXOpen::BlockStyler::PropertyList* Endlimitproplist = EndLimit->GetProperties();
            Endlimitproplist->SetDouble("Value", 36.0);
            delete Endlimitproplist;
            Endlimitproplist = NULL;

            workPart = ExtrudewithPreview::theSession->Parts()->Work();
            displayPart = ExtrudewithPreview::theSession->Parts()->Display();

            feature1 = NULL;
            isFeatureCreated = false;
            preview = true;
            value = true;

            tagObjArray.clear();
            vectCol.clear();

            Translucency1 = ExtrudewithPreview::theUI->VisualizationVisualPreferences()->Translucency();
            ExtrudewithPreview::theUI->VisualizationVisualPreferences()->SetTranslucency(true);

        }
        catch(exception& ex)
        {
            //---- Enter your exception handling code here -----
            ExtrudewithPreview::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
        }
    }

    //------------------------------------------------------------------------------
    //Callback Name: dialogShown_cb
    //This callback is executed just before the dialog launch. Thus any value set
    //here will take precedence and dialog will be launched showing that value.
    //------------------------------------------------------------------------------
    void ExtrudewithPreview::dialogShown_cb()
    {
        try
        {
            //---- Enter your callback code here -----
        }
        catch(exception& ex)
        {
            //---- Enter your exception handling code here -----
            ExtrudewithPreview::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
        }
    }

    //------------------------------------------------------------------------------
    //Callback Name: apply_cb
    //------------------------------------------------------------------------------
    int ExtrudewithPreview::apply_cb()
    {
        int errorCode = 0;
        try
        {
            //---- Enter your callback code here -----
      //用户代码
      showOrCreate(0);
        }
        catch(exception& ex)
        {
            //---- Enter your exception handling code here -----
            errorCode = 1;
            ExtrudewithPreview::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
        }
        return errorCode;
    }

    //------------------------------------------------------------------------------
    //Callback Name: update_cb
    //------------------------------------------------------------------------------
    int ExtrudewithPreview::update_cb(NXOpen::BlockStyler::UIBlock* block)
    {
        try
        {
            if(block == SectionToExtrude)
            {
            //---------Enter your code here-----------
                NXOpen::BlockStyler::PropertyList* SectionToExtrudeproplist = SectionToExtrude->GetProperties();
                tagObjArray = SectionToExtrudeproplist->GetTaggedObjectVector("SelectedObjects");
                delete SectionToExtrudeproplist;
                NXOpen::BlockStyler::PropertyList* PreviewToggleproplist = PreviewToggle->GetProperties();
                preview = PreviewToggleproplist->GetLogical("Value");
                delete PreviewToggleproplist;
                createExtrude();


            }
            else if(block == DirectionToExtrude)
            {
            //---------Enter your code here-----------
                NXOpen::BlockStyler::PropertyList* DirectionToExtrudeproplist = DirectionToExtrude->GetProperties();
                vectCol = DirectionToExtrudeproplist->GetTaggedObjectVector("SelectedObjects");
                delete DirectionToExtrudeproplist;
                if (vectCol.size() > 0)
                {
                    extrudeDirection = dynamic_cast<NXOpen::Direction* >(vectCol[0]);
                    directionToSet = extrudeDirection;
                }

                NXOpen::BlockStyler::PropertyList* PreviewToggleproplist = PreviewToggle->GetProperties();
                preview = PreviewToggleproplist->GetLogical("Value");
                delete PreviewToggleproplist;

                createExtrude();


            }
            else if(block == StartLimit)
            {
            //---------Enter your code here-----------

                NXOpen::BlockStyler::PropertyList* PreviewToggleproplist = PreviewToggle->GetProperties();
                preview = PreviewToggleproplist->GetLogical("Value");
                delete PreviewToggleproplist;

                NXOpen::BlockStyler::PropertyList* StartLimitproplist = StartLimit->GetProperties();
                startValueOfExt = StartLimitproplist->GetDouble("Value");
                delete StartLimitproplist;

                createExtrude();


            }
            else if(block == EndLimit)
            {
            //用户代码

       NXOpen::BlockStyler::PropertyList* PreviewToggleproplist = PreviewToggle->GetProperties();
       preview = PreviewToggleproplist->GetLogical("Value");
       delete PreviewToggleproplist;

       NXOpen::BlockStyler::PropertyList* EndLimitproplist = EndLimit->GetProperties();
       endValueOfExt = EndLimitproplist->GetDouble("Value");
       delete EndLimitproplist;

       createExtrude();


            }
            else if(block == PreviewToggle)
            {
            //用户代码

                NXOpen::BlockStyler::PropertyList* PreviewToggleproplist = PreviewToggle->GetProperties();
                preview = PreviewToggleproplist->GetLogical("Value");
                delete PreviewToggleproplist;

                createExtrude();

            }
            else if(block == ResultButton)
            {
            //用户代码

                createExtrude();

                if (value)
                {
                    setBoolean(false);
                    NXOpen::BlockStyler::PropertyList* ResultButtonproplist = ResultButton->GetProperties();
                    ResultButtonproplist->SetString("Bitmap", "undo");
                    ResultButtonproplist->SetString("Label", "Undo result");
                    delete ResultButtonproplist;

                    showOrCreate(0);
                }
                else
                {
                    setBoolean(true);
                    NXOpen::BlockStyler::PropertyList* ResultButtonproplist = ResultButton->GetProperties();
                    ResultButtonproplist->SetString("Bitmap", "general_preview");
                    ResultButtonproplist->SetString("Label", "Show Result");
                    delete ResultButtonproplist;

                    if (feature1 != NULL)
                    {
                        visibility();
                    }
                }
                value = !value;


            }
        }
        catch(exception& ex)
        {
            //---- Enter your exception handling code here -----
            ExtrudewithPreview::theUI->NXMessageBox()->Show("Block Styler", NXOpen::NXMessageBox::DialogTypeError, ex.what());
        }
        return 0;
    }

    //------------------------------------------------------------------------------
    //Function Name: GetBlockProperties
    //Description: Returns the propertylist of the specified BlockID
    //------------------------------------------------------------------------------
    PropertyList* ExtrudewithPreview::GetBlockProperties(const char *blockID)
    {
        return theDialog->GetBlockProperties(blockID);
    }

    //创建拉伸
    void ExtrudewithPreview::createExtrude()
    {
        if (tagObjArray.size() > 0 && vectCol.size() > 0)
        {
            if (isFeatureCreated)
            {
                redefineFeature();
                return;
            }

            NXOpen::Features::Feature* nullFeatures_Feature = NULL;
            NXOpen::Features::ExtrudeBuilder* extrudeBuilder1 = workPart->Features()->CreateExtrudeBuilder(nullFeatures_Feature);
            extrudeBuilder1->SetDistanceTolerance(0.0254);
            extrudeBuilder1->SetDirection(extrudeDirection);

            NXOpen::BlockStyler::PropertyList* StartLimitproplist = StartLimit->GetProperties();
            int starvalueofext = (int)StartLimitproplist->GetDouble("Value");
            delete StartLimitproplist;
            extrudeBuilder1->Limits()->StartExtend()->Value()->SetRightHandSide (intToNXString(starvalueofext));

            NXOpen::BlockStyler::PropertyList* EndLimitproplist = EndLimit->GetProperties();
            int endValueOfExt = (int)EndLimitproplist->GetDouble("Value");
            delete EndLimitproplist;
            extrudeBuilder1->Limits()->EndExtend()->Value()->SetRightHandSide (intToNXString(endValueOfExt));

            extrudeBuilder1->SetSection (dynamic_cast<NXOpen::Section* >(tagObjArray[0]));
            feature1 = extrudeBuilder1->CommitFeature();
            extrudeBuilder1->Destroy();
            workPart->FacetedBodies()->DeleteTemporaryFacesAndEdges();
            isFeatureCreated = true;
            visibility();
        }
    }

    //编辑拉伸
    void ExtrudewithPreview::redefineFeature()
    {
        NXOpen::Features::Extrude* extrude1 = dynamic_cast<NXOpen::Features::Extrude* >(feature1);

        NXOpen::Features::ExtrudeBuilder* extrudeBuilder2 =
            workPart->Features()->CreateExtrudeBuilder(extrude1);

        extrudeBuilder2->SetDistanceTolerance(0.0254);

        extrudeBuilder2->SetDirection(extrudeDirection);

        NXOpen::BlockStyler::PropertyList* StartLimitproplist = StartLimit->GetProperties();
        double starvalueofext = StartLimitproplist->GetDouble("Value");
        delete StartLimitproplist;

        extrudeBuilder2->Limits()->StartExtend()->Value()->SetRightHandSide(doubleToNXString(starvalueofext));

        NXOpen::BlockStyler::PropertyList* EndLimitproplist = EndLimit->GetProperties();
        double endValueOfExt = EndLimitproplist->GetDouble("Value");
        delete EndLimitproplist;

        extrudeBuilder2->Limits()->EndExtend()->Value()->SetRightHandSide(doubleToNXString(endValueOfExt));

        extrudeBuilder2->SetSection(dynamic_cast<NXOpen::Section* >(tagObjArray[0]));

        markId1 = ExtrudewithPreview::theSession->SetUndoMark(NXOpen::Session::MarkVisibilityVisible, "Start Extrude");
        feature1 = extrudeBuilder2->CommitFeature();
        extrudeBuilder2->Destroy();
        workPart->FacetedBodies()->DeleteTemporaryFacesAndEdges();
        ExtrudewithPreview::theSession->UpdateManager()->DoUpdate(markId1);
        ExtrudewithPreview::theSession->DeleteUndoMark(markId1, NULL);
        visibility();
    }
    //设置显示
    void ExtrudewithPreview::visibility()
    {
        if (preview)
        {
            NXOpen::Features::BodyFeature* bodyfeat =
                dynamic_cast<NXOpen::Features::BodyFeature* >(feature1);
            std::vector<NXOpen::Body* > featureBodies = bodyfeat->GetBodies();

            NXOpen::DisplayModification* displayModification1 =
                ExtrudewithPreview::theSession->DisplayManager()->NewDisplayModification();
            displayModification1->SetApplyToAllFaces(true);
            displayModification1->SetNewTranslucency(80);

            std::vector<NXOpen::DisplayableObject* > objects1(featureBodies.size());
            for (unsigned int ii = 0; ii < featureBodies.size(); ++ii)
            {
                NXOpen::Body* body = featureBodies[ii];
                objects1[ii] = dynamic_cast<NXOpen::DisplayableObject* > (body);
            }

            displayModification1->Apply(objects1);
            workPart->ModelingViews()->WorkView()->SetRenderingStyle(NXOpen::View::RenderingStyleTypeShadedWithEdges);
        }
        else
        {
            NXOpen::Features::BodyFeature* bodyfeat =
                dynamic_cast<NXOpen::Features::BodyFeature* >(feature1);
            std::vector<NXOpen::Body* > featureBodies = bodyfeat->GetBodies();

            NXOpen::DisplayModification* displayModification1 =
                ExtrudewithPreview::theSession->DisplayManager()->NewDisplayModification();
            displayModification1->SetApplyToAllFaces(true);
            displayModification1->SetNewTranslucency(100);

            std::vector<NXOpen::DisplayableObject* > objects1(featureBodies.size());
            for (unsigned int ii = 0; ii < featureBodies.size(); ++ii)
            {
                objects1[ii] = featureBodies[ii];
            }

            displayModification1->Apply(objects1);
            workPart->ModelingViews()->WorkView()->SetRenderingStyle(NXOpen::View::RenderingStyleTypeShaded);
        }
    }
    //显示创建
    void ExtrudewithPreview::showOrCreate(int transparencyValue)
    {
        if (feature1 != NULL)
        {
            NXOpen::Features::BodyFeature* bodyfeat = dynamic_cast<NXOpen::Features::BodyFeature* >(feature1);
            std::vector<NXOpen::Body *> featureBodies = bodyfeat->GetBodies();
            NXOpen::DisplayModification* displayModification1
                = ExtrudewithPreview::theSession->DisplayManager()->NewDisplayModification();
            displayModification1->SetApplyToAllFaces(true);
            displayModification1->SetNewTranslucency(transparencyValue);
            std::vector<NXOpen::DisplayableObject* > objects1(featureBodies.size());
            for (unsigned int ii = 0; ii < featureBodies.size(); ++ii)
            {
                objects1[ii] = featureBodies[ii];
            }
            displayModification1->Apply(objects1);
            delete displayModification1;
        }
    }
    //获取布尔值
    void ExtrudewithPreview::setBoolean(bool value)
    {
        NXOpen::BlockStyler::PropertyList* SectionToExtrudeproplist = SectionToExtrude->GetProperties();
        SectionToExtrudeproplist->SetLogical("Enable", value);
        delete SectionToExtrudeproplist;
        SectionToExtrudeproplist = NULL;

        NXOpen::BlockStyler::PropertyList* DirectionToExtrudeproplist = DirectionToExtrude->GetProperties();
        DirectionToExtrudeproplist->SetLogical("Enable", value);
        delete DirectionToExtrudeproplist;
        DirectionToExtrudeproplist = NULL;

        NXOpen::BlockStyler::PropertyList* StartLimitproplist = StartLimit->GetProperties();
        StartLimitproplist->SetLogical("Enable", value);
        delete StartLimitproplist;
        StartLimitproplist = NULL;

        NXOpen::BlockStyler::PropertyList* EndLimitproplist = EndLimit->GetProperties();
        EndLimitproplist->SetLogical("Enable", value);
        delete EndLimitproplist;
        EndLimitproplist = NULL;

        NXOpen::BlockStyler::PropertyList* PreviewToggleproplist = PreviewToggle->GetProperties();
        PreviewToggleproplist->SetLogical("Enable", value);
        delete PreviewToggleproplist;
        PreviewToggleproplist = NULL;
    }   
    //转换
    NXString ExtrudewithPreview::doubleToNXString(double value)
    {
        stringstream tmpValue;
        tmpValue << setprecision(16) << value;
        return NXString(tmpValue.str());
    }
    NXString ExtrudewithPreview::intToNXString(int value)
    {
        stringstream tmpValue;
        tmpValue << setprecision(16) << value;
        return NXString(tmpValue.str());
    }

     

    怡宁塑胶模具设计
  • 相关阅读:
    精品博文
    updat.vbs u盘病毒
    望远镜对科技发展的影响极其深远,有了望远镜之后,人类才知道世界是怎样的。大数据就是帮你看到一个大到你以前根本看不到的世界。
    通过显微镜,人们又看到了一个活生生的但是肉眼看不到的世界。透过成千上万的点击数据,在线世界也就变得更为鲜活,更有意义了。
    如果能够提前10分钟知道飞机在哪里,结果就会大不一样,这就是雷达的价值。数据也可以帮助你做到这一点。过去国家想要知道进出口贸易的情况,要查看海关的数据,但这个数据实际上是事情发生了很久以后才汇总的数据。但阿里巴巴的国际贸易数据是不一样的,从第一天买家询盘开始你就可以预测会发生什么。
    我曾对员工讲,我们做阿里云计算平台,要努力做到让创业者发自内心地相信,在阿里云计算平台上创新、创业,照样可以做成上市公司,甚至会比阿里巴巴还要厉害。有了这样的信任度,云计算才能真正做起来。
    纸币的出现是货币发展过程中极其重要的里程碑,因为的价值体现已不是贵金属的重量,而是信用,信用成为真正的财富。古人可以信任在一张纸上盖个章就代表财富,实在是太需要勇气了,这也是信任度极高的表现。
    云解放了计算机这台机器,让计算的能力彻底从一个箱子里释放出来,回归了计算的本质。
    如何区分云计算和非云计算,首先得看它的核心本质——计算是否在线,计算的使用是否通过互联网完成。我从在阿里巴巴做云计算的第一天开始,就告诉自己:“云计算是一个社会最基础的公共服务,就像电一样。”
    私有云的热衷者利用大家对安全的担心向人们兜售硬件和软件产品,但事实上一旦你的计算设备连上网络,所有人面临的安全问题都是一模一样的,正如对交流电打压最凶的人,不是用电的人,而是发明电的人。
  • 原文地址:https://www.cnblogs.com/hqsalanhuang/p/14406859.html
Copyright © 2011-2022 走看看