找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 831|回复: 13

[求助]:困惑N久的问题

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

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

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

×
怎么用ARX实现动态实时的选择?
比如:我自定义一个COPY命令:
用TransformbyCopy的时候我怎么实现用户在移动鼠标的时候要copy的实体随着移动,
当用户按下鼠标确定的时候,在结束copy?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-5 14:33:42 | 显示全部楼层
从AcGeJig派生你自己的类,具体看下ARX安装目录SAMPLES目录下的jig3d目录里面的实例程序。

你也可以简单的直接使用ARX全局函数acedDragGen来拖动选择集。

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

使用道具 举报

 楼主| 发表于 2002-9-6 16:20:21 | 显示全部楼层
我现在拖动的是一个选择集,
但AcEdJig里的entity函数只能返回一个entity,
我怎么才能实现拖动整个选择集呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-9-6 17:20:06 | 显示全部楼层
看看下面这个程序,拖动已实现,但move不行

#include "StdAfx.h"
#include "StdArx.h"
#include "geassign.h"
#include "acedads.h"
#include "dbents.h"
// This is command 'DDD'
void addModleSpace(AcDbObjectId& objectId,AcDbEntity* pEntity);
ads_point ptBase;
int dragSet(ads_point usrPt,ads_matrix Matrix)
{
        int i,j;
        for(i=0;i<=3;i++)
                for(j=0;j<=3;j++)
                        Matrix[j]=0.0;
        for(i=0;i<=3;i++)
                Matrix=1.0;
        Matrix[0][3]=usrPt[0]-ptBase[0];
        Matrix[1][3]=usrPt[1]-ptBase[1];
        Matrix[2][3]=usrPt[2]-ptBase[2];
        return RTNORM;
}
void zfsfdsfddd()
{
        AcGePoint3d p1,p2;
        int type;
        p1.set(0,0,0);
        p2.set(6,150,0);
        AcDbLine *pLine= new AcDbLine(p1,p2);
        AcDbObjectId objId;
        addModleSpace(objId,pLine);
        ads_name name1;
        acedSSGet("A",NULL,NULL,NULL,name1);
        ads_point pt;
        ptBase[1]=0;
        ptBase[2]=0;
        ptBase[3]=0; //基点
        type=acedDragGen(name1,NULL,0,dragSet,pt);
        if(type==RTNORM)
        {
                acedCommand(RTSTR,"MOVE",RTPICKS,name1,RTSTR,"",RTPOINT,ptBase,RTPOINT,pt);
        }
        acedSSFree(name1);
}

void addModleSpace(AcDbObjectId& objectId,AcDbEntity* pEntity)
{
        AcDbBlockTable* pBlockTable=NULL;
        AcDbBlockTableRecord* pBlockTableRecord=NULL;
        acdbHostApplicationServices()->workingDatabase()->
                getSymbolTable(pBlockTable,AcDb::kForRead);
        pBlockTable->getAt(ACDB_MODEL_SPACE,pBlockTableRecord,AcDb::kForWrite);
        pBlockTableRecord->appendAcDbEntity(objectId,pEntity);
        pEntity->close();
        pBlockTableRecord->close();
        pBlockTable->close();
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2002-9-9 13:08:10 | 显示全部楼层
最初由 hanahana 发布
[B]我现在拖动的是一个选择集,
但AcEdJig里的entity函数只能返回一个entity,
我怎么才能实现拖动整个选择集呢? [/B]


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

使用道具 举报

 楼主| 发表于 2002-9-9 14:44:23 | 显示全部楼层
给个实例好吗?我是新手。
不要告诉我在安装目录下的sample里面。
多谢了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-9 14:52:33 | 显示全部楼层
最初由 hanahana 发布
[B]给个实例好吗?我是新手。
不要告诉我在安装目录下的sample里面。
多谢了 [/B]

  1. [FONT=courier new]
  2. 你可以在你的DRAG类里面,在定义一个从AcDbEntity派生的处理选择集的类:

  3. class SelectionSet : public AcDbEntity
  4. {
  5.         AcDbObjectIdArray m_idArray;
  6.         AcGeMatrix3d m_mat;
  7.     public:
  8.         void setTransform(const AcGeMatrix3d& mat)
  9.         {
  10.                 m_mat = mat;
  11.         }
  12.         Acad::ErrorStatus setSelectionSet(const ads_name ss)
  13.         {
  14.                 long len;
  15.                 Acad::ErrorStatus es;;
  16.                 if (acedSSLength(ss,& len)!=RTNORM)
  17.                         return Acad::eInvalidInput;
  18.                         ads_name ename;
  19.                         AcDbObjectId id;
  20.                         for (int i=0;i < len;i++)
  21.                         {
  22.                         if (acedSSName(ss,i,ename)!=RTNORM)
  23.                         return Acad::eInvalidInput;
  24.                         if ((es=acdbGetObjectId(id,ename))!=Acad::eOk)
  25.                         return es;
  26.                                
  27.                         m_idArray.append(id);
  28.                 }
  29.                 if (m_idArray.length()==0)
  30.                         return Acad::eInvalidInput;
  31.                         return Acad::eOk;
  32.                 }
  33.                     }
  34. }


  35. 然后你的 entity()可以写:
  36. virtual AcDbEntity* entity() const
  37. {
  38.      return const_cast < yourDragGenJig::SelectionSet* >(&m_ss);
  39. }
  40. [/font]
复制代码
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-9 15:07:36 | 显示全部楼层
最初由 hanahana 发布
[B]有在具体一点实例吗,大虾。
我有点急
3x [/B]


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

使用道具 举报

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-9 15:19:45 | 显示全部楼层
最初由 hanahana 发布
[B]这么复杂,这下有的玩了 [/B]


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

使用道具 举报

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2002-9-12 16:42:33 | 显示全部楼层
最初由 hanahana 发布
[B]我搞不定,那位高手帮我 [/B]


AcEdJig类通过实体的WorldDraw在拖动的时候显示实体,如果是要拖动多个图中已经有的实体,你需要在你的DRAG类里面,从AcDbEntity继承个类,类里面可以用AcDbVoidPtrArry来保存多个实体,你需要把数据库已经有的实体科隆生成这些实体“备份”放入AcDbVoidPtrArray数据里面,拖动这些备份,这些备份的在拖动过程中的显示,需要你在从AcDbEntity继承的类里面分别对每个实体重载WorldDraw().

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 22:35 , Processed in 0.411555 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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