乐筑天下

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

如何更新AcDbViewport对象?

[复制链接]

3

主题

18

帖子

2

银币

初来乍到

Rank: 1

铜币
30
发表于 2007-12-26 11:14:12 | 显示全部楼层 |阅读模式
  1. static void Test_x1(void)
  2.         {
  3.                 // -- Get Layer's ObjectId for Freeze;
  4.                 AcDbObjectId FrzLay = acdbHostApplicationServices()->workingDatabase()->clayer();
  5.                 // -- Make to a array for freezeLayer use
  6.                 AcDbObjectIdArray FrzArray;
  7.                 FrzArray.removeAll();
  8.                 FrzArray.append(FrzLay);
  9.                 // -- get all the viewport's objectId, but not paperSpace.               
  10.                 AcDbObjectIdArray vps;
  11.                 vps.removeAll(); // -- clear it;
  12.                 Acad::ErrorStatus es = Acad::eInvalidInput;
  13.                 es = acdbHostApplicationServices()->workingDatabase()->getViewportArray(vps, false);
  14.                 if (es != Acad::eOk)
  15.                 {
  16.                         acutPrintf(_T("\nError(getViewportArray): %s"), acadErrorStatusText(es));
  17.                         return;
  18.                 }
  19.                 if (vps.isEmpty())
  20.                 {
  21.                         acutPrintf(_T("\nError(Viewport's IdArray): none viewport in it."));
  22.                         return;
  23.                 }
  24.                 for (int i = 0; i freezeLayersInViewport(FrzArray);
  25.                         if (es != Acad::eOk)
  26.                         {
  27.                                 acutPrintf(_T("\nError(FrzInVp): %s"), acadErrorStatusText(es));
  28.                                 pEnt->close();
  29.                                 continue;
  30.                         }
  31.                         /* UpdataDisplay? but it no work. this viewport have no change. */                       
  32.                         pEnt->updateDisplay();
  33.                         pEnt->close();
  34.                 }
  35.         }

我已将此代码写入所有视口上的冻结当前层。但没有我认为的工作。
命令完成时视口不会更新数据。
但是,如果我复制一个视口,层(我想要冻结的)已经在副本上冻结了......
查看Gif:

u045xum4seg.gif

u045xum4seg.gif

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

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

使用道具 举报

3

主题

18

帖子

2

银币

初来乍到

Rank: 1

铜币
30
发表于 2007-12-26 14:40:01 | 显示全部楼层
“LAYOUTREGENCTL”设置为什么?
此外,您可能需要记录为视窗修改的图形。
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2007-12-27 01:19:47 | 显示全部楼层

(getvar "LAYOUTREGENCTL ")和/或代码中的等效代码。
控制切换到布局时布局的显示行为。
0每次切换到布局选项卡时,都会重新生成
1模型,最后一个布局选项卡会缓存到内存中
2选项卡的初始显示是唯一一次重新生成,其他任何时候激活选项卡时,都会从保存在注册表中的缓存中读取
;初始值2
回复

使用道具 举报

3

主题

18

帖子

2

银币

初来乍到

Rank: 1

铜币
30
发表于 2007-12-27 01:29:33 | 显示全部楼层

谢谢。
将此 var 的值设置为“0”可以看到修改后的值。
有没有其他方法?不要改变系统变量的值?
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2007-12-27 01:39:40 | 显示全部楼层

也许是重生?
回复

使用道具 举报

3

主题

18

帖子

2

银币

初来乍到

Rank: 1

铜币
30
发表于 2007-12-27 01:54:57 | 显示全部楼层
只是猜测..
您是否尝试过(在代码中)
读取并保存变量
将变量设置为0
您的mojo
是否将变量重置为以前保存的值。
抱歉,我帮不上什么忙。
回复

使用道具 举报

116

主题

996

帖子

