乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 178|回复: 11

插入表生成?

[复制链接]

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2006-4-20 22:03:08 | 显示全部楼层 |阅读模式
好吧。
我想[从当前数据库]生成一个数量插入表,我试图找出关闭autocad的原因,但我做不到...无论如何请看看下面的代码,希望别人的眼睛比我的好....让我知道代码在哪里失败...
提前感谢您!
我正在使用AcDbTable类。
  1. static int TableQuantity() {
  2.         AcDbTable *pTable = NULL;
  3.         pTable = new AcDbTable();
  4.         if (pTable->isWriteEnabled()) {
  5.                 pTable->insertColumns(0,10.0);
  6.                 pTable->insertColumns(1,10.0);
  7.                 pTable->insertColumns(2,10.0);
  8.                 pTable->generateLayout();
  9.                 //pTable->insertRows(1,10.0);
  10.                 ////pTable->setNumColumns(3);
  11.                 ////pTable->setNumRows(1);
  12.                 ////pTable->generateLayout();
  13.                 // title
  14.                 pTable->setTextString(0,0,"Block Quantity");
  15.                 pTable->setAlignment(0,0,AcDb::kMiddleCenter);
  16.                 pTable->setTextHeight(0,0,1.65);
  17.                 // headers
  18.                 pTable->insertRows(1,10.0);
  19.                 pTable->generateLayout();
  20.                 pTable->setTextString(1,0,"Preview");
  21.                 pTable->setAlignment(1,0,AcDb::kMiddleCenter);
  22.                 pTable->setTextHeight(1,0,1.65);
  23.                 pTable->setTextString(1,1,"Name");
  24.                 pTable->setAlignment(1,1,AcDb::kMiddleCenter);
  25.                 pTable->setTextHeight(1,1,1.65);
  26.                 pTable->setTextString(1,2,"Number");
  27.                 pTable->setAlignment(1,2,AcDb::kMiddleCenter);
  28.                 pTable->setTextHeight(1,2,1.65);
  29.                 //pTable->generateLayout();
  30.                 AcDbBlockTablePointer pBlockTable(CURDB(), AcDb::kForRead);
  31.                 EOK(pBlockTable.openStatus());
  32.                 AcDbBlockTableIterator *pBTIterator;
  33.                 Acad::ErrorStatus es = pBlockTable->newIterator(pBTIterator, true, true);
  34.                 if (!EOKM(es))
  35.                         return false;
  36.                 for (; !pBTIterator->done(); pBTIterator->step()) {
  37.                         AcDbObjectId BTRId;
  38.                         es = pBTIterator->getRecordId(BTRId);
  39.                         if (!EOKM(es)) {
  40.                                 delete pBTIterator;
  41.                                 return false;
  42.                         }
  43.                         AcDbBlockTableRecordPointer pBlockTableRecord(BTRId, AcDb::kForRead);
  44.                         EOK(pBlockTableRecord.openStatus());
  45.                         // falta filtro para estos bloques "A$C#???????"
  46.                         // los bloques anidados llevan "|"
  47.                         if (// no anonymous blocks
  48.                                 pBlockTableRecord->isAnonymous() ||
  49.                                 // no xref's
  50.                                 pBlockTableRecord->isFromExternalReference() ||
  51.                                 // no overlaid xref's
  52.                                 pBlockTableRecord->isFromOverlayReference() ||
  53.                                 // no block layouts *MODEL_SPACE, *PAPER_SPACE...
  54.                                 pBlockTableRecord->isLayout()) {
  55.                                         continue;
  56.                                 }
  57.                                 AcDbBlockTableRecordIterator *pBTRIterator = NULL;
  58.                                 es = pBlockTableRecord->newIterator(pBTRIterator);
  59.                                 if (!EOKM(es))
  60.                                         continue;
  61.                                 const TCHAR *bName;
  62.                                 es = pBlockTableRecord->getName(bName);
  63.                                 if (!EOKM(es)) {
  64.                                         delete pBTIterator;
  65.                                         return false;
  66.                                 }
  67.                                 char text [33];
  68.                                 AcDbObjectIdArray ids;
  69.                                 if (pBlockTableRecord->getBlockReferenceIds(ids) == Acad::eOk) {
  70.                                         //acutPrintf("\nBlock name %s", bName);
  71.                                         //acutPrintf("\nCount %d", ids.length());
  72.                                         int cnt;
  73.                                         cnt = ids.length();
  74.                                         itoa(cnt,text,10);
  75.                                 }
  76.                                 pTable->insertRows(1,10.0);
  77.                                 pTable->generateLayout();
  78.                                 pTable->setBlockTableRecordId(pTable->numRows(),0,BTRId,true);
  79.                                 pTable->setAlignment(pTable->numRows(),0,AcDb::kMiddleCenter);
  80.                                 pTable->setTextString(pTable->numRows(),1,bName);
  81.                                 pTable->setAlignment(pTable->numRows(),1,AcDb::kMiddleCenter);
  82.                                 pTable->setTextHeight(pTable->numRows(),1,1.65);
  83.                                 pTable->setTextString(pTable->numRows(),2,text);
  84.                                 pTable->setAlignment(pTable->numRows(),2,AcDb::kMiddleCenter);
  85.                                 pTable->setTextHeight(pTable->numRows(),2,1.65);
  86.                                 //pTable->generateLayout();
  87.                 }
  88.                 delete pBTIterator;
  89.                 AcDbObjectId curSpaceId=CURDB()->currentSpaceId();
  90.                 AcDbBlockTableRecord *pBlkRec = NULL;
  91.                 if (acdbOpenObject(pBlkRec, curSpaceId, AcDb::kForWrite)==Acad::eOk) {       
  92.                         pBlkRec->appendAcDbEntity(pTable);
  93.                         pBlkRec->close();
  94.                         pTable->close();
  95.                 }
  96. }
  97. }

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2006-4-20 22:28:04 | 显示全部楼层

