c# solidworks 创建装配体工程图+bom

csharp 复制代码
using System;
using System.IO;
using SolidWorks.Interop.sldworks;
using View = SolidWorks.Interop.sldworks.View;

namespace tools
{
    /// <summary>装配体工程图视图创建(斜二测等)。</summary>
    public static class asm_drawing_views
    {
        /// <summary>斜二测(Dimetric / 二等角三角法)视角;依次尝试中文/英文模型视图名。</summary>
        public static View? CreateDimetricView(DrawingDoc drawingDoc, string modelPath, double x, double y)
        {
            string[] viewNames =
            {
                "*斜二测",
                "*斜二测视",
                "*二等角三角法",
                "*Dimetric",
            };

            foreach (string viewName in viewNames)
            {
                View? view = drawingDoc.CreateDrawViewFromModelView3(modelPath, viewName, x, y, 0);
                if (view != null)
                {
                    Console.WriteLine($"已创建斜二测视图({viewName})模型={Path.GetFileName(modelPath)}");
                    return view;
                }
            }

            Console.WriteLine(
                $"警告:斜二测视图创建失败,模型={Path.GetFileName(modelPath)},已尝试:*斜二测 / *斜二测视 / *二等角三角法 / *Dimetric");
            return null;
        }

        /// <summary>1008 装配体工程图主视图:*等轴侧(中文 SW 标准名)。</summary>
        public static View? CreateAssemblyMainView(DrawingDoc drawingDoc, string modelPath, double x, double y)
        {
            string[] viewNames =
            {
                "*等轴侧",
                "*等轴测",
                "*Isometric",
            };

            foreach (string viewName in viewNames)
            {
                View? view = drawingDoc.CreateDrawViewFromModelView3(modelPath, viewName, x, y, 0);
                if (view != null)
                {
                    Console.WriteLine($"已创建装配体主视图({viewName})模型={Path.GetFileName(modelPath)}");
                    return view;
                }
            }

            Console.WriteLine(
                $"错误:装配体主视图创建失败,模型={Path.GetFileName(modelPath)},已尝试:*等轴侧 / *等轴测 / *Isometric");
            return null;
        }

        private const double AssemblyMainViewScaleMultiplier = 1.5;

        /// <summary>将视图比例设为图纸比例的 <see cref="AssemblyMainViewScaleMultiplier"/> 倍(模型显示更大)。</summary>
        public static void ApplyDocumentScaleMultiplier(View view)
        {
            double before = view.ScaleDecimal;
            // ScaleDecimal ≤1 为小数比例(1:5→0.2);>1 为比例分母(1:5→5)
            if (before > 1.0)
            {
                view.ScaleDecimal = before / AssemblyMainViewScaleMultiplier;
            }
            else if (before > 0)
            {
                view.ScaleDecimal = before * AssemblyMainViewScaleMultiplier;
            }

            Console.WriteLine(
                $"视图 {view.Name} 比例 ScaleDecimal: {before} -> {view.ScaleDecimal}(文档比例 {AssemblyMainViewScaleMultiplier} 倍)");
        }
    }
}
相关推荐
apcipot_rain10 小时前
C++转Java日记(03)
java·开发语言·c++
布莱克60510 小时前
C++ 中 map 的 insert 与 emplace:key 已存在时会覆盖吗?
开发语言·数据结构·c++·算法·map
xys_67811 小时前
深挖C++:类和对象(中)
开发语言·c++
灿飞屋11 小时前
Rust 编程其实很简单
开发语言·rust
MOONICK13 小时前
QT元数据
开发语言·qt
D e re k ZH13 小时前
C++ 系统学习手记:从语法细节到工程实践
开发语言·数据结构·c++·算法
灿飞屋14 小时前
Kotlin与Java虚拟机三:控制流
android·java·开发语言·后端·python·kotlin·安卓
xiaoye-duck14 小时前
《C++ 项目:手写大模型接入 SDK》Ollama接口设计(上):初始化、全量响应实现和测试
开发语言·网络·c++·语言模型
总要学点什么15 小时前
第98篇:三维特效-材质线效果——给一条线换十种材质,虚线的图案只填了一半
开发语言·前端·javascript·ecmascript·gis·webgl·材质
田甲16 小时前
做一款 Type-C 母座读卡器:GL3224 双卡方案实测
c语言·开发语言