机械cad2016 视图-缩放区域,对应的C# API

img

怎么用c# 为实体创建缩放区域,双击实体会弹出这个对话框。cad 机械般amtitle 绘制的标题栏图框,怎么用c# 修改缩放比例?

你这个是cad呀,有命令直接调比例

以下内容部分参考ChatGPT模型:


可以使用CAD的API来实现对实体的缩放和修改缩放比例。具体步骤如下:

  1. 获取当前的文档对象和编辑器对象:
Document doc = Application.DocumentManager.MdiActiveDocument;
Editor ed = doc.Editor;
  1. 选择需要缩放的实体:
PromptEntityOptions peo = new PromptEntityOptions("\n请选择需要缩放的实体:");
peo.AllowNone = false;
peo.SetRejectMessage("\n只能选择实体,请重新选择:");
peo.AddAllowedClass(typeof(Entity), true);
PromptEntityResult per = ed.GetEntity(peo);
if (per.Status != PromptStatus.OK) return;
  1. 获取实体的当前缩放比例:
Entity ent = (Entity)tr.GetObject(per.ObjectId, OpenMode.ForRead);
double curScale = ent.GetScaleFactors().X;
  1. 修改缩放比例并更新实体:
double newScale = curScale * 2; // 例如将缩放比例扩大2倍
ent.UpgradeOpen();
ent.ScaleFactors = new Scale3d(newScale);
ent.DowngradeOpen();
  1. 弹出缩放区域对话框:
DocumentLock loc = doc.LockDocument();
try
{
    using (Transaction tr = doc.TransactionManager.StartTransaction())
    {
        Viewport vp = ed.CurrentViewport;
        PromptPointOptions ppo = new PromptPointOptions("\n请指定缩放区域的第一个角点:");
        PromptPointResult ppr = ed.GetPoint(ppo);
        if (ppr.Status != PromptStatus.OK) return;

        Point3d pt1 = ppr.Value;
        ppo.Message = "\n请指定缩放区域的第二个角点:";
        ppo.UseBasePoint = true;
        ppo.BasePoint = pt1;
        ppr = ed.GetPoint(ppo);
        if (ppr.Status != PromptStatus.OK) return;

        Point3d pt2 = ppr.Value;
        Extents3d ext = new Extents3d(pt1, pt2);
        vp.ZoomExtents(ext);

        tr.Commit();
    }
}
finally
{
    doc.UnlockDocument(loc);
}

注意事项:

  1. 在对实体进行缩放操作前,需要将其升级为可写状态;
  2. 在进行完缩放操作后,需要将实体降级为只读状态;
  3. 在弹出缩放区域对话框前,需要先锁定文档对象,以确保不会出现多线程问题。

如果我的建议对您有帮助、请点击采纳、祝您生活愉快

用 amtitle 绘制的标题栏图框,用c# 获取图框块参照后,修改缩放比例,但是点击弹框中缩放比例不会变。

img

img