谢谢Mick,
我现在正在查看唯一可用的样本SDK附带的样本]...奇怪的是网上没有另一个...至少在我的谷歌搜索和adesk论坛上是这样....
我会回来的....
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2006-4-21 11:21:09 | 显示全部楼层
到目前为止,发生的是我在发布的原始代码上的序列,最新的测试它没有关闭autocad。
用代码的话来说,它必须遵循以下内容:
  1.         AcDbTable *pTable = NULL;
  2.         pTable = new AcDbTable();
  3.         // 2 rows - title and headers
  4.         pTable->insertRows(0,10.0);
  5.         // 3 columns
  6.         pTable->insertColumns(0,10.0,2);
  7.         pTable->setTextString(0,0,"TITLE");
  8.         // merge the first row for the title
  9.         pTable->mergeCells(0,0,0,pTable->numColumns() - 1);

然后,从这里我们可以扫描块并一次将它们添加到表中一行[嗯,听起来很简单,我需要继续进行测试并自己找出答案...]
玩得开心,
Luis。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2006-4-21 14:32:50 | 显示全部楼层
更新...
我正在运行该功能.....相当不错!!!
如果我们首先创建基本表,然后重新打开对象并将数据填充到表中,就可以了。
现在,在将表追加到数据库之前,我将尝试填充该表...
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2006-4-21 16:00:31 | 显示全部楼层

是的,查克,你是对的(一如既往)。我只记得在某个地方读到它们必须附加,否则它会失败。自从我创建并删除它们以来。它可能失败的原因是未能删除内存区域/poly的(?)。我必须把它挖出来再看一遍。
不过,我想说的是,有时内存中的东西和数据库中的东西可能无法很好地结合在一起(?)。
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2006-4-21 17:10:07 | 显示全部楼层
我试图在[填充表]之前完成所有操作......并且根本不起作用,所以我最终首先完成表骨架,然后读取所有插入并将它们传递到表中,现在没有任何问题,并且用户没有任何线索,因为它在一眨眼的功夫就完成了这些......[所有表的东西都是根据帮助文档在内存中完成的btw]
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2006-4-21 20:06:53 | 显示全部楼层
对不起,米克。 我并不是想分散你对所表达的观点的注意力。 只是你举出的这个例子恰好是我最近真正做过的事情,所以它在我脑海中记忆犹新(你知道我无法抗拒一个机会从我的嘴里射掉)。
至于桌子,恐怕我一点头绪都没有。 2000i没有它们。 有时我担心我的技能会过时,因为我们可能永远不会升级。 我被搞砸了。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2006-4-21 20:10:51 | 显示全部楼层

没问题,我的朋友。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2006-4-21 20:18:07 | 显示全部楼层
当你是对的,无需道歉查克。
就被抛在后面而言,在更高版本中需要对数据库执行的大多数操作几乎相同,最大的区别在于MFC和新的“功能”(如Tables)。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2006-4-21 20:24:44 | 显示全部楼层

我认为仅仅保持湿巾湿润就能让你超越常规..之后的任何事情都是额外奖励
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 17:59 , Processed in 0.185178 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表