使用到的命令是:_.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;
}
2.炸开这个块,得到的是2维多段线集合。AcDb2dPolyline 在炸开,得到直线集合。
AcDbVoidPtrArray voidArr;

                es = pBlk->explode(voidArr);

                if (es == ErrorStatus::eOk) {

                    for (int j = ; j < voidArr.length(); j++)
{ AcDb2dPolyline *pl2d = (AcDb2dPolyline*)voidArr[j]; AcDbVoidPtrArray voidArr2d; es = pl2d->explode(voidArr2d); if (es == ErrorStatus::eOk) {
for (int m = ; m < voidArr2d.length(); m++)
{
AcDbLine * line = (AcDbLine*)voidArr2d[m]; vecLines.push_back(line);
}
}
delete pl2d;
pl2d = NULL;
}
}

3.这样得到的直线集合,发现除了能得到轮廓之后,在轮廓内部还会有重叠的直线,所以这一步就是删除轮廓内部重叠的直线。

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

4.到了这一步就只剩下轮廓直线集合了,这步就把这个剩余的直线转换为多段线。我使用的PEDit命令,这个命令具体用法,详见另一篇博客:

https://www.cnblogs.com/HelloQLQ/p/12381923.html

这里做的不好的是,在第4步,需要再次选择一下,我本来是直接通过:
int acedSSAdd(
    const ads_name ename,
    const ads_name sname,
    ads_name result
);
但是添加出来的result用PE命令合成多段线始终不成功,所以只能手动选择一次,得到result集合,再合成多段线了。。

objectarx 得到有宽度的多段的轮廓的更多相关文章

  1. objectarx 按比例分割封闭多段线

    测试结果:这个是按0.1,0.1,0.1,0.3,0.4的比例划分的. 插件描述:这个插件主要是选择一个多段线poly,设置poly的close属性为true,在poly任意一侧画一条长线line(l ...

  2. 实现Myxls设置行高的功能(转)

    MyXLS是一个导出Excel的好工具,速度快,体积小,而且也不用担心使用Com生成Excel时资源释放的问题了.但是作者提供的代码没有设置行高 要实现这个效果,首先需要修改两个文件: 1.Row.c ...

  3. NPOI创建DOCX常用操作【转】

    1.  创建文档 XWPFDocument m_Docx = new XWPFDocument();2.  页面设置 //1‘=1440twip=25.4mm=72pt(磅point)=96px(像素 ...

  4. codevs[1300]文件排版

    Description 写电子邮件是有趣的,但不幸的是经常写不好看,主要是因为所有的行不一样长,你的上司想要发排版精美的电子邮件,你的任务是为他编写一个电子邮件排版程序. 完成这个任务最简单的办法是在 ...

  5. Matlab 如何绘制复杂曲线的包络线

    Matlab 如何绘制复杂曲线的包络线 http://jingyan.baidu.com/article/aa6a2c14d36c710d4c19c4a8.html 如果一条曲线(比如声音波形)波动很 ...

  6. iOS开发之常用资讯类App的分类展示与编辑的完整案例实现(Swift版)

    上篇博客我们聊了<资讯类App常用分类控件的封装与实现(CollectionView+Swift3.0)>,今天的这篇博客就在上篇博客的基础上做些东西.做一个完整的资讯类App中的分类展示 ...

  7. CSS 控制table 滑动及调整列宽等问题总结

    一. 通过css控制table y方向上滚动 html中没有滚动条,可以根据overflow属性的scroll来对table显示不完全的内容进行滚动. 只是y方向上滚动,很简单,只要设置div的hei ...

  8. Android-原笔迹手写的探索与开发

     前言 这篇文章主要是关于移动端原笔迹的开发,让平板上的手写效果达到笔迹光滑且有笔锋. 介绍关于原笔迹的算法思路. 项目github地址 算法思路分析 曲线拟合算法 利用曲线拟合算法增加虚拟的点,使得 ...

  9. Jupyter notebook工具栏隐藏和jupyter notebook主题更改

    有趣的事,Python永远不会缺席! 如需转发,请注明出处:小婷儿的python  https://www.cnblogs.com/xxtalhr/p/10747200.html 一.问题 Jupyt ...

随机推荐

  1. Java任务调度框架之分布式调度框架XXL-Job介绍

    ​ Java任务调度框架之分布式调度框架XXL-Job介绍及快速入门 调度器使用场景: Java开发中经常会使用到定时任务:比如每月1号凌晨生成上个月的账单.比如每天凌晨1点对上一天的数据进行对账操作 ...

  2. Gitbook在 Mac 环境上的安装及使用

    一.在 Mac 环境上搭建 gitbook #.安装node.js,在node.js官网下载,直接安装稳定版本. https://nodejs.org/en/ #.检测 node.js 是否安装成功 ...

  3. [CTS2019]珍珠(NTT+生成函数+组合计数+容斥)

    这题72分做法挺显然的(也是我VP的分): 对于n,D<=5000的数据,可以记录f[i][j]表示到第i次随机有j个数字未匹配的方案,直接O(nD)的DP转移即可. 对于D<=300的数 ...

  4. Flume(三) —— 断点续传 与 事务

    断点续传 # Name the components on this agent a1.sources = r1 a1.sinks = k1 a1.channels = c1 # Describe / ...

  5. JavaWeb过滤器(Filter)

    参考:https://blog.csdn.net/yuzhiqiang_1993/article/details/81288912 原理: 一般实现流程: 1.新建一个类,实现Filter接口2.实现 ...

  6. Maven 仓库搜索服务和私服搭建

    Maven 仓库搜索服务 使用maven进行日常开发的时候,一个常见问题就是如何寻找需要的依赖,我们可能只知道需要使用类库的项目名称,但是添加maven依赖要求提供确切的maven坐标,这时就可以使用 ...

  7. 2019-2020-1 20199324《Linux内核原理与分析》第一周作业

    1.问题:使用banner输出图形字符为什么都是大写? 2.实验二:基本概念及操作 作业:命令toilet和figlet的使用 使用如下命令安装 $ sudo apt-get update $ sud ...

  8. 基础篇十:模块介绍(--with-help_random_index_module)

    配置语法: 下面开始配置: cd /etc/nginx/conf.d/default.conf

  9. 吴裕雄--天生自然C语言开发:typedef

    #include <stdio.h> #include <string.h> typedef struct Books { ]; ]; ]; int book_id; } Bo ...

  10. 一个搜索框的小demo

    一.实时按照输入的搜索值显示与其匹配的内容,隐藏其它内容 <%@ Page Language="C#" AutoEventWireup="true" Co ...