返回介绍

调用画线命令,并得到绘线对象坐标

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

// 控件命令执行事件,所有与用户交互的操作,都需要在这个事件中执行。

// 详细见:https://help.mxdraw.com/?pid=42https://help.mxdraw.com/?pid=42

void MainWindow::on_axWidget_ImplementCommandEvent(int iCommandId)
{
    if(iCommandId == 2 || iCommandId == 3)
    {
        QString sCmd = "Mx_Line";
        if(iCommandId == 3)
            sCmd = "_DrawSpline";
        // 使用SendStringToExecuteFun调用Mx_Line命令,画线。
        QAxObject *param  =  ui->axWidget->querySubObject("NewResbuf");
        ui->axWidget->querySubObject("SendStringToExecuteFun(const QString&,QVariant)",sCmd,param->asVariant());
        // 得到前面的画线操作,绘制的直线对象.
        MxDrawApplication app;
        IMxDrawResbuf *var =  app.Call("Mx_GetEntitysNewAddCmd","");
        if(var != 0)
        {
            for (int i = 1; i < var->Count(); i++)
            {
                IMxDrawMcDbObject* pObj = var->AtObject(i);
                PrintMxDrawMcDbObject(pObj);
            }
        }
    }
    else if(iCommandId == 4)
    {
        TestSelectEntity();
    }
}

// 得到直线对象数据.

void MainWindow::PrintMxDrawMcDbLine(IMxDrawLine* pLine)
{
    IMxDrawPoint* pt1=(IMxDrawPoint*)pLine->querySubObject("StartPoint") ;
    IMxDrawPoint* pt2=(IMxDrawPoint*)pLine->querySubObject("EndPoint") ;
    QString st;
    st.sprintf("Line:pt1 :%f,%f,%f,pt2:%f,%f,%f",
                  pt1->property("x").toDouble(),
                  pt1->property("y").toDouble(),
                  pt1->property("z").toDouble(),
                  pt2->property("x").toDouble(),
                  pt2->property("y").toDouble(),
                  pt2->property("z").toDouble()
                 );
   qDebug() << st;
}

// 得到样条线对象数据

void MainWindow::PrintMxDrawSpline(IMxDrawSpline* pSpline)
{
    IMxDrawPoints* pPoints=(IMxDrawPoints*)pSpline->querySubObject("GetFitPoints()");
    int iCount = pPoints->property("Count").toInt();
    for(int i = 0; i < iCount;i++)
    {
        IMxDrawPoint* pt = (IMxDrawPoint*)pPoints->querySubObject("Item(const qint64&)",i);
        QString st;
        st.sprintf("pt%d :%f,%f,%f,pt2:%f,%f,%f",
                      i,pt->property("x").toDouble(),
                      pt->property("y").toDouble(),
                      pt->property("z").toDouble(),
                      pt->property("x").toDouble(),
                      pt->property("y").toDouble(),
                      pt->property("z").toDouble()
                     );
       qDebug() << st;
    }
}

// 调试输出我们的对象信息数据.

void MainWindow::PrintMxDrawMcDbObject(IMxDrawMcDbObject* pObj)
{
    if(pObj == NULL)
    {
        qDebug() << "Mx:pObj is null";
        return;
    }
    QString sName = pObj->property("ObjectName").toString();
    QString st;
    st.sprintf("name:%s",sName.toStdString().c_str());
    qDebug() << st;
     if (sName == "McDbLine")
     {
         //是一个直线
         IMxDrawLine* pLine = (IMxDrawLine*)pObj;
         PrintMxDrawMcDbLine(pLine);
     }
     else if(sName == "McDbSpline"){
         IMxDrawSpline* pSpline = (IMxDrawSpline*)pObj;
         PrintMxDrawSpline(pSpline);
     }
}

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

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

发布评论

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