AcEdJig类
来源:互联网 发布:云播软件 编辑:程序博客网 时间:2024/06/05 14:32
以多段线类举例:
class AsdkPolyLineJig : public AcEdJig
{
public:
AsdkPolyLineJig(constAcGePoint3d po);
~AsdkPolyLineJig()
{
}
voiddoIt(); //操作画图的主流程
virtualDragStatus sampler(); //采样函数
virtualAdesk::Boolean update(); //更新函数
virtualAcDbEntity* entity() const; //返回实体
private:
AcDbPolyline*mpPolyLine;
int num;
int index;
double dist;
AcGePoint3dArray*mpPointArray;
};
//一般第一个点或者中心点在外部获取之后从外部传入。并且不用到皮筋线时,不要在该类中进行。例如三点画半圆时,确定第一个和第二个点后,在将其传入jig类中。
AsdkPolyLineJig::AsdkPolyLineJig(const AcGePoint3d po)
{
num = 4;
index = 0;
mpPointArray= new AcGePoint3dArray;
mpPointArray->setLogicalLength(num);
mpPointArray->setAt(index,po);
}
//主操作流程函数
//在画多段线时,需要将构造多段线的添加函数放在此函数中。由于sample和update函数都是实时更新的,无法判断获取的数据是否为所需要的,和sample、update函数的执行次数。所以在doIt函数中执行添加定点和判断获取到第几个点的操作。
void AsdkPolyLineJig::doIt() {
mpPolyLine =new AcDbPolyline;
mpPolyLine->addVertexAt(index,asPnt2d(asDblArray(mpPointArray->at(index))));
index++;
CString cs ="\n Please Input Point!";
setDispPrompt(cs);
AcEdJig::DragStatusstat = drag();
mpPolyLine->addVertexAt(index,asPnt2d(asDblArray(mpPointArray->at(index))));
index++;
cs = "\nPlease Input Point!";
setDispPrompt(cs);
AcEdJig::DragStatusstat2 = drag();
mpPolyLine->addVertexAt(index,asPnt2d(asDblArray(mpPointArray->at(index))));
index++;
cs = "\nPlease Input Point!";
setDispPrompt(cs);
AcEdJig::DragStatusstat3 = drag();
mpPolyLine->addVertexAt(index,asPnt2d(asDblArray(mpPointArray->at(index))));
index++;
append();
}
//获取实时数据,点、距离、角度
AcEdJig::DragStatus AsdkPolyLineJig::sampler() {
DragStatus stat;
setUserInputControls((UserInputControls) //设置预处理条件
(AcEdJig::kAccept3dCoordinates
| AcEdJig::kNoNegativeResponseAccepted
| AcEdJig::kNoZeroResponseAccepted));
static AcGePoint3dLp3d;
AcGePoint3d p3d;
//acquirePoint函数动态实时的获取数据点,随意晃动和点击所获得的点的返回值均为knormal
//所以无法确认所获取的点是否为所需数据。
stat = acquirePoint(p3d,mpPointArray->at(index - 1));
if (Lp3d != p3d)
{
Lp3d = p3d;
}
else if (stat== kNormal)
{
return kNoChange;
}
//index标示当前取第几个点
mpPointArray->setAt(index,p3d);
return stat;
}
// 更新函数
// 画椭圆和圆时可以直接在该函数中更新,但是多段线的更新无法再该处进行。
Adesk::Boolean AsdkPolyLineJig::update()
{
AcGePoint2d p2d= asPnt2d(asDblArray(mpPointArray->at(index)));
return Adesk::kTrue;
}
AcDbEntity* AsdkPolyLineJig::entity() const
{
return mpPolyLine;
}
- AcEdJig类
- 写AcEdJig类的一点心得
- acedDragGen与AcedJig类讨论
- 类
- 类
- 类
- 类
- 类
- 类
- 类
- 类
- 类
- 类
- 类
- 类
- 类
- 类
- 类
- jQuery动态添加.active属性实现按钮点击样式
- 【人脸检测】“人脸训练代码”项目笔记(3)——代码结构分析
- 前端的小玩意(7)——自动给每个字下方加着重号
- 区别:Thread.currentThread().getContextClassLoader() and Class.getClassLoader()
- 支付宝移动支付开发错误集锦
- AcEdJig类
- DexHunter学习笔记记录
- hdu 5773 The All-purpose Zero(Multi J,给你n个数(n<=1e5),每个数小于等于1000000,其中数为0的那些数可以变成其他任意的数,问变化之后的最长上升子序)
- 欢迎使用CSDN-markdown编辑器
- Android Studio使用NDK编译自己的.so库
- 欢迎使用CSDN-markdown编辑器
- iOS开发- 常见日志打印
- 操作系统——进程管理
- LINUX FTP用户的创建