9

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1466
发表于 2007-12-27 02:33:43 | 显示全部楼层
前段时间遇到了这个问题,在多个视口中更新图层更改的成功有限。然后发现了我认为是一个未记录的函数。希望这有助于
  1. // declarations
  2. //
  3. void __stdcall acedRegenLayers(class AcArray > const &,int);
  4. void applyLayerChanges();
  5. Acad::ErrorStatus getLayerObjectIdArray();
  6. // Implementation
  7. //
  8. // Usage applies changes to Layer Table forcing update and regen
  9. //
  10. void applyLayerChanges(void)
  11. {
  12.   applyCurDwgLayerTableChanges();
  13.   if ( acdbHostApplicationServices()->workingDatabase()->tilemode() )
  14.      ads_regen();        // Modelspace
  15.   else {
  16.     AcDbObjectIdArray layerIds;
  17.     getLayerObjectIdArray(layerIds);
  18.     acutPrintf(_T("Regenerating layout"));
  19.     acedRegenLayers(layerIds, 0);
  20.   }
  21.   return;
  22. }
  23. // Usage return AcDbObjectIdArray of pDb LayerTable
  24. Acad::ErrorStatus getLayerObjectIdArray(AcDbObjectIdArray& objIds, bool External, AcDbDatabase* pDb)
  25. {
  26.         if ( pDb == NULL ) pDb =acdbHostApplicationServices()->workingDatabase();
  27.         Acad::ErrorStatus es = Acad::eOk;
  28.         AcDbLayerTable* pTable = 0;
  29.         es = pDb->getSymbolTable(pTable, AcDb::kForRead);
  30.         if ( es != Acad::eOk ) return es;
  31.         // Interate layers
  32.         //
  33.         AcDbLayerTableIterator* pIter = 0;
  34.         es = pTable->newIterator(pIter);
  35.         if ( es != Acad::eOk ) {
  36.                 pTable->close();
  37.                 return es;
  38.         }
  39.         for (pIter->start();!pIter->done();pIter->step())
  40.         {
  41.                 AcDbLayerTableRecord* pRecord = 0;
  42.                 es = pIter->getRecord(pRecord, AcDb::kForRead);
  43.                 if( es == Acad::eOk ) {
  44.                         if ( pRecord->isDependent() ) {
  45.                                 if (External == true)
  46.                                         objIds.append(pRecord->objectId());
  47.                         }
  48.                         else
  49.                                 objIds.append(pRecord->objectId());
  50.                 }
  51.                 pRecord->close();
  52.         }
  53.         delete pIter;
  54.         pIter = 0;
  55.         // Close layer table
  56.         pTable->close();
  57.         pTable = 0;
  58.         return es;
  59. }

从未找到任何关于函数int调用的信息,除了尝试和错误。
关于,
MJG
回复

使用道具 举报

1

主题

7

帖子

3

银币

初来乍到

Rank: 1

铜币
11
发表于 2007-12-27 03:34:59 | 显示全部楼层
MJG,这是一个伟大的发现,谢谢分享!
回复

使用道具 举报

3

主题

18

帖子

2

银币

初来乍到

Rank: 1

铜币
30
发表于 2007-12-27 11:55:53 | 显示全部楼层
感谢您的帮助。
回复

使用道具 举报

3

主题

18

帖子

2

银币

初来乍到

Rank: 1

铜币
30
发表于 2007-12-28 11:54:35 | 显示全部楼层

如果我保存变量并重置它,那是非常繁忙的代码。(例如,如果我插入一个Xref对象,可能有10-50个layerRecord,所以,如果保存和重置变量.........)
现在,在Arx init(On_kInitAppMsg())中,将变量设置为0:
问题是:如果这个变量设置为0,任何Model或Paper开关都会调用GraphicModify......
MJG的代码给我一些启发,谢谢。
谢谢~
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-5-2 14:54 , Processed in 1.106663 second(s), 75 queries .

© 2020-2025 乐筑天下

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