- UID
- 256627
- 积分
- 0
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2005-5-10
- 最后登录
- 1970-1-1
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?立即注册
×
void crtLine()
{
int rc, i = 0;//输入返回状态和当前点数
char kw[8];//获取用户输入关键字
AcGePoint3d p;
AcGePoint3dArray ptArr;//保存所有输入的有效点
AcDbObjectId objId;
AcDbLine *pLine = NULL;
AcDbBlockTable *pBlockTable = NULL;
AcDbBlockTableRecord *pBlockTableRecord = NULL;
//打开数据库
acdbHostApplicationServices()->workingDatabase()->
getSymbolTable(pBlockTable, AcDb::kForRead);
pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
pBlockTable->close();
while (TRUE)
{
if (i == 0)//没有点
{
rc = acedGetPoint(NULL, "\n指定第一点: ", asDblArray(p));
}
else if (i < 3)//少于三个点
{
acedInitGet(RSG_OTHER, "Undo _ U");
rc = acedGetPoint(asDblArray(p),
"\n指定下一点或[放弃(U)]: ", asDblArray(p));
}
else//大于三个点
{
acedInitGet(RSG_OTHER, "Close Undo _ C U");
rc = acedGetPoint(asDblArray(p),
"\n指定下一点或[闭合(C)/放弃(U)]: ", asDblArray(p));
}
if (i == 0 && rc == RTNORM)
{
ptArr.append(p);
++i;
}
else if (i == 1)
{
if (rc == RTNORM)//有两个点并返回正常,创建一条直线
{
ptArr.append(p);
++i;
pLine = new AcDbLine(ptArr.first(), p);
actrTransactionManager->startTransaction();
pBlockTableRecord->appendAcDbEntity(pLine);
pLine->close();
}
else
{
actrTransactionManager->abortTransaction();
break;
}
}
else
{
if (rc == RTNORM)//没增加一个点,创建一条直线
{
pLine = new AcDbLine(ptArr.last(), p);
ptArr.append(p);
++i;
actrTransactionManager->startTransaction();
pBlockTableRecord->appendAcDbEntity(pLine);
pLine->close();
}
else if (rc == RTKWORD)
{
if (acedGetInput(kw) != RTNORM) break;;
if (strcmp(kw, "U") == 0)
{
ptArr.removeLast();
--i;
p = ptArr.last();
actrTransactionManager->abortTransaction();
}
else if (strcmp(kw, "C") == 0)
{
pLine = new AcDbLine(p, ptArr.first());
pBlockTableRecord->appendAcDbEntity(pLine);
pLine->close();
break;
}
}
else break;
}
}
pBlockTableRecord->close();
actrTransactionManager->endTransaction();
}
存在的问题是:直线创建完之后,选择直线改变颜色没有反应,要regen命令后才有反应
另外当把创建的直线与其它物体求交点之类的操作,都求不出来,好像是实体没进入数据库似的
但把图形保存起来重新打开就正常
请问该怎么处理 |
|