找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2466|回复: 15

[日积月累]:已完成拖动选择集

[复制链接]
发表于 2002-9-13 12:49:43 | 显示全部楼层 |阅读模式

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

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

×
#if !defined(_SELECTENTITYARRAY_H)
#define _SELECTENTITYARRAY_H

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

#include "dbmain.h"
#include "StdArx.h"
#include "acgi.h"

class SelectEntityArray : public AcDbEntity
{
        AcGeMatrix3d m_mat;
        AcDbObjectIdArray m_IdArray;
public:
        void setTransform(const AcGeMatrix3d& mat)
        {
                m_mat=mat;
        }
        void setObjectIdArray(const AcDbObjectIdArray& marray)
        {
                m_IdArray=marray;
        }
        virtual Adesk::Boolean worldDraw(AcGiWorldDraw* mode)
        {
                AcDbEntity *pEntity=NULL;
                AcGePoint3d parray[2];
                AcGePoint3d p1;
                AcDbLine *pLine=NULL;
                AcDbCircle *pCircle=NULL;
                Acad::ErrorStatus es=Acad::eOk;
                for(int i=0;i<m_IdArray.length();i++)
                {
                        es=acdbOpenAcDbEntity(pEntity,m_IdArray.at(i),AcDb::kForRead);
                        if(es!=Acad::eOk)
                                continue;
                        pLine=AcDbLine::cast(pEntity);
                        if(pLine)
                        {
                                p1=pLine->endPoint();
                                p1=p1.transformBy(m_mat);
                                parray[0]=p1;
                                p1=pLine->startPoint();
                                p1=p1.transformBy(m_mat);
                                parray[1]=p1;
                                pLine->close();
                                mode->geometry().polyline(2,parray);
                                continue;
                        }
                        pCircle=AcDbCircle::cast(pEntity);
                        if(pCircle)
                        {
                                p1=pCircle->center();
                                p1=p1.transformBy(m_mat);
                                mode->geometry().circle(p1,pCircle->radius(),pCircle->normal());
                                pCircle->close();
                                continue;
                        }
                        //在这里可以增加其他对象 AcDbPolyline AcDbMline .....
                }
                return Adesk::kTrue;
        }
};
#endif


//
// ObjectARX defined commands, created by  [九月/12/2002], ,

#include "StdAfx.h"
#include "StdArx.h"

class SelectJig : public AcEdJig
{
public :
        SelectJig(const AcDbObjectIdArray&,const AcGePoint3d p1);
        virtual ~SelectJig();
        void doIt();
        virtual DragStatus sampler();
        virtual Adesk::Boolean update();
        virtual AcDbEntity * entity()const;
        void append();
private:
        SelectEntityArray *pSelect;
        AcGeMatrix3d m_max;
        AcGePoint3d m_point1,m_point2;
        AcDbObjectIdArray m_IdArray;
};

SelectJig::SelectJig(const AcDbObjectIdArray& idarray,const AcGePoint3d p1)
{
        m_IdArray=idarray;
        m_point1=p1;
}

SelectJig::~SelectJig()
{
        delete pSelect;
}

void SelectJig::doIt()
{
        pSelect=new SelectEntityArray;
        pSelect->setObjectIdArray(m_IdArray);
        drag();
        append();
}

AcEdJig::DragStatus
SelectJig::sampler()
{
        DragStatus stat;
        static AcGePoint3d point1;
        stat = acquirePoint(m_point2);
        if(point1!=m_point2)
                point1=m_point2;
        else if(stat== AcEdJig::kNormal)
                return AcEdJig::kNoChange;
        return stat;
}

Adesk::Boolean
SelectJig::update()
{
        AcGeVector3d vect=m_point2-m_point1;
        m_max=AcGeMatrix3d(vect);
        pSelect->setTransform(m_max);
        return Adesk::kTrue;
}

AcDbEntity *
SelectJig::entity()const
{
        return pSelect;
}

