天天看點

AutoCAD .Net 繪制臨時圖形

AutoCAD .Net API 中,Editor 類提供了兩個方法來臨時繪圖。

public void DrawVector(Point3d from, Point3d to, int color, bool drawHighlighted);

public void DrawVectors(ResultBuffer rb, Matrix3d transform);

這些繪制的圖形會在 AutoCAD 視窗重新整理時消失。

以下示例代碼實作在滑鼠點選處繪制臨時的十字圖形。

[CommandMethod("Test")]
public void Test()
{
    Document doc = Application.DocumentManager.MdiActiveDocument;

    PromptPointResult ret = doc.Editor.GetPoint("\nPick point");
    if (ret.Status != PromptStatus.OK)
        return;

    Point3d pnt = ret.Value;
    Point3d pnt1 = new Point3d(pnt.X - , pnt.Y, pnt.Z);
    Point3d pnt2 = new Point3d(pnt.X + , pnt.Y, pnt.Z);
    Point3d pnt3 = new Point3d(pnt.X, pnt.Y - , pnt.Z);
    Point3d pnt4 = new Point3d(pnt.X, pnt.Y + , pnt.Z);

    int colorIndex = ;
    doc.Editor.DrawVector(pnt1, pnt2, colorIndex, false);
    doc.Editor.DrawVector(pnt3, pnt4, colorIndex, false);
}
           

或者用如下代碼:

[CommandMethod("Test")]
public void Test()
{
    Document doc = Application.DocumentManager.MdiActiveDocument;

    PromptPointResult ret = doc.Editor.GetPoint("\nPick point");
    if (ret.Status != PromptStatus.OK)
        return;

    Point3d pnt = ret.Value;
    Point2d pnt1 = new Point2d(pnt.X - , pnt.Y);
    Point2d pnt2 = new Point2d(pnt.X + , pnt.Y);
    Point2d pnt3 = new Point2d(pnt.X, pnt.Y - );
    Point2d pnt4 = new Point2d(pnt.X, pnt.Y + );

    int colorIndex = ;
    int RTPOINT = ;
    int RTSHORT = ;
    using (ResultBuffer resBuf = new ResultBuffer())
    {
        resBuf.Add(new TypedValue(RTSHORT, colorIndex));
        resBuf.Add(new TypedValue(RTPOINT, pnt1));
        resBuf.Add(new TypedValue(RTPOINT, pnt2));
        resBuf.Add(new TypedValue(RTPOINT, pnt3));
        resBuf.Add(new TypedValue(RTPOINT, pnt4));
        doc.Editor.DrawVectors(resBuf, Matrix3d.Identity);
    }
}
           

參考文章:

http://adndevblog.typepad.com/autocad/2012/04/temporary-graphics-in-autocad.html

繼續閱讀