返回介绍

插入图片

发布于 2023-08-09 23:10:34 字数 5923 浏览 0 评论 0 收藏 0

在设计绘图时,需要插入外部图片,可以设置图片的缩放比例、旋转角度、图片显示文件名等属性。

主要用到函数说明:

函数名:_DMxDrawX::DrawImageMark

绘图制一个图象标记对象。详细说明如下:

参数说明
DOUBLE dPosX绘制位置,是图片的中心点X
DOUBLE dPosY绘制位置,是图片的中心点y
DOUBLE dScale缩放比例,如果输入负数时,表示图片随视区大小缩放,负数的决对值表示图片的高度,图片宽度自动计算
DOUBLE dAng图片旋转角度
BSTR pszFileName图片显示文件名
BSTR pszTwinkeImageFiles闪烁时使用的ImageFile.,设置该文件后,调用MxDraw::TwinkeEnt后将交替闪烁显示。 可以同时设置多个闪烁文件,文件间用逗号隔开,比如: 1.jgp,2.jpg,3.jpg
VARIANT_BOOL isSaveData图片数据,是否随图保存

C#中实现代码说明:

private void InsertImage()
{
    OpenFileDialog ofd = new OpenFileDialog();
    ofd.Filter = "jpg 文件(*.jgp)|*.jpg";
 
    if (ofd.ShowDialog() != DialogResult.OK)
    {
        return;
    }
 
    Image tmpImage = null;
    try
    {
        tmpImage = Image.FromFile(ofd.FileName);
    }
    catch (Exception exp)
    {
        MessageBox.Show(exp.Message);
        return;
    }
 
    if (tmpImage == null)
        return;
 
    double dW = tmpImage.Width;
    double dH = tmpImage.Height;
    tmpImage = null;
 
    // 图片文件的插入点。
    MxDrawPoint point = (MxDrawPoint)(axMxDrawX1.GetPoint(false, 0, 0, "\n 指定插入点:"));
    if (point == null)
        return;
 
 
    string sFilePath = ofd.FileName;
    string sFileName = sFilePath;
 
 
    MxDrawDatabase database = (MxDrawDatabase)(axMxDrawX1.GetDatabase());
    MxDrawDictionary dict = database.GetNamedObjectsDictionary();
    if (dict == null)
        return;
 
    MxDrawDictionary imageDict = (MxDrawDictionary)(dict.GetAt("ACAD_IMAGE_DICT", false));
    if (imageDict == null)
    {
        // 增加一个字典对象。
        imageDict = (MxDrawDictionary)(dict.AddObject("ACAD_IMAGE_DICT", "McDbDictionary"));
    }
 
    if (imageDict == null)
        return;
 
    MxDrawRasterImageDef imgedef = (MxDrawRasterImageDef)(imageDict.GetAt(sFileName, false));
    if (imgedef == null)
    {
        imgedef = (MxDrawRasterImageDef)(imageDict.AddObject(sFileName, "McDbRasterImageDef"));
        if (imgedef == null)
            return;
    }
    imgedef.SourceFileName = sFileName;
 
    MxDrawBlockTableRecord curSpace = database.CurrentSpace();
    MxDrawVector3d uCorner = new MxDrawVector3d();
    uCorner.x = dW;
 
    MxDrawVector3d vOnPlane = new MxDrawVector3d();
    vOnPlane.y = dH;
 
    curSpace.AddImage(point.x, point.y, uCorner.x, uCorner.y, vOnPlane.x, vOnPlane.y, imgedef.ObjectID);
 
    MxDrawApplication app = new MxDrawApplication();
    app.ZoomAll();
}
private void BackGroundImage()
{
    OpenFileDialog ofd = new OpenFileDialog();
    ofd.Filter = "jpg 文件(*.jgp)|*.jpg";
 
    if (ofd.ShowDialog() != DialogResult.OK)
    {
        return;
    }
 
    Image tmpImage = null;
    try
    {
        tmpImage = Image.FromFile(ofd.FileName);
    }
    catch (Exception exp)
    {
        MessageBox.Show(exp.Message);
        return;
    }
 
    if (tmpImage == null)
        return;
 
    // 图片文件的插入点。
    MxDrawPoint point = (MxDrawPoint)(axMxDrawX1.GetPoint(false, 0, 0, "\n 指定插入点:"));
    if (point == null)
        return;
 
    string sFilePath = ofd.FileName;
    string sFileName = sFilePath;
 
    axMxDrawX1.DrawImageToBackground(sFileName, 100, 100);
    MxDrawApplication app = new MxDrawApplication();
    app.ZoomAll();
}

效果展示:

用户可以通过点击插入图片按钮,将在C#代码中设置的图片插入到CAD控件视区得任何位置。如下图所示:

c#drawimage.png

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文