Change Color of Component in Specific Display State Example (C#)

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

using SolidWorks.Interop.sldworks;
using SolidWorks.Interop.swconst;
using System.Runtime.InteropServices;



namespace test
{
    class Program
    {

        /// <summary>
        /// The SldWorks swApp variable is pre-assigned for you.
        /// </summary>
        public static SldWorks swApp;
        static void Main(string[] args)
        {

            ConnectSw();
            ModelDoc2 swModelDoc = null;
            ModelDocExtension swModelDocExt = null;
            SelectionMgr swSelMgr = null;
            DisplayStateSetting swDisplayStateSetting = null;
            Component2 swComponent = null;
            Component2[] swComponents = new Component2[1];
            string[] displayStateNames = new string[1];
            object appearances = null;
            object[] appearancesArray = null;
            AppearanceSetting swAppearanceSetting = default(AppearanceSetting);
            AppearanceSetting[] newAppearanceSetting = new AppearanceSetting[1];
            ConfigurationManager swConfigMgr = default(ConfigurationManager);
            Configuration swConfig = default(Configuration);
            bool status = false;
            int errors = 0;
            int warnings = 0;
            string fileName = "";
            int red_rgb = 0;
            int green_rgb = 0;
            int blue_rgb = 0;
            int newColor = 0;

            //Open assembly document
            fileName = "D:\\C# SolidWorks Tools\\tutorial\\appearances\\usb_flash_drive1.sldasm";
            swModelDoc = (ModelDoc2)swApp.OpenDoc6(fileName, (int)swDocumentTypes_e.swDocASSEMBLY, (int)swOpenDocOptions_e.swOpenDocOptions_Silent, "", ref errors, ref warnings);

            System.Diagnostics.Debugger.Break();
            //Examine the graphics area
            //Press F5 to continue

            //Select component, USB_cover1
            swModelDocExt = (ModelDocExtension)swModelDoc.Extension;
            swSelMgr = (SelectionMgr)swModelDoc.SelectionManager;
            status = swModelDocExt.SelectByID2("USB_cover1-1@usb_flash_drive1", "COMPONENT", 0, 0, 0, false, 0, null, 0);
            swComponent = (Component2)swSelMgr.GetSelectedObject6(1, -1);
            swComponents[0] = swComponent;

            swModelDoc.ClearSelection2(true);

            //Get display state 
            swDisplayStateSetting = (DisplayStateSetting)swModelDocExt.GetDisplayStateSetting((int)swDisplayStateOpts_e.swAllDisplayState);
            swDisplayStateSetting.Entities = swComponents;
            swDisplayStateSetting.Option = (int)swDisplayStateOpts_e.swSpecifyDisplayState;
            displayStateNames[0] = "Display State-1";
            swDisplayStateSetting.Names = displayStateNames;
            //Assembly level is default
            swDisplayStateSetting.PartLevel = false;

            //Change the selected component's, USB_cover1, 
            //assembly-level color from the default red
            //to gray in the specified display state; this
            //is the overriding color level
            appearances = (object)swModelDocExt.get_DisplayStateSpecMaterialPropertyValues(swDisplayStateSetting);
            appearancesArray = (object[])appearances;
            swAppearanceSetting = (AppearanceSetting)appearancesArray[0];
            red_rgb = 50;
            green_rgb = 50;
            blue_rgb = 50;
            newColor = Math.Max(Math.Min(red_rgb, 255), 0) + Math.Max(Math.Min(green_rgb, 255), 0) * 16 * 16 + Math.Max(Math.Min(blue_rgb, 255), 0) * 16 * 16 * 16 * 16;
            swAppearanceSetting.Color = newColor;
            newAppearanceSetting[0] = (AppearanceSetting)swAppearanceSetting;
            swModelDocExt.set_DisplayStateSpecMaterialPropertyValues(swDisplayStateSetting, newAppearanceSetting);

            System.Diagnostics.Debugger.Break();
            //Examine the component in the graphics area
            //Press F5 to continue

            swModelDoc.ClearSelection2(true);

            status = swModelDocExt.SelectByID2("USB_cover1-1@usb_flash_drive1", "COMPONENT", 0, 0, 0, false, 0, null, 0);
            swComponent = (Component2)swSelMgr.GetSelectedObject6(1, -1);
            swComponents[0] = (Component2)swComponent;

            swModelDoc.ClearSelection2(true);

            //Get display state
            swDisplayStateSetting = swModelDocExt.GetDisplayStateSetting((int)swDisplayStateOpts_e.swAllDisplayState);
            swDisplayStateSetting.Entities = swComponents;
            swDisplayStateSetting.Option = (int)swDisplayStateOpts_e.swSpecifyDisplayState;
            displayStateNames[0] = "<Default>_Display State 1";
            swDisplayStateSetting.Names = displayStateNames;
            //Set to part level
            swDisplayStateSetting.PartLevel = true;

            //Change the selected component's, USB_cover1, part-level
            //color from red to green in the specified display state of
            //the component part; this is not the overriding color level
            appearances = (object)swModelDocExt.get_DisplayStateSpecMaterialPropertyValues(swDisplayStateSetting);
            appearancesArray = (object[])appearances;
            swAppearanceSetting = (AppearanceSetting)appearancesArray[0];
            red_rgb = 0;
            green_rgb = 255;
            blue_rgb = 0;
            newColor = Math.Max(Math.Min(red_rgb, 255), 0) + Math.Max(Math.Min(green_rgb, 255), 0) * 16 * 16 + Math.Max(Math.Min(blue_rgb, 255), 0) * 16 * 16 * 16 * 16;
            swAppearanceSetting.Color = newColor;
            newAppearanceSetting[0] = swAppearanceSetting;
            swModelDocExt.set_DisplayStateSpecMaterialPropertyValues(swDisplayStateSetting, newAppearanceSetting);


            //Close the assembly document without saving
            //changes
            swApp.CloseDoc("usb_flash_drive1");

            //Open the assembly component USB_cover1 as a part document
            fileName = "D:\\C# SolidWorks Tools\\tutorial\\appearances\\usb_cover1.sldprt";
            swModelDoc = (ModelDoc2)swApp.OpenDoc6(fileName, (int)swDocumentTypes_e.swDocPART, (int)swOpenDocOptions_e.swOpenDocOptions_Silent, "", ref errors, ref warnings);
            swModelDocExt = (ModelDocExtension)swModelDoc.Extension;
            swConfigMgr = (ConfigurationManager)swModelDoc.ConfigurationManager;
            swConfig = (Configuration)swConfigMgr.ActiveConfiguration;

            swComponents[0] = null;
            swComponents[0] = swConfig.GetRootComponent3(true);

            swModelDoc.ClearSelection2(true);

            //Get display state
            swDisplayStateSetting = null;
            swDisplayStateSetting = (DisplayStateSetting)swModelDocExt.GetDisplayStateSetting((int)swDisplayStateOpts_e.swAllDisplayState);
            swDisplayStateSetting.Entities = swComponents;
            swDisplayStateSetting.Option = (int)swDisplayStateOpts_e.swSpecifyDisplayState;
            displayStateNames[0] = "<Default>_Display State 1";
            swDisplayStateSetting.Names = displayStateNames;

            System.Diagnostics.Debugger.Break();
            //Examine the graphics area
            //Press F5 to continue

            //Change color of selected component in specified display state
            //from default red to green; this is the overriding color
            appearances = (object)swModelDocExt.get_DisplayStateSpecMaterialPropertyValues(swDisplayStateSetting);
            appearancesArray = (object[])appearances;
            swAppearanceSetting = (AppearanceSetting)appearancesArray[0];
            red_rgb = 0;
            green_rgb = 255;
            blue_rgb = 0;
            newColor = Math.Max(Math.Min(red_rgb, 255), 0) + Math.Max(Math.Min(green_rgb, 255), 0) * 16 * 16 + Math.Max(Math.Min(blue_rgb, 255), 0) * 16 * 16 * 16 * 16;
            swAppearanceSetting.Color = newColor;
            newAppearanceSetting[0] = swAppearanceSetting;
            swModelDocExt.set_DisplayStateSpecMaterialPropertyValues(swDisplayStateSetting, newAppearanceSetting);

            System.Diagnostics.Debugger.Break();
            //Examine the graphics area
            //Press F5 to continue

            //Close the part document without saving
            //changes
            swApp.CloseDoc("usb_cover1");

        }

        public static void ConnectSw()

        {

            //尝试连接已打开的Solidworks

            if (swApp == null)

            {

                Process[] processArr = null;

                processArr = Process.GetProcessesByName("SLDWORKS");

                if (processArr.Length > 0)

                {

                    //通过SldWorks.Application方式

                    try

                    {

                        swApp = (SldWorks)Marshal.GetActiveObject("SldWorks.Application");

                    }

                    catch (Exception)

                    {



                    }

                    //通过SldWorks.Application.18方式,.18=2010版,.19=2011版,.20=2012版,.21=2013版,.22=2014版,.23=2015版

                    if (swApp == null)

                    {

                        for (int i = 18; i < 28; i++)

                        {

                            try

                            {

                                swApp = (SldWorks)Marshal.GetActiveObject("SldWorks.Application." + i.ToString());

                                if (swApp != null)

                                {

                                    break;

                                }

                            }

                            catch (Exception)

                            {



                            }

                        }

                    }

                    //通过Guid的方式

                    if (swApp == null)//2010sw

                    {

                        try

                        {

                            Guid myGuid1 = new Guid("6894540C-3171-484F-9E97-6A962559BA30");

                            object processSW = System.Activator.CreateInstance(System.Type.GetTypeFromCLSID(myGuid1));

                            swApp = (SldWorks)processSW;

                        }

                        catch (Exception)

                        {



                        }

                    }

                    if (swApp == null)//2012sw

                    {

                        try

                        {

                            Guid myGuid1 = new Guid("B4875E89-91F6-4124-BB63-2539727E98FA");

                            object processSW = System.Activator.CreateInstance(System.Type.GetTypeFromCLSID(myGuid1));

                            swApp = (SldWorks)processSW;

                        }

                        catch (Exception)

                        {



                        }

                    }

                    //通过SldWorks.ISldWorks方式

                    if (swApp == null)

                    {

                        try

                        {

                            swApp = (SldWorks)Marshal.GetActiveObject("SldWorks.ISldWorks");

                        }

                        catch (Exception)

                        {



                        }

                    }

                }

            }

            //尝试连接注册表中注册的solidworks,可未打开状态,SldWorksClass() 方式

            if (swApp == null)

            {

                //try

                //{

                //  swApp = new SldWorksClass();

                //}

                //catch (Exception)

                //{



                //}

            }

            //SldWorks()方式连接

            if (swApp == null)

            {

                try

                {

                    swApp = new SldWorks();

                }

                catch (Exception)

                {



                }

            }

            //连接成功,使solidworks可见

            if (swApp != null)

            {

                if (!swApp.Visible)

                {

                    try

                    {

                        swApp.Visible = true;

                    }

                    catch

                    {

                        swApp = null;

                    }

                }

            }

            //连接失败

            if (swApp == null)

            {

                throw new Exception("无法连接到Solidworks,请检查!");

            }

        }
    }
}
以下是对提供的参考资料的总结,按照要求结构化多个要点分条输出: 4G/5G无线网络优化与网规案例分析: NSA站点下终端掉4G问题:部分用户反馈NSA终端频繁掉4G,主要因终端主动发起SCGfail导致。分析显示,在信号较好的环境下,终端可能因节能、过热保护等原因主动释放连接。解决方案建议终端侧进行分析处理,尝试关闭节电开关等。 RSSI算法识别天馈遮挡:通过计算RSSI平均值及差值识别天馈遮挡,差值大于3dB则认定有遮挡。不同设备分组规则不同,如64T和32T。此方法可有效帮助现场人员识别因环境变化引起的网络问题。 5G 160M组网小区CA不生效:某5G站点开启100M+60M CA功能后,测试发现UE无法正常使用CA功能。问题原因在于CA频点集标识配置错误,修正后测试正常。 5G网络优化与策略: CCE映射方式优化:针对诺基亚站点覆盖农村区域,通过优化CCE资源映射方式(交织、非交织),提升RRC连接建立成功率和无线接通率。非交织方式相比交织方式有显著提升。 5G AAU两扇区组网:与三扇区组网相比,AAU两扇区组网在RSRP、SINR、下载速率和上传速率上表现不同,需根据具体场景选择适合的组网方式。 5G语音解决方案:包括沿用4G语音解决方案、EPS Fallback方案和VoNR方案。不同方案适用于不同的5G组网策略,如NSA和SA,并影响语音连续性和网络覆盖。 4G网络优化与资源利用: 4G室分设备利旧:面对4G网络投资压减与资源需求矛盾,提出利旧多维度调优策略,包括资源整合、统筹调配既有资源,以满足新增需求和提质增效。 宏站RRU设备1托N射灯:针对5G深度覆盖需求,研究使用宏站AAU结合1托N射灯方案,快速便捷地开通5G站点,提升深度覆盖能力。 基站与流程管理: 爱立信LTE基站邻区添加流程:未提供具体内容,但通常涉及邻区规划、参数配置、测试验证等步骤,以确保基站间顺畅切换和覆盖连续性。 网络规划与策略: 新高铁跨海大桥覆盖方案试点:虽未提供详细内容,但可推测涉及高铁跨海大桥区域的4G/5G网络覆盖规划,需考虑信号穿透、移动性管理、网络容量等因素。 总结: 提供的参考资料涵盖了4G/5G无线网络优化、网规案例分析、网络优化策略、资源利用、基站管理等多个方面。 通过具体案例分析,展示了无线网络优化中的常见问题及解决方案,如NSA终端掉4G、RSSI识别天馈遮挡、CA不生效等。 强调了5G网络优化与策略的重要性,包括CCE映射方式优化、5G语音解决方案、AAU扇区组网选择等。 提出了4G网络优化与资源利用的策略,如室分设备利旧、宏站RRU设备1托N射灯等。 基站与流程管理方面,提到了爱立信LTE基站邻区添加流程,但未给出具体细节。 新高铁跨海大桥覆盖方案试点展示了特殊场景下的网络规划需求。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值