找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1357|回复: 2

[分享] GrUtilities

[复制链接]

已领礼包: 1268个

财富等级: 财源广进

发表于 2014-7-12 08:46:35 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
#include "stdafx.h"
#include "stdarx.h"

#include "GrUtilities.h"
#include "dbxutil.h"
#include "geassign.h"


void drawInfo(const AcGePoint3d& p1, const AcGePoint3d& p2,short color)
{
        ads_point ucsP1,ucsP2;
        acdbWcs2Ucs(asDblArray(p1),ucsP1,Adesk::kFalse);
        acdbWcs2Ucs(asDblArray(p2),ucsP2,Adesk::kFalse);
        acedGrDraw(ucsP1,ucsP2,color,0);
}

void drawInfo(const AcGePoint3d& pWcs,short color)
{
        ads_point p,p1,p2,p3,p4;
        double size = 5;

        acdbWcs2Ucs(asDblArray(pWcs),p,Adesk::kFalse);
       
        struct resbuf rb;

        if(acedGetVar("VIEWSIZE",&rb) == RTNORM)
        {
                size = rb.resval.rreal * 0.05;
        }

        p1[0] = p[0] - size;
        p1[1] = p[1] - size;
        p1[2] = p[2];
       
        p2[0] = p[0] + size;
        p2[1] = p[1] - size;
        p2[2] = p[2];

        p3[0] = p[0] + size;
        p3[1] = p[1] + size;
        p3[2] = p[2];

        p4[0] = p[0] - size;
        p4[1] = p[1] + size;
        p4[2] = p[2];

        acedGrDraw(p1,p2,color,0);
        acedGrDraw(p2,p3,color,0);
        acedGrDraw(p3,p4,color,0);
        acedGrDraw(p4,p1,color,0);
}

void drawInfo(const AcGePoint3dArray& ar,short color)
{
        AcGePoint3d p,last,first;
        first = last = ar[0];
        for(int i=1;i<ar.length();i++)
        {
                p = ar[i];
                drawInfo(p,last,color);
                last = p;
        }
        drawInfo(first, last,color);
}



void drawInfo(const AcGeBoundBlock3d& block,short color)
{
        ads_point p1,p2,p3,p4,p5,p6,p7,p8;
       
        AcGePoint3d blockP1,blockP2;
        AcGePoint3d wcsBlockP1,wcsBlockP2;

        block.getMinMaxPoints (wcsBlockP1,wcsBlockP2);
        acdbWcs2Ucs(asDblArray(wcsBlockP1),asDblArray(blockP1),Adesk::kFalse);
        acdbWcs2Ucs(asDblArray(wcsBlockP2),asDblArray(blockP2),Adesk::kFalse);

        p1[0] = blockP1.x;
        p1[1] = blockP1.y;
        p1[2] = blockP1.z;
       
        p2[0] = blockP2.x;
        p2[1] = blockP1.y;
        p2[2] = blockP1.z;

        p3[0] = blockP2.x;
        p3[1] = blockP2.y;
        p3[2] = blockP1.z;

        p4[0] = blockP1.x;
        p4[1] = blockP2.y;
        p4[2] = blockP1.z;

        p5[0] = blockP1.x;
        p5[1] = blockP1.y;
        p5[2] = blockP2.z;
       
        p6[0] = blockP2.x;
        p6[1] = blockP1.y;
        p6[2] = blockP2.z;

        p7[0] = blockP2.x;
        p7[1] = blockP2.y;
        p7[2] = blockP2.z;

        p8[0] = blockP1.x;
        p8[1] = blockP2.y;
        p8[2] = blockP2.z;

        acedGrDraw(p1,p2,color,0);
        acedGrDraw(p2,p3,color,0);
        acedGrDraw(p3,p4,color,0);
        acedGrDraw(p4,p1,color,0);

        acedGrDraw(p5,p6,color,0);
        acedGrDraw(p6,p7,color,0);
        acedGrDraw(p7,p8,color,0);
        acedGrDraw(p8,p5,color,0);

        acedGrDraw(p1,p5,color,0);
        acedGrDraw(p2,p6,color,0);
        acedGrDraw(p3,p7,color,0);
        acedGrDraw(p4,p8,color,0);
}


