SP3D c# 开发独立的exe

此方法避免了启动S3D的过程

可以下载源代码:

S3DReaderTest.

imageS3D.net API允许编写独立应用程序,即外部自动化TaskHost可执行文件。

在独立应用程序中可以编写哪些自动化?
检查自动化-检查对象/数据,并采取一些行动,如生成
报告文件/输出文件。
数据挖掘-对对象和相关对象进行一些数据处理/数据挖掘,
生成报告。
根据您的工作流程修改属性。
从内部数据库/系统访问数据并将此类数据加载到S3 D
对象
对类对象数据的模型/目录数据执行后台计划任务
分析/检查/修改。
在非交互式环境中创建S3 D对象

image

请注意,没有用户交互服务/组件(客户端服务)可以可用于此类独立应用程序。

这些仅适用于

互动环境。
您只能引用和使用中间层服务和组件。无论您是在运行S3D.net API,
交互式TaskHost,或在独立可执行文件中,底层
语义和关联框架仍在后台运行。S3D的这个“中央处理单元”持续监控和反应
根据指定的应用程序进行修改和简化更改元数据行为。
当你编写独立应用程序时,你必须照顾
连接到网站;(可以连接到默认上次打开的网站,或提供网站连接详情)
开设工厂;(可以获取可用工厂及其信息的列表)
设置活动权限组;(稍后的所有修改都将与此一起
权限组)
局限性:激活一种植物后,您无法切换到不同的植物。

代码部分

 static void Main(string[] args)
        {
            AddPath();
            var projectDbKey = $@"Software\Intergraph\Applications\Environments\CommonApp\ProjectDB";
            var s3dProjectDBInfor = Registry.CurrentUser.OpenSubKey(projectDbKey);
            var PhysicalName = s3dProjectDBInfor.GetValue("PhysicalName").ToString();
            var Schema = s3dProjectDBInfor.GetValue("Schema").ToString();
            var arrPhysicalName = PhysicalName.Split(new string[] { ";", "=" }, StringSplitOptions.RemoveEmptyEntries);
            var arrSchema = Schema.Split(new string[] { ";", "=" }, StringSplitOptions.RemoveEmptyEntries);

            SiteManager sm = MiddleServiceProvider.SiteMgr;
            var st = sm.ConnectSite(arrPhysicalName[1], arrPhysicalName[3], SiteManager.eDBProviderTypes.MSSQL, arrSchema[3]);
            st.OpenPlant(st.Plants.FirstOrDefault());
            foreach (BusinessObject ob in st.ActivePlant.PlantModel.RootSystem.SystemChildren)
            {
                Console.WriteLine(ob.ToString());
            }
            Console.ReadKey();
        }

        static void AddPath()
        {
            var paths = new string[]
            {
                "C:\\Program Files (x86)\\Smart3D\\GeometryTopology\\Runtime",
                "C:\\Program Files (x86)\\Smart3D\\Core\\Runtime"
            };
            var envVariables = Environment.GetEnvironmentVariable("Path");
            string[] strs = envVariables.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
            if (!strs.Contains(paths[0]))
            {
                Environment.SetEnvironmentVariable("Path", envVariables + ";" + paths[0]);
                envVariables = Environment.GetEnvironmentVariable("Path");
                strs = envVariables.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
            }
            if (!strs.Contains(paths[1]))
            {
                Environment.SetEnvironmentVariable("Path", envVariables + ";" + paths[1]);
                envVariables = Environment.GetEnvironmentVariable("Path");
                strs = envVariables.Split(new string[] { ";" }, StringSplitOptions.RemoveEmptyEntries);
            }
        }

注意 引用的dll的copy local属性设置为true。

 

image

最后运行效果如图所示

image

posted @ 2025-09-17 21:39  南胜NanSheng  阅读(59)  评论(1)    收藏  举报