zoukankan      html  css  js  c++  java
  • CAD.NET调整属性块中文字宽度

    using System;
    using Autodesk.AutoCAD.ApplicationServices;
    using Autodesk.AutoCAD.DatabaseServices;
    using Autodesk.AutoCAD.EditorInput;
    using Autodesk.AutoCAD.Geometry;
    using Autodesk.AutoCAD.Runtime;

    [assembly: CommandClass(typeof(AttributeWidthFactor.MyCommands))]

    namespace AttributeWidthFactor
    {
        public class MyCommands
        {
            [CommandMethod("AttWidth")]
            public static void SetAttrWidthFactor()
            {
                Document dwg = Application.DocumentManager.MdiActiveDocument;
                Editor ed = dwg.Editor;

                //Pick an attributereference in a block
                PromptNestedEntityOptions opt = new 
                    PromptNestedEntityOptions(" Pick an attribute:");
                PromptNestedEntityResult res = ed.GetNestedEntity(opt);

                if (res.Status == PromptStatus.OK)
                {
                    if (res.ObjectId.ObjectClass.DxfName.ToUpper() == "ATTRIB")
                    {
                        //Ask user to pick a distance as desired width for 
                        //the attribute to fit in. Based on the block, the width 
                        //could be a known value
                        PromptPointOptions popt = new 
                            PromptPointOptions(" Pick width base point:");
                        PromptPointResult pres = ed.GetPoint(popt);
                        if (pres.Status != PromptStatus.OK) return;
                        Point3d basePt = pres.Value;

                        PromptDistanceOptions dopt = 
                            new PromptDistanceOptions(" Pick ");
                        dopt.UseBasePoint = true;
                        dopt.BasePoint = basePt;

                        PromptDoubleResult dres = ed.GetDistance(dopt);
                        if (dres.Status != PromptStatus.OK) return;

                        //This is the width we want to fit the attribute text's width
                        double w = dres.Value;

                        using (Transaction tran = 
                            dwg.TransactionManager.StartTransaction())
                        {
                            AttributeReference att = (AttributeReference)tran.GetObject(
                                res.ObjectId, OpenMode.ForWrite);

                            //Get attribute's width, assuming it is placed horizontally
                            double aw = Math.Abs(att.GeometricExtents.MaxPoint.X 
                                - att.GeometricExtents.MinPoint.X);

                            //This is the WidthFactor
                            double factor = w / aw;
                            att.WidthFactor = factor;

                            tran.Commit();
                        }
                    }
                    else
                    {
                        Application.ShowAlertDialog("Not an attribute!");
                    }
                }
            }
        }
    }

  • 相关阅读:
    第 9 章 用户自己建立数据类型
    第 10 章 对文件的输入输出
    第 7 章 用函数实现模块化程序设计
    第 4 章 选择结构程序设计
    第 5 章 循环结构程序设计
    第 6 章 利用数组处理批量数据
    第 3 章 最简单的 C 程序设计——顺序程序设计
    第 1 章 程序设计和 C 语言
    第 2 章 算法——程序的灵魂
    SQL(SQL Server) 批量替换两列的数据
  • 原文地址:https://www.cnblogs.com/swtool/p/3832332.html
Copyright © 2011-2022 走看看