zoukankan      html  css  js  c++  java
  • 2021年1月1日 AutoCAD.Net/C#.Net QQ群:193522571 按顺序等距排列平行直线

    static void zffObjectARX_MyCommand17(void)
    {
    ads_name ss;
    AcDbVoidPtrArray ents;
    if (acedSSGet(NULL,NULL,NULL,NULL,ss)!=RTNORM)
    {
    acedAlert(_T("选择实体失败!"));
    return;
    }
    AcGePoint3dArray pts;
    long num;
    acedSSLength(ss,&num);
    if (num<3)
    {
    acedAlert(_T("无需均分!"));
    return;
    }
    for (int i=0;i<num;i++)
    {
    AcDbObjectId entId;
    AcDbEntity* pEnt=NULL;
    ads_name name;
    AcGePoint3d pt;

    acedSSName(ss,i,name);
    acdbGetObjectId(entId,name);
    if (acdbOpenObject(pEnt,entId,AcDb::kForWrite)!=Acad::eOk)
    {
    acedAlert(_T("部分实体打开失败,无法均分!"));
    pEnt->close();
    return;
    }
    if (pEnt->isKindOf(AcDbLine::desc()))
    {
    AcDbLine* pLine=AcDbLine::cast(pEnt);
    pLine->getClosestPointTo(AcGePoint3d::kOrigin,pt,Adesk::kTrue);
    pts.append(pt);
    ents.append(static_cast<void*>(pLine));
    }
    else
    {
    pEnt->close();
    }
    }
    acedSSFree(ss);
    AcGePoint3d pt1,pt2;
    double dist=0,dist1;
    long len=pts.length();
    for (int i=0;i<len;i++)
    {
    for (int j=i+1;j<len;j++)
    {
    dist1=pts[i].distanceTo(pts[j]);
    if (dist1>dist)
    {
    dist=dist1;
    pt1=pts[i];
    pt2=pts[j];
    }
    }
    }
    pts.remove(pt1);
    pts.remove(pt2);
    int m,n=0;
    for (int j=0;j<pts.length();)
    {
    dist=pt1.distanceTo(pt2);
    for (int i=0;i<pts.length();i++)
    {
    dist1=pts[i].distanceTo(pt1);
    if (dist1<dist)
    {
    dist=dist1;
    m=i;
    }
    }
    AcGeVector3d vec=pt1-pts[m]-(pt1-pt2)*(n+1)/(len-1);
    AcGeMatrix3d max;
    max.setToTranslation(vec);
    for (int i=0;i<ents.length();i++)
    {
    AcDbLine* pLine=static_cast<AcDbLine*>(ents[i]);
    AcGePoint3d ptclose;
    pLine->getClosestPointTo(pts[m],ptclose,Adesk::kTrue);

    if (pts[m].distanceTo(ptclose)<0.001)
    {
    pLine->transformBy(max);
    }
    }
    pts.remove(pts[m]);
    n++;
    }
    for (int i=0;i<ents.length();i++)
    {
    AcDbLine* pLine1=static_cast<AcDbLine*>(ents[i]);
    pLine1->close();
    }
    }

  • 相关阅读:
    案例5-1.3 整型关键字的散列映射 (25分)--散列表(除留余数法+线性探测法)
    基础实验5-2.2 电话聊天狂人 (25分)-散列表
    习题8.4 畅通工程之最低成本建设问题 (30分)--最小生成树
    练习4.2 平衡二叉树的根 (25分)
    案例7-1.5 与零交换 (25分)--dfs
    习题2.8 输出全排列 (20分)--dfs
    nginx 日志切割
    mysql添加索引
    mysql常见错误码及说明
    MYSQL数据类型分类
  • 原文地址:https://www.cnblogs.com/NewAutoMan/p/6464081.html
Copyright © 2011-2022 走看看