首页 > 其他分享 >CAD二次开发之 会旋转的彩色风车

CAD二次开发之 会旋转的彩色风车

时间:2023-07-25 18:13:31浏览次数:35  
标签:center 风车 2d var radius 二次开发 new Point3d CAD

 

 

/// <summary>
        /// 会旋转的风车
        /// </summary>
        [CommandMethod("RotatingFan")]
        public void RotatingFan()
        {
            var doc = Application.DocumentManager.MdiActiveDocument;
            var db = doc.Database;
            ObjectId id;
            BlockTableRecord btr = new BlockTableRecord();
            double radius = 500;
            double rad2deg = Math.PI / 180;
            Point3d center = Point3d.Origin;
            using (var lockDoc = doc.LockDocument())
            {


                using (var tr = db.TransactionManager.StartTransaction())
                {

                    Circle circle = new Circle(center, Vector3d.ZAxis, radius);
                    Line line1 = new Line(new Point3d(center.X - radius, center.Y, 0), new Point3d(center.X + radius, center.Y, 0));
                    Line line2 = new Line(new Point3d(center.X, center.Y - radius, 0), new Point3d(center.X, center.Y + radius, 0));
                    Arc arc1 = new Arc(new Point3d(center.X + radius / 2, center.Y, 0), Vector3d.ZAxis, radius / 2, 0 * rad2deg, 180 * rad2deg);
                    Arc arc2 = new Arc(new Point3d(center.X - radius / 2, center.Y, 0), Vector3d.ZAxis, radius / 2, 180 * rad2deg, 360 * rad2deg);
                    Arc arc3 = new Arc(new Point3d(center.X, center.Y + radius / 2, 0), Vector3d.ZAxis, radius / 2, 90 * rad2deg, 270 * rad2deg);
                    Arc arc4 = new Arc(new Point3d(center.X, center.Y - radius / 2, 0), Vector3d.ZAxis, radius / 2, 270 * rad2deg, 450 * rad2deg);
                    arc1.ColorIndex = 1;
                    arc2.ColorIndex = 2;
                    arc3.ColorIndex = 3;
                    arc4.ColorIndex = 4;
                    btr.AppendEntity(circle);
                    btr.AppendEntity(line1);
                    btr.AppendEntity(line2);
                    btr.AppendEntity(arc1);
                    btr.AppendEntity(arc2);
                    btr.AppendEntity(arc3);
                    btr.AppendEntity(arc4);


                    var bt = tr.GetObject(db.BlockTableId, OpenMode.ForWrite) as BlockTable;
                    id = bt.Add(btr);
                    tr.AddNewlyCreatedDBObject(btr, true);


                    var ms = tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite) as BlockTableRecord;
                    var br = new BlockReference(new Point3d(100, 100, 0), id);
                    id = ms.AppendEntity(br);
                    tr.AddNewlyCreatedDBObject(br, true);


                    tr.Commit();


                    using (ViewTableRecord view = new ViewTableRecord())
                    {
                        db.UpdateExt(true);
                        Point3d max = db.Extmax;
                        Point3d min = db.Extmin;
                        Point2d max_2d = new Point2d(max.X, max.Y);
                        Point2d min_2d = new Point2d(min.X, min.Y);
                        view.CenterPoint = new Point2d(min_2d.X + (max_2d.X - min_2d.X) / 2, min_2d.Y + (max_2d.Y - min_2d.Y) / 2);
                        view.Height = (max_2d.Y - min_2d.Y);
                        view.Width = (max_2d.X - min_2d.X);
                        doc.Editor.SetCurrentView(view);
                        db.UpdateExt(true);
                    }
                }

            }
            //采用50Hz更新速率,每帧20ms
            int fps = 50;
            int frame = 1000 / fps;
            //基准速度0.01度每帧,也就是5度每秒
            double baseSpeed = 0.01;
            //可以通过调整速度系数,来调整旋转速率
            double speedFactor = 1;
            bool rotated = false;

            while (true)
            {
                var seconds = DateTime.Now.Millisecond;
                if (seconds % 20 == 0 && rotated == false)
                {
                    using (var lockDoc = doc.LockDocument())
                    {

                        using (var tr = db.TransactionManager.StartTransaction())
                        {
                            var br = tr.GetObject(id, OpenMode.ForWrite) as BlockReference;
                            br.Rotation += baseSpeed* speedFactor;
                            br.Rotation %= 360;
                            tr.Commit();
                        }

                    }

                    doc.Editor.UpdateScreen();
                    rotated = true;
                }
                if (seconds % 20 != 0 && rotated == true)
                {
                    rotated = false;
                }

            }
        }

 

