找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1482|回复: 6

[求助]:请教咱论坛的高手大哥!(急)

[复制链接]
发表于 2006-7-8 08:26:42 | 显示全部楼层 |阅读模式

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

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

×
于如何用arx来实现autocad中的insert命令,不过不是动态的,是静态的,也就是并不要求用户输入数据,各位认为如何去做,请教。。。。
有程序一段,完全是参考的例子上的:

dwgpath="D:\\Drawing1.dwg";
acDocManager->lockDocument(curDoc(),AcAp::kWrite,NULL,NULL,true);
  
AcDbDatabase *pNewDb =new AcDbDatabase(Adesk::kFalse);

Acad::ErrorStatus es=pNewDb->readDwgFile(dwgpath , _SH_DENYNO);
if (es!=Acad::eOk)
{
  acutPrintf("\nThe file %s cannot be opend",dwgpath);
  return;
}  
AcDbDatabase *pDb;
pDb =acdbHostApplicationServices ()->workingDatabase ();
   
CString pBlockName=BlockDwg;
  AcDbObjectId blockId;  //出问题的地方
  if((es=pDb->insert(blockId, pBlockName,pNewDb, true))==Acad::eOk)
  {
   acutPrintf("\ninsert ok\n");
delete pNewDb;
  }
  else
  {
   AfxMessageBox("Insert failed");
   delete pNewDb;
   return;
  }
     
  const AcGePoint3d& Pt=AcGePoint3d(0,0,0);
  
  double Angle=0;
  double XrefScale=0;
  AcDbBlockReference *pBlkRef = new AcDbBlockReference;
  pBlkRef->setBlockTableRecord(blockId);
  pBlkRef->setPosition(Pt);
  pBlkRef->setRotation(Angle);
  pBlkRef->setScaleFactors( XrefScale);
  
  AcDbBlockTable *pBlockTable;
  pDb->getSymbolTable(pBlockTable, AcDb::kForRead);
  
  AcDbBlockTableRecord *pBlockTableRecord;
  pBlockTable->getAt(ACDB_MODEL_SPACE, pBlockTableRecord, AcDb::kForWrite);
  pBlockTable->close();
  AcDbObjectId newEntId; //出问题的地方
  pBlockTableRecord->appendAcDbEntity(newEntId, pBlkRef);
  pBlockTableRecord->close();
  
  AcDbBlockTableRecord *pBlockDef;
  acdbOpenObject(pBlockDef, blockId, AcDb::kForRead);
  
  AcDbBlockTableRecordIterator *pIterator;
  pBlockDef->newIterator(pIterator);
  AcGePoint3d basePoint;
  AcDbEntity *pEnt;
  AcDbAttributeDefinition *pAttdef;
  for (pIterator->start(); !pIterator->done(); pIterator->step())//将source.dwg中所有的Attibute进行遍历
  {
   pIterator->getEntity(pEnt, AcDb::kForRead);
   pAttdef = AcDbAttributeDefinition::cast(pEnt);
   if (pAttdef != NULL && !pAttdef->isConstant()) {
    AcDbAttribute *pAtt = new AcDbAttribute();
    pAtt->setPropertiesFrom(pAttdef);
    pAtt->setInvisible(pAttdef->isInvisible());
    basePoint = pAttdef->position();
    basePoint += pBlkRef->position().asVector();
    pAtt->setPosition(basePoint);
    pAtt->setHeight(pAttdef->height());
    pAtt->setRotation(pAttdef->rotation());
    pAtt->setTag("Tag");
    pAtt->setFieldLength(25);
    char *pStr = pAttdef->tag();
    pAtt->setTag(pStr);
       acutDelString(pStr);
    pAtt->setFieldLength(pAttdef->fieldLength());
    pAtt->setTextString("-");
   
    AcDbObjectId attId;
   
    pBlkRef->appendAttribute(attId, pAtt);
    pAtt->close();
   }
   pEnt->close(); // use pEnt... pAttdef might be NULL
  }
  delete pIterator;

  acDocManager->unlockDocument(curDoc());

程序编译无误,也将dwg文件的块插到当前稳当的数据库中了,但是不知为什么,视图上并没有显示,查找当前的数据库,发现块名在里面,就是没有图形。当在autocad里调用insert命令时,能从数据库里直接动态的插入此图块,各位能否帮忙解决。。。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-7-8 11:10:41 | 显示全部楼层
char pInsert[MAX_PATH];
                //插入后是一个打散的状态
                strcat(strcpy(pInsert,"*"),pBlockName);               

                resbuf *rbNew = ads_buildlist(RTSTR,"insert",
                                                           RTSTR        , pInsert,
                                                           RTPOINT        , ptInsert,
                                                           RTREAL        , scale,
                                                           RTREAL        , rotate,
                                                           0
                                                        );

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

使用道具 举报

发表于 2006-7-8 16:33:54 | 显示全部楼层
你所指的两个出问题的地方是否因为没有包含必要的头文件呢?
dbid.h
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-7-8 17:11:26 | 显示全部楼层
cutechun:我按照你的方法加到代码中去:
strcat(strcpy(pInsert,"*"),pBlockName);
                               
                                resbuf *rbNew = ads_buildlist(RTSTR,"insert",
                                        RTSTR , pInsert,
                                        RTPOINT , (0,0),
                                        RTREAL , 0.0,
                                        RTREAL , 0.0,
                                        0
                                        );
                               
                                ads_cmd(rbNew);
                                ads_relrb(rbNew);  
但是出现异常:unhandled exception in acad.exe(ACUTIL15.DLL): 0xC0000005: Access Violation
不知道为什么???
三楼RedCad,我加入了dbid.h这个头文件问题没变,看来不是头文件的问题了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-7-9 10:01:14 | 显示全部楼层
要通过临时数据库来插入!
如下:
AcDbDatabase* pTmpDb= new AcDbDatabase(Adesk::kTrue);//创建临时数据库,注意它不是空的图形数据库
        extDb->wblock(pTmpDb, blockId);//将图块写入临时数据库中
        delete extDb;

        AcDbObjectId id;
        acdbCurDwg()->insert(id, pcBlockName, pTmpDb);//通过临时数据库将块插入当前图形的块表中
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-7-9 10:30:06 | 显示全部楼层
把你的问题在简化一下,核心问题是否为在模型空间中无法显示出来,而其它问题均正常呢?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-23 17:35 , Processed in 0.409773 second(s), 43 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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