明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1758|回复: 8

再次请教!

[复制链接]
发表于 2006-7-5 17:12:00 | 显示全部楼层 |阅读模式

再次请教各位大虾:程序代码如下,完全是参考的例子上的:

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");
  }
  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文件的块插到当前稳当的数据库中了,但是不知为什么,视图上并没有显示,查找当前的数据库,发现块名在里面,就是没有图形,请教各位!

另外在AcDbObjectId blockId;这句话时,调试时出现了find symbols对话框,要求查找acdbhdr.pdb文件,cancel掉以后程序能继续执行,真是奇怪,是vc的毛病么,请教!

我的程序是在非模对话框的单击事件里调用的,不知是不是有影响,谢谢各位!

发表于 2006-7-5 23:51:00 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
 楼主| 发表于 2006-7-6 01:08:00 | 显示全部楼层

谢谢二楼大虾,不过我按照你说的改了其中的:

if((es=pDb->insert(blockId, pBlockName,pNewDb, true))==Acad::eOk)
  {
   acutPrintf("\ninsert ok\n");
   delete pNewDb;
  }
  else
  {
   AfxMessageBox("Insert failed");
   delete pNewDb;
   return;
  }

删除了pNewDb数据库,但是问题依旧啊。。。。。。

是不是因为加了这句:acDocManager->lockDocument(curDoc(),AcAp::kWrite,NULL,NULL,true);锁定了文档,使图块写不尽去了呢,但是不加这句 程序就出错误,而且将解锁语句acDocManager->unlockDocument(curDoc()); 提前也会出错,头疼。。。。

 楼主| 发表于 2006-7-6 01:12:00 | 显示全部楼层
一边看世界杯,一边想问题,呵呵,ppstream这个网络电视不错,播放很流畅。
 楼主| 发表于 2006-7-6 23:33:00 | 显示全部楼层

还是想不出来,那位大虾帮帮忙啊,不用输入数据的图块能显示,但是有的图块要求输入一些信息的显示不出来,如果用autocad的insert命令通过对话框也可以加入,和锁定文档没什么关系,那位大虾帮忙想想办法!!!

 

 楼主| 发表于 2006-7-7 22:52:00 | 显示全部楼层

???/

请教高手,帮忙看看,。。。。。。。。。急。。。

 楼主| 发表于 2006-7-8 08:18:00 | 显示全部楼层

这个问题应该等价于如何用arx来实现autocad中的insert命令,不过不是动态的,是静态的,也就是并不要求用户输入数据,各位认为如何去做,请教。。。。

 楼主| 发表于 2006-7-8 17:09:00 | 显示全部楼层

咋没人理我呢???????

 楼主| 发表于 2006-7-10 22:09:00 | 显示全部楼层

搞定了,!!!!

代码没变,我也不知道怎么就可以了,,,,

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

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 23:30 , Processed in 0.179855 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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