标签:center,风车,2d,var,radius,二次开发,new,Point3d,CAD
From: https://www.cnblogs.com/zhangdezhang/p/17580540.html

相关文章

  • IfcAdvancedFace
    IfcAdvancedFace实体定义高级面是面曲面的专业化,必须满足使用特定拓扑和几何表示项定义面、边和顶点的要求。 IfcAdvancedFace仅限于: 具有IfcElementarySurface、IfcWeptSurface或IfcBSplineSurface类型的面曲面几何体,具有一个IfcFaceOuterBound作为面的边界,闭合曲面除外......
  • Revit二次开发之 PolymeshTopology
    PolymeshTopology 表示多边形网格拓扑的类,用于描述多边形的的图形信息。多边形网格的拓扑结构由多个点和由这些点形成的三角形面组成。每个方面由点阵列的三个索引来确定。多边形网格可以指定UV坐标,并且始终至少关联一个法线。非平面多边形网格可能有一个以上的法线可用;多边形网......
  • 如何在AutoCAD中加载数据库的空间数据?
    在AutoCAD中加载矢量数据是一个非常有用的功能,它可以帮助用户将多种不同格式的数据集合在一个平台上进行分析和编辑。按照以下步骤可快速在AutoCAD中加载数据库中的空间数据,支持SQLServer、MySQL、PostgreSQL。方法/步骤下载并安装GIS4CAD插件http://www.geosaas.com/downloa......
  • VTK+OCC显示CAD模型
    VTK是一款十分优秀的可视化套件,开源且功能强大,基本上可以满足有限元领域的全部可视化需求。遗憾的是,VTK不支持CAD模型(如igs、stp格式的模型)的显示。在网上搜索后可以发现,在不花钱的情况下,想要显示和处理CAD模型,基本上都得使用OpenCasCade,即OCC。OCC有自己的可视化系统,也可以集成......
  • 《Language Model Cascades》论文学习
    一、Introduction语言模型(LM)已展现出令人印象深刻的小样本学习能力,很多人建议应该将LM视为一个基础通用推理计算器,这个基础通用推理计算器可以被用于例如:scratchpadschainofthoughtpromptinglearnedverifiersselection-inferencebootstrappingbeenappliedinfor......
  • CAD应用实践
     CAD应用:DATAEXTRACTION:如果将数据提取到表格;ME:等分多段线;PL:多段线命令;list:提取多段线端点坐标;  ......
  • CAD设置尺寸标注箭头样式无效
    情况一,新增的标注设置箭头样式后,添加到图纸中此处无变化解决方法:先添加到图纸中,再修改情况二,按情况一操作后,此处箭头变了,但实际显示不变解决方法:1、尝试修改Dimasz属性的大小2、将Dimsah属性设置为true3、Dimtsz属性设置为0......
  • 在线CAD如何配合three.js绘制带线宽的线段
    前言1.在线CAD的产品经常会被集成到很多用户的网页系统内,前端开发人员只要会JavaScript,就可以对在线CAD进行集成和二次开发,今天这篇文章我们讲一下梦想CAD控件云图(H5方式)如何配合three.js绘制带线宽的线段。2.在这之前,如果还没有安装梦想CAD控件的朋友,可以查看快速入门,链接如......
  • Revit二次开发-创建用户只读的共享参数
      在族环境里面绑定共享参数,并且用户在属性面板不可修改参数值[Transaction(TransactionMode.Manual)]publicclassSharedParameters:IExternalCommand{privatereadonlystring_desktop=Environment.GetFolderPath(Environment.SpecialFolder.Desk......
  • 微信个人号机器人,E云API二次开发
    **个人微信开发API****简要描述:**-登录E云平台**请求URL:**-http://域名地址/member/login-域名地址+开发者账号密码:后台系统自助开通**请求方式:**-POST**请求头Headers:**-Content-Type:application/json  **请求参数示例**```clike{"account":"18611......