void SelectJig::append()
{
        AcDbObjectId objId;
        AcDbEntity *pEntity=NULL;
        int len1=m_IdArray.length();
        if(len1==0)
                return;
        for(int i=0;i<len1;i++)
        {
                objId=m_IdArray.at(i);
                if(acdbOpenAcDbEntity(pEntity,objId,AcDb::kForWrite)!=Acad::eOk)
                        continue;
                pEntity->transformBy(m_max);
                pEntity->close();
        }
}
//-----------------------------------------------------------------------------
// This is command 'YY, by  [九月/12/2002], ,
void ZFSyanchengyy()
{
#ifdef OARXWIZDEBUG
        acutPrintf ("\nOARXWIZDEBUG - ZFSyanchengyy() called.");
#endif // OARXWIZDEBUG
        ads_name namess,name1;
        AcGePoint3d pickpoint;
        long len;
        if(acedSSGet(NULL,NULL,NULL,NULL,namess)!=RTNORM)
                return;
        if(acedSSLength(namess,&len)!=RTNORM)
                return;
        AcDbObjectId id;
        AcDbObjectIdArray idarray;
        for(int i=0;i<len;i++)
        {
                if(acedSSName(namess,i,name1)!=RTNORM)
                {        acedSSFree(namess);
                        return;
                }
                if(acdbGetObjectId(id,name1)!=Acad::eOk)
                {        acedSSFree(namess);
                        return;
                }
                idarray.append(id);
        }
        if(idarray.length()==0)
        {        acedSSFree(namess);
                return;
        }
        acedSSFree(namess);
        if(acedGetPoint(NULL,NULL,asDblArray(pickpoint))!=RTNORM)
                return;
        SelectJig *jig=new SelectJig(idarray,pickpoint);
        jig->doIt();
        delete jig;
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2002-9-26 08:55:00 | 显示全部楼层
virtual Adesk::Boolean worldDraw(AcGiWorldDraw* mode)
{
        Acad::ErrorStatus es;
        int                length = m_arrIdEnt.length();
        int                i = 0;

        AcDbEntity *pEnt=NULL;
        AcDbEntity        *pDraw = NULL;
        //CJigEntitys        *pDraw = NULL;
        AcDbObjectId        IdEnt;
        Adesk::Boolean bRet = Adesk::kFalse;
       
        for(i=0; i<length; i++)
        {               
                IdEnt = m_arrIdEnt.at(i);
                es = acdbOpenAcDbEntity(pEnt, IdEnt, AcDb::kForRead);
                if(Acad::eOk != es) continue;
                //pDraw = new CJigEntitys;
                pDraw = (AcDbEntity*)(pEnt->clone());//copyFrom(pEnt);               
                //pDraw->copyFrom(pEnt);
                pEnt->close();
                if(pDraw)
                {
                es = pDraw->transformBy(m_geMatrix);
                bRet = pMode->geometry().draw(pDraw);
                delete pDraw;
                pDraw = NULL;       
                }
        }
        return Adesk::kTrue;
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-9-26 09:03:01 | 显示全部楼层
为什么我解压不了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-26 23:04:45 | 显示全部楼层
最初由 noname 发布
[B]为什么我解压不了 [/B]


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

使用道具 举报

发表于 2002-11-11 17:16:35 | 显示全部楼层
void setTransform(const AcGeMatrix3d& mat)
        {
                Acad::ErrorStatus es=Acad::eOk;
                AcDbEntity *pEntity=NULL;
                for(int i=0;i<m_IdArray.length();i++)
                {
                        es=acdbOpenAcDbEntity(pEntity,m_IdArray.at(i),AcDb::kForWrite);
                        if(es==Acad::eOk)
                        {
                                pEntity->transformBy(mat);
                                pEntity->close();
                        }
                }
        }

        void setObjectIdArray(const AcDbObjectIdArray& marray)
        {
                m_IdArray=marray;
        }
        virtual Adesk::Boolean worldDraw(AcGiWorldDraw* mode)
        {
                AcDbEntity *pEntity=NULL;
                Acad::ErrorStatus es=Acad::eOk;
                for(int i=0;i<m_IdArray.length();i++)
                {
                        es=acdbOpenAcDbEntity(pEntity,m_IdArray.at(i),AcDb::kForRead);
                        if(es==Acad::eOk)
                        {
                                pEntity->worldDraw(mode);
                                pEntity->close();
                        }
                }
                return Adesk::kTrue;
        }


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

使用道具 举报

发表于 2003-10-25 23:08:02 | 显示全部楼层
做什么用的阿?请讲解一下
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-2-12 12:21:21 | 显示全部楼层
直接调用系统命令岂不更方便
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-7-28 23:50:50 | 显示全部楼层
容易出错
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-13 10:01:35 | 显示全部楼层
用binbin的代码后,如果是LINE组成的,没有问题,如果是带标注,圆形,就会出现两个实体显示在屏幕,是不是属性的问题?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-8-13 21:54:29 | 显示全部楼层
属性有这样的问题,因为在块记录中是"属性定义"实体,放到模型空间后是"属性"实体.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

发表于 2004-8-31 10:20:17 | 显示全部楼层
这样子写出来的拖动,当实体多的时候,这会显得慢,不知大伙有什么好的解决方法?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-9-10 11:03:20 | 显示全部楼层
很好用啊,谢谢了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 21:43 , Processed in 0.499328 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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