首页 > 其他分享 >从样板文件中导入样式到当前文档

从样板文件中导入样式到当前文档

时间:2023-11-26 09:56:25浏览次数:24  
标签:Styles 样式 doc Civil 导入 文档 样板 styleName

2023年11月24日

QQ群友提出一个问题:

SectionViewStyle的个别属性值无法获取,

从而无法进行修改,

开放的API中确实没有响应的枚举类型,

从而无法使用SectionViewStyle.GetDisplayStylePlan()这个方法获取到DisplayStyle,

于是我提出了采用导入样式的方法,

提前准备好自己的样板文件,

在样板文件中根据自己的需求设置好样式的属性值,

之后导入到当前的图形中,

替换现有的样式。

 

当前图形中有哪些样式,

这个要跟创建图形时使用的样板有关系,

如果使用的是AutoCAD的样板文件,

而不是Civil 3D的样板文件,

有些样式名称很可能是"标准"(中文版软件)。

 

上述的导入操作涉及到两个数据,

除了当前的文档数据之外,

还要打开已有的样板文件,

操作稍微复杂一些,

我整理了一下去年些的测试代码,

在此分享给大家。

// 样本文件,放置到dll文件夹位置
private static string styleDwgName = "\\Template\\样式.dwg";

/// <summary>
/// 2022年4月27日 Author:Myzw
/// 
/// </summary>
[CommandMethod("LandDesign", "SETest", "SETest", CommandFlags.Modal, null, "LandDesign", "IDH_SETest")]
public void C_SETest()
{
    string styleName = "标准";
    // 指定需要导入到当前文件内的样式
    if (ExportStyle(typeof(Autodesk.Civil.DatabaseServices.Styles.SectionViewStyle), styleName))
    {
        Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage("\n样式:“{0}”成功导入到当前文档!",styleName);
    }
}
/// <summary>
/// 从样板文件中导出样式到当前文档
/// </summary>
/// <param name="type">样式类型</param>
/// <param name="styleName">样式名称</param>
/// <returns></returns>
public static bool ExportStyle(Type type, string styleName)
{
    bool flag = false;
    CivilDocument doc = null;
    // 注意目标文档是当前打开的文件
    Database destDb = Application.DocumentManager.MdiActiveDocument.Database;
    if (destDb == null) return false;

    string path = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location) + styleDwgName;
    if (!File.Exists(path))
    {
        System.Windows.MessageBox.Show("样式.dwg 文件不存在!");
        return false;
    }
    using (Database db = new Database(false, true))
    {
        db.ReadDwgFile(path, FileOpenMode.OpenForReadAndReadShare, false, "");
        doc = CivilDocument.GetCivilDocument(db);
        if (doc == null)
        {
            return false;
        }

        using (Transaction ts = db.TransactionManager.StartTransaction())
        {
            switch (type.Name)
            {
                // 这里根据自己所需的样式类型添加case块
                case "CodeSetStyle":
                    if (doc.Styles.CodeSetStyles.Contains(styleName))
                    {
                        CodeSetStyle codeSetStyle = ts.GetObject(doc.Styles.CodeSetStyles[styleName], OpenMode.ForRead) as CodeSetStyle;
                        codeSetStyle.ExportTo(destDb, Autodesk.Civil.StyleConflictResolverType.Override);
                        flag = true;
                    }
                    break;
                case "ProfileViewStyle":
                    if (doc.Styles.ProfileViewStyles.Contains(styleName))
                    {
                        ProfileViewStyle profileViewStyle = ts.GetObject(doc.Styles.ProfileViewStyles[styleName], OpenMode.ForRead) as ProfileViewStyle;
                        profileViewStyle.ExportTo(destDb, Autodesk.Civil.StyleConflictResolverType.Override);
                        flag = true;
                    }
                    break;
                case "SectionViewStyle":
                    Autodesk.Civil.DatabaseServices.Styles.SectionViewStyle sectionViewStyle = ts.GetObject(doc.Styles.SectionViewStyles[styleName],
                        OpenMode.ForRead) as Autodesk.Civil.DatabaseServices.Styles.SectionViewStyle;
                    // 存在同名样式时,以覆盖的方式进行导入。
                    sectionViewStyle.ExportTo(destDb, Autodesk.Civil.StyleConflictResolverType.Override);
                    flag = true;
                    break;
            }
            ts.Abort();
        }
    }
    return flag;
}

 

