明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2060|回复: 3

如何使用Jigs动态旋转实体?

[复制链接]
发表于 2011-9-29 08:02:19 | 显示全部楼层 |阅读模式
用了置顶里的方法
public void RotateEntity()
    {
      Document doc =
        Application.DocumentManager.MdiActiveDocument;
      Editor ed = doc.Editor;
      Database db = doc.Database;

      // First we prompt for the entity to rotate

      PromptEntityOptions peo =
        new PromptEntityOptions(
          "\nSelect entity to rotate: "
        );
      PromptEntityResult per =
        ed.GetEntity(peo);

      if (per.Status == PromptStatus.OK)
      {
        Transaction tr =
          db.TransactionManager.StartTransaction();
        using (tr)
        {
          DBObject obj =
            tr.GetObject(per.ObjectId, OpenMode.ForRead);
          Entity ent = obj as Entity;

          // Use the origin as the default center

          Point3d rotationPoint = Point3d.Origin;

          // If the entity is a polyline,
          // assume it is rectangular and then
          // set the rotation point as its center

          Polyline pl = obj as Polyline;
          if (pl != null)
          {
            LineSegment3d ps0 =
              pl.GetLineSegmentAt(0);
            LineSegment3d ps1 =
              pl.GetLineSegmentAt(1);
            Vector3d vec =
              ((ps0.EndPoint - ps0.StartPoint) / 2.0) +
              ((ps1.EndPoint - ps1.StartPoint) / 2.0);
            rotationPoint = pl.StartPoint + vec;
          }

          // Get the base rotation angle stored with the
          // entity, if there was one (default is 0.0)

          double baseAngle = GetStoredRotation(obj);

          if (ent != null)
          {
            // Get the current UCS, to pass to the Jig

            Matrix3d ucs =
              ed.CurrentUserCoordinateSystem;

            // Create our jig object

            RotateJig jig =
              new RotateJig(
                ent,
                rotationPoint,
                baseAngle,
                ucs
              );

            PromptResult res = ed.Drag(jig);
            if (res.Status == PromptStatus.OK)
            {
              // Get the overall rotation angle
              // and dispose of the temp clone

              double newAngle = jig.GetRotation();
              jig.GetEntity().Dispose();

              // Rotate the original entity

              Matrix3d trans =
                Matrix3d.Rotation(
                  newAngle - baseAngle,
                  ucs.CoordinateSystem3d.Zaxis,
                  rotationPoint);

              ent.UpgradeOpen();
              ent.TransformBy(trans);

              // Store the new rotation as XData

              SetStoredRotation(ent, newAngle);
            }
          }
          tr.Commit();
        }
      }
    }
但没有动态旋转效果,并且运行到ent.UpgradeOpen() 就退出了,我的实体是一个块图形
 楼主| 发表于 2011-9-29 15:21:04 | 显示全部楼层
没人知道么,谁有成功的例子啊?
 楼主| 发表于 2011-9-29 16:54:14 | 显示全部楼层
问下置顶里Jigs动态旋转实体是跟随鼠标移动而旋转么?
 楼主| 发表于 2011-9-29 17:10:57 | 显示全部楼层
为什么用RECTANG创建的矩形就可以,块图形就不行了呢,求高手帮帮忙啊!!!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 21:20 , Processed in 0.172082 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表