- UID
- 4442
- 积分
- 155
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-4-28
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
我做了一个拖动选择集,但不知在下面 update()中还要加些什么,另外程序运行是出错,出错信息在附件中
class AsdkEllipse : public AcEdJig
{
class SelectionSet : public AcDbEntity
{
AcDbObjectIdArray m_idArray;
AcGeMatrix3d m_mat;
public:
void setTransform(const AcGeMatrix3d& mat)
{
m_mat = mat;
}
Acad::ErrorStatus setSelectionSet(const ads_name ss)
{
long len;
Acad::ErrorStatus es;;
if (acedSSLength(ss,& len)!=RTNORM)
return Acad::eInvalidInput;
ads_name ename;
AcDbObjectId id;
for (int i=0;i < len;i++)
{
if (acedSSName(ss,i,ename)!=RTNORM)
return Acad::eInvalidInput;
if ((es=acdbGetObjectId(id,ename))!=Acad::eOk)
return es;
m_idArray.append(id);
}
if (m_idArray.length()==0)
return Acad::eInvalidInput;
return Acad::eOk;
}
};
public :
AsdkEllipse();
void doIt();
virtual DragStatus sampler();
virtual Adesk::Boolean update();
virtual AcDbEntity * entity()const;
private:
SelectionSet pZFSSelect;
AcGePoint3d m_point1,m_point2;
ads_name m_name;
};
//************************************
AsdkEllipse::AsdkEllipse()
{
}
void AsdkEllipse::doIt()
{
if(acedSSGet(NULL,NULL,NULL,NULL,m_name)!=RTNORM)
return;
if(acedGetPoint(NULL,NULL,asDblArray(m_point1))!=RTNORM)
return;
pZFSSelect.setSelectionSet(m_name);
AcEdJig::DragStatus stat=drag();
append();
acedSSFree(m_name);
}
AcEdJig::DragStatus AsdkEllipse::sampler()
{
DragStatus stat;
static AcGePoint3d p1;
stat=acquirePoint(m_point2);
if(m_point2!=p1)
p1=m_point2;
else if(stat==AcEdJig::kNormal)
return AcEdJig::kNoChange;
return stat;
}
Adesk::Boolean AsdkEllipse::update()
{
AcGeMatrix3d mat;
mat(0,0)=1,mat(0,1)=0,mat(0,2)=0,mat(0,3)=m_point2.x-m_point1.x;
mat(1,0)=0,mat(1,1)=1,mat(1,2)=0,mat(1,3)=m_point2.y-m_point1.y;
mat(2,0)=0,mat(2,1)=0,mat(2,2)=1,mat(2,3)=0;
mat(3,0)=0,mat(3,1)=0,mat(3,2)=0,mat(3,3)=1;
pZFSSelect.setTransform(mat);
//***//
return Adesk::kTrue;
}
AcDbEntity * AsdkEllipse::entity()const
{
return const_cast < AsdkEllipse::SelectionSet* >(&pZFSSelect);
}
void SUYxuanzedd()
{
AsdkEllipse *pJig=new AsdkEllipse;
pJig->doIt();
delete pJig;
} |
|