void drawInfo(const AcGeCurve3d* crv,short color)
{
        AcGeInterval iv;
        double lb,ub;
        crv->getInterval(iv);
        iv.getBounds(lb,ub);

        double param = lb;
       
        double step = (ub-lb) / 100;
        AcGePoint3d p1,p2;
        p1 = crv->evalPoint(lb);
        acdbWcs2Ucs(asDblArray(p1),asDblArray(p1),Adesk::kFalse);
        while(param < ub)
        {
                param += step;
                p2 = crv->evalPoint(param);
                acdbWcs2Ucs(asDblArray(p2),asDblArray(p2),Adesk::kFalse);
                acedGrDraw(asDblArray(p1),asDblArray(p2),color,0);
                p1 = p2;
        }
        p2 = crv->evalPoint(ub);
        acdbWcs2Ucs(asDblArray(p2),asDblArray(p2),Adesk::kFalse);
        acedGrDraw(asDblArray(p1),asDblArray(p2),color,0);
}


void drawAxis(const AcGePoint3d& org,const AcGeVector3d& vec, double len, short color)
{
        AcGePoint3d p1,p2,p3;
        AcGeVector3d vecNormal,vec1,vec2;
        vecNormal = vec.normal();
        vec1 = vecNormal.perpVector();
        vec2 = vecNormal.crossProduct(vec1);
        p1 = org;
        p2 = p1 + vecNormal*len;
        p3 = p2 + vecNormal*len/4;

        AcGeCircArc3d cir(p2,vecNormal,len/8);

        acdbWcs2Ucs(asDblArray(p1),asDblArray(p1),Adesk::kFalse);       
        acdbWcs2Ucs(asDblArray(p2),asDblArray(p2),Adesk::kFalse);       
        acdbWcs2Ucs(asDblArray(p3),asDblArray(p3),Adesk::kFalse);       

        acedGrDraw(asDblArray(p1),asDblArray(p2),color,0);
//        drawInfo(&(cir));
       
        AcGeInterval iv;
        double lb,ub;
        cir.getInterval(iv);
        iv.getBounds(lb,ub);
       
        double param = lb;
       
        double step = (ub-lb) / 100;
        p1 = cir.evalPoint(lb);
        acdbWcs2Ucs(asDblArray(p1),asDblArray(p1),Adesk::kFalse);
        acedGrDraw(asDblArray(p1),asDblArray(p3),color,0);
        while(param < ub)
        {
                param += step;
                p2 = cir.evalPoint(param);
                acdbWcs2Ucs(asDblArray(p2),asDblArray(p2),Adesk::kFalse);
                acedGrDraw(asDblArray(p1),asDblArray(p2),color,0);
                acedGrDraw(asDblArray(p2),asDblArray(p3),color,0);
                p1 = p2;
        }
        p2 = cir.evalPoint(ub);
        acdbWcs2Ucs(asDblArray(p2),asDblArray(p2),Adesk::kFalse);
        acedGrDraw(asDblArray(p1),asDblArray(p2),color,0);
        acedGrDraw(asDblArray(p2),asDblArray(p3),color,0);

}

评分

参与人数 1贡献 +3 收起 理由
SmallBlackCat + 3 很给力!经验;资料分享奖!

查看全部评分

论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-7-12 08:47:10 | 显示全部楼层
#ifndef GR_UTILITIES_H
#define GR_UTILITIES_H

//////////////////////////////////////////////////////////////////////////
//
// 与acedGrXXX()相关的函数
//
// Note:
//
//////////////////////////////////////////////////////////////////////////


/*
*        Purpose:
*                Draw a box with acedGrDraw in the current viewport, all
*                position is in WCS
*/
extern void        drawInfo(const AcGeBoundBlock3d& block,short color=3);

/*
*        Purpose:
*                Draw a line with acedGrDraw in the current viewport
*/
extern void       
drawInfo(const AcGePoint3d& p1, const AcGePoint3d& p2,short color=3);

/*
*        Purpose:
*                Draw a rectangle with acedGrDraw in the current viewport
*                pWcs is center, size is 5
*/
extern void drawInfo(const AcGePoint3d& pWcs,short color=3);


/*
*        Purpose:
*                Draw a polygon with acedGrDraw in the current viewport
*/
extern void drawInfo(const AcGePoint3dArray& ar,short color=3);


/*
*        Purpose:
*                Draw a curve with acedGrDraw in the current viewport
*/
extern void drawInfo(const AcGeCurve3d*,short color=3);


/*
*        Purpose:
*                Draw an axis with acedGrDraw in the current viewport
*/
extern void drawAxis(const AcGePoint3d& org,const AcGeVector3d& vec, double len, short color=3);

#endif // GR_UTILITIES_H
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1268个

财富等级: 财源广进

 楼主| 发表于 2014-7-12 18:42:52 来自手机 | 显示全部楼层
本帖最后由 st788796 于 2014-7-12 18:44 编辑

标记下 getInterval
AcGeCurveCurveInt3d
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-10 05:41 , Processed in 0.372228 second(s), 33 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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