标签:Styles,样式,doc,Civil,导入,文档,样板,styleName
From: https://www.cnblogs.com/myzw/p/17856559.html

相关文章

  • docker导出、导入
    先来看看我们在运行的容器:#dockerps导出容器:#dockerexporte96a98d5902c>ubuntu14_ruby2.tar.gz导入到本地镜像:#dockerimportubuntu14_ruby2.tar.gz查看本地镜像:#dockerimages这个没有tag的就是我们刚刚导入的,现在我们给他打一个tag:#dockertagfd2e33845352ubuntu14_ruby2:......
  • 如何使用JMeter测试导入接口/导出接口
    今天一上班,被开发问了一个问题:JMeter调试接口,文件导入接口怎么老是不通?还有导出文件接口,不知道文件导到哪里去了?我一听,这不是JMeter做接口测试经常遇到的嘛,但是一时半会又口述不清楚,于是整理篇文章做个简单总结吧。JMeter测试导入接口1.填写导入接口信息2.设置导入文件名称及......
  • 基于python的计算机网络在线考试系统-计算机毕业设计源码+LW文档
    摘 要现代经济快节奏发展以及不断完善升级的信息化技术,让传统数据信息的管理升级为软件存储,归纳,集中处理数据信息的管理方式。本基于python的计算机网络在线考试系统就是在这样的大环境下诞生,其可以帮助管理者在短时间内处理完毕庞大的数据信息,使用这种软件工具可以帮助管理人员......
  • 汽车租赁管理网站-计算机毕业设计源码+LW文档
    摘 要社会发展日新月异,用计算机应用实现数据管理功能已经算是很完善的了,但是随着移动互联网的到来,处理信息不再受制于地理位置的限制,处理信息及时高效,备受人们的喜爱。本次开发一套汽车租赁管理网站有管理员和用户两个角色。管理员功能有个人中心,用户管理,汽车品牌管理,汽车信息管......
  • python021餐厅点餐系统-计算机毕业设计源码+LW文档
    一、课题简介在信息技术逐渐渗入到生活各个方面的今天,互联网在我们的生活中扮演着越来越重要的角色。现在信息化技术不仅可以提高我们的工作效率,而且能有效的规避错误风险,节约人力成本。美食行业现如今也越来越利用信息化技术来提高点餐效率和质量,餐厅点餐管理系统现在也越来越被......
  • 基于python的旅游景点推荐系统-计算机毕业设计源码+LW文档
    摘要 随着科技和网络的进步,计算机技术与网络、生活贴和的更加紧密。需要依靠客户端的单机系统逐渐被淘汰,利用互联网可以处理大量数据的新型系统如雨后春笋般迅速发展起来。这类系统和信息化时代的同步发展对传统的办公管理方式造成了很大的压力。当今时代,信息数据是一切的根本,是......
  • 基于django的4s店客户管理系统-计算机毕业设计源码+LW文档
    摘 要 进入21世纪网络和计算机得到了飞速发展,并和生活进行了紧密的结合。目前,网络的运行速度以达到了千兆,覆盖范围更是深入到生活中的角角落落。这就促使管理系统的发展。网上办公可以实现远程处理事务,远程提交工作和随时追踪工作的状态。网上管理系统给人们带来前所未有的体......
  • Jmeter接口测试:jmeter导入和导出接口的处理
    JMeter测试导入接口利用Jmeter测试上传文件,首先可根据接口文档或者fiddler抓包分析文件上传的接口;如下图:以下是我通过fiddler所截取的文件上传的接口1、填写导入接口的信息查看文件上传栏下的填写信息:文件名称:导入文件的路径参数名称:fileMIME类型:为fiddler抓包的Content-......
  • 自动生成接口文档操作手册
    API文档自动化生成版本说明实测仅适用于Spring2.x版本,Spring3需要额外配置后端创建一个SpringWeb项目项目初始化srcmainjavacom.exampleconfigKnife4jConfig.javaentityEntity.javacontrollerEntityController.javaApplication.javar......
  • 西安体院篮球专项队训练现状及策略研究——论文文档
    摘 要:随着时代的进步,篮球已成为一项全民健身的活动。为了满足人们日益增长的需求,培养优秀的篮球运动员已成为当务之急。为此,提升运动员的训练水平和积极性显得尤为重要。只有通过不断努力,才能真正让他们的技术和实战水平达到最佳状态。通过问卷调查和因素分析法,我们对西安体育学......