天气与日历 切换到窄版

 找回密码
 立即注册
中国膜结构网
十大进口膜材评选 十大国产膜材评选 十大膜结构设计评选 十大膜结构公司评选
查看: 3|回复: 0

objectarx 得到有宽度的多段的轮廓

[复制链接]
  • TA的每日心情
    开心
    昨天 15:23
  • 签到天数: 69 天

    [LV.6]常住居民II

    410

    主题

    167

    回帖

    2704

    积分

    管理员

    积分
    2704
    发表于 2024-6-22 09:46:18 | 显示全部楼层 |阅读模式
    使用到的命令是:_.wmfout和_.import以及PEdit
    步骤:1.先通过_.wmfout和_.import得到轮廓线,得到的轮廓线是一个块。方法如下:

    技术图片
    //ssname:选择的有宽度的多段线
    static AcDbObjectId wmfoutIn(ads_name& ssname)
        {
            acedCommandS(RTSTR, L"_.wmfout", RTSTR, L"E:\temp_1.wmf", RTENAME, ssname, RTSTR, L"", RTNONE);
            acedCommandS(RTSTR, L"_.import", RTSTR, L"E:\temp_1.wmf", RTNONE);
            acdbEntLast(ssname);
            AcDbObjectId entId;
            acdbGetObjectId(entId, ssname);
            AcDbBlockReference* pBlk = NULL;
            AcGePoint3d ptBase;
            AcGeMatrix3d mat;
            if (acdbOpenObject(pBlk, entId, AcDb::kForWrite) == Acad::eOk)
            {
                ptBase = pBlk->position();
                mat.setToScaling(2.0, ptBase);
                pBlk->transformBy(mat);
                pBlk->close();

                return entId;
            }

            return AcDbObjectId::kNull;
        }
    View Code
    2.炸开这个块,得到的是2维多段线集合。AcDb2dPolyline 在炸开,得到直线集合。


    AcDbVoidPtrArray voidArr;

                    es = pBlk->explode(voidArr);

                    if (es == ErrorStatus::eOk) {

                        for (int j = 0; j < voidArr.length(); j++)
                        {

                            AcDb2dPolyline *pl2d = (AcDb2dPolyline*)voidArr[j];

                            AcDbVoidPtrArray voidArr2d;

                            es = pl2d->explode(voidArr2d);

                            if (es == ErrorStatus::eOk) {
                                for (int m = 0; m < voidArr2d.length(); m++)
                                {
                                    AcDbLine * line = (AcDbLine*)voidArr2d[m];

                                    vecLines.push_back(line);
                                }
                            }
                            delete pl2d;
                            pl2d = NULL;
                        }
                    }
    3.这样得到的直线集合,发现除了能得到轮廓之后,在轮廓内部还会有重叠的直线,所以这一步就是删除轮廓内部重叠的直线。

    技术图片
    for (int i = 0; i < (int)vecLines.size(); i++)
            {
                AcDbLine * l1 = vecLines[i];
                if (l1 == NULL) {
                    continue;
                }
                int m = 0;
                for (int j = i + 1; j < (int)vecLines.size(); j++)
                {
                    AcDbLine * l2 = vecLines[j];
                    if (l2 == NULL || l1 == NULL) {
                        break;
                    }            
                    if (IsEqual(l1->startPoint(), l2->startPoint(), 1e-4) && IsEqual(l1->endPoint(), l2->endPoint(), 1e-4)) {

                        vecLines.erase(vecLines.begin() + i - m, vecLines.begin() + i + 1 - m);
                        m++;
                        vecLines.erase(vecLines.begin() + j - m, vecLines.begin() + j + 1 - m);
                        m++;
                    }
                }
            }










    acedCommandS 实现pedit命令

    acedCommandS(RTSTR, _T("PEDIT"),
                    RTSTR, _T("M"),
                    RTPICKS, result,
                    RTSTR, _T(""),
                    RTSTR, _T("Y"),
                    RTSTR, _T("J"),
                    RTSTR, _T("1"),//表示模糊距离
                    RTSTR, _T(""),
                    RTSTR, _T(""),
                    RTNONE);
    解释:RTPICKS 是你要转变为多段线的选择集,它的类型是ads_name的。

    acedCommandS(RTSTR, _T("PEDIT"),
                RTENAME, entName,
                RTSTR, _T("Y"),
                RTSTR, _T("J"),
                RTPICKS, result,//选择集,表示需要转换的实体集合。
                RTSTR, _T(""), RTSTR, _T(""), RTNONE);
    解释:RTENAME ,entName 表示选择一个需要转换为多段线的实体,只能是一个,它应该是属于集合resut的。

    这些命令都可以通过在cad上输入尝试一下就能知道它的意思。

     

     

     

     

    objectarx 得到有宽度的多段的轮廓
    中国膜结构网打造全中国最好的膜结构综合平台 ,统一协调膜结构设计,膜结构施工,膜材采购,膜材定制,膜结构预算全方位服务。 中国空间膜结构协会合作单位。
    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|Archiver|手机版|中国膜结构网|中国膜结构协会|进口膜材|国产膜材|ETFE|PVDF|PTFE|设计|施工|安装|车棚|看台|污水池|

    GMT+8, 2024-7-1 05:58 , Processed in 0.060896 second(s), 23 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

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