zoukankan      html  css  js  c++  java
  • 2021年1月1日 AutoCAD.Net/C#.Net QQ群:193522571改变多段线区直


    代码:

    #include "StdAfx.h"
    #include "StdArx.h"
    #include <dbpl.h>
    #include "..\..\Common\Others\ConvertUtil.h"
    #include <geassign.h>
    #include "..\..\Common\Entity\ArcUtil.h"
    #include "..\..\Common\Document\DwgDatabaseUtil.h"
    #include <afxwin.h>
    #include <dbents.h>


    void ZffMyProjectchangeline()
    {

    ads_name polyLinename;
    ads_point pnt;

    if (acedEntSel("\n请选择多段线的条直线段!",polyLinename,pnt)!=RTNORM)
    {
    return;
    }
    AcDbObjectId polyLineId;
    acdbGetObjectId(polyLineId,polyLinename);
    AcDbEntity *pEnt=NULL;
    acdbOpenObject(pEnt,polyLineId,AcDb::kForWrite);
    if (pEnt->isKindOf(AcDbPolyline::desc()))
    {
    AcDbPolyline *pPolyline=AcDbPolyline::cast(pEnt);
    pEnt->close();
    int vtnum=pPolyline->numVerts();
    AcGePoint3dArray pts;
    AcGePoint3d pt;
    for(int i=0; i<vtnum; i++)
    {
    pPolyline->getPointAt(i, pt);
    pts.append(pt);
    }
    AcDbVoidPtrArray curves;
    pPolyline->getSplitCurves(pts,curves);
    bool nRb=true;
    for (i=0;i<curves.length();i++)
    {
    AcDbCurve *pCurve=static_cast<AcDbCurve*>(curves[i]);
    if (nRb)
    {
    AcGeLine2d geLine;
    AcGePoint3d pt1,pt2;
    pCurve->getStartPoint(pt1);
    pCurve->getEndPoint(pt2);
    AcGePoint2d pt12d,pt22d,pnt2d,pt2d;
    ads_point pt;
    AcGePoint3d ptOnArc;
    pt12d=CConvertUtil::ToPoint2d(pt1);
    pt22d=CConvertUtil::ToPoint2d(pt2);
    pnt2d=CConvertUtil::ToPoint2d(asPnt3d(pnt));
    geLine.set(pt12d,pt22d);
    double tol =1;
    if (geLine.distanceTo(pnt2d)<tol)
    {
    nRb=false;
    delete pCurve;
    pCurve->close();
    acedGetPoint(NULL,"\n输入一个点:",pt);
    pt2d=CConvertUtil::ToPoint2d(asPnt3d(pt));
    AcGeCircArc2d geArc(pt12d, pt2d, pt22d);
    AcGePoint2d ptCenter = geArc.center();
    double radius = geArc.radius();
    AcGeVector2d vecStart(pt12d.x - ptCenter.x, pt12d.y - ptCenter.y);
    AcGeVector2d vecEnd(pt22d.x - ptCenter.x, pt22d.y - ptCenter.y);
    double startAngle = vecStart.angle();
    double endAngle = vecEnd.angle();
    AcDbArc *pArc=new AcDbArc(CConvertUtil::ToPoint3d(ptCenter), radius, startAngle, endAngle);
    pArc->getClosestPointTo(asPnt3d(pt),ptOnArc);

    if (CConvertUtil::ToPoint2d(ptOnArc).distanceTo(pt2d)<tol)
    {
    CDwgDatabaseUtil::PostToModelSpace(pArc);
    }
    else
    {
    AcDbArc *pArc2=new AcDbArc(CConvertUtil::ToPoint3d(ptCenter),radius,endAngle,startAngle);
    CDwgDatabaseUtil::PostToModelSpace(pArc2);
    delete pArc;
    }
    continue;
    }

    }
    CDwgDatabaseUtil::PostToModelSpace(pCurve);
    pCurve->close();
    }
    acdbOpenObject(pPolyline,polyLineId,AcDb::kForWrite);
    pPolyline->erase();
    pPolyline->close();
    }
    pEnt->close();
    }

  • 相关阅读:
    Windows常用快捷键
    ArrayList和LinkedList的区别
    ICMP TYPE-CODE查阅表
    dedecmsV5.7 百度编辑器ueditor 多图上传 在线管理 排序问题
    dedecmsV5.7 后台上传m4a的音频之后不展示
    php5.6 上传图片error代码为6 或者 报错“PHP Warning: File upload error
    deducmsV5.7 在{dede:datalist}标签中runphp无效的解决办法
    dedecmsV5.7 插入记录并返回刚插入数据的自增ID
    dedecmsV5.7 调用其他站点的数据库的数据的方法
    dedecmsV5.7 arclist 如何调用副栏目的文章
  • 原文地址:https://www.cnblogs.com/NewAutoMan/p/5125112.html
Copyright © 2011-2022 走看看