乐筑天下

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

setVisualStyle没有效果

[复制链接]

3

主题

9

帖子

1

银币

初来乍到

Rank: 1

铜币
21
发表于 2017-9-18 02:26:53 | 显示全部楼层 |阅读模式
嗨,社区,
我想将“概念”视觉风格设置为一个视点,但它没有效果。
在Autocad上,我发现视口上的标签更改为“概念”,但实体没有更改,仍然是默认样式“2D线框”。
这是我的代码:
  1. void AdjustViewport(const CString& strLayout, int nIndex, const std::vector& vecEnt, const AcGePoint3d& modelCenter)
  2. {
  3.         AcDbViewport* pViewport = GetViewport(strLayout, nIndex);
  4.         if (pViewport == nullptr)
  5.         {
  6.                 ASSERT(pViewport != nullptr);
  7.                 return;
  8.         }
  9.         int nRetActiveLayout = acedCommand(RTSTR, _T("layout"), RTSTR, _T(""), RTSTR, _T("testCopy"), 0);
  10.         ASSERT(nRetActiveLayout == RTNORM);
  11.         acedMspace();
  12.         Acad::ErrorStatus es = acedSetCurrentVPort(pViewport);
  13.         ASSERT(es == Acad::eOk);
  14.         int nSetSWISO = acedCommand(RTSTR, _T("-view"), RTSTR, _T("_swiso"), 0);
  15.         ASSERT(nSetSWISO == RTNORM);
  16.         ads_name ssname;
  17.         acedSSAdd( NULL, NULL, ssname );
  18.         GroupSelect(vecEnt, ssname);
  19.         acedSSSetFirst( ssname, NULL );
  20.         int nZOOM = acedCommand(
  21.                 RTSTR, _T("_ZOOM"),
  22.                 RTSTR, _T("_OBJECT"),
  23.                 RTPICKS, ssname,
  24.                 RTSTR, _T(""),
  25.                 RTNONE);
  26.         ASSERT(nZOOM == RTNORM);
  27.         acedSSFree(ssname);
  28.         acedSSSetFirst( NULL, NULL );
  29.         AcDbObjectId vsId = AcDbObjectId::kNull;
  30.         AcDbDictionaryPointer pNOD(acdbHostApplicationServices()->workingDatabase()->visualStyleDictionaryId(), AcDb::kForRead);
  31.         pNOD->getAt(ACRX_T("Conceptual"), vsId);
  32.         Acad::ErrorStatus esSetVS = pViewport->setVisualStyle(vsId);
  33.         ASSERT(esSetVS == Acad::eOk);
  34.         //SetVisualStyle(vecEnt);
  35.         pViewport->updateDisplay();
  36.         pNOD->close();
  37.         pViewport->close();
  38. }

请帮忙,thx!

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

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

使用道具 举报

0

主题

2

帖子

2

银币

初来乍到

Rank: 1

铜币
2
发表于 2018-11-7 00:13:55 | 显示全部楼层
不知道如何帮助我?关于我正在寻找的知识,我正在跟进分享这些信息。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2018-11-7 00:56:25 | 显示全部楼层
简单观察一下:您能否将更改视图设置等的代码从该函数中移到它自己的函数中(即与更改视窗样式无关的所有代码),然后再看看发生了什么?类似下面的(注:未测试!)    void SetViewportStyle(const CString & strLayout,int nIndex,string styleName)。
{。
acdb viewport * pview port = get viewport(strLayout,nIndex);// -这个函数在哪里??。

if(pview port = = null ptr)。
{。
返回;。
}。

AcDbObjectId vsId = AcDbObjectId::kNull;。
AcDbDictionaryPointer pNOD(acdbHostApplicationServices()-> working database()-> visualStyleDictionaryId(),AcDb::kForRead);。
pNOD-> getAt(ACRX _ T(style name),vsId);。

if(vsId = = AcDbObjectId::knull)。
{。
返回;。
}。
// -不应该在这里打开视口进行写入吗??。
Acad::error status esse TVs = pview port-> setvisual style(vsId);。
if(esse TVs = = Acad::eOk)。
{。
pview port-> update display();。

pNOD-> close();。
pview port-> close();。
}。
}。
实际上,现在仔细看一下,这段代码有许多根本的缺失/错误。您应该使用事务来打开数据库对象,如pNOD等。尝试编写一次只做一件事的函数,在同一个函数中混合其他任务只会增加干扰,使调试更加困难。如果您需要做一些事情,那么从一个函数(比如您的命令函数)中调用较小的函数,如下所示: void my command(){  DoThis();然后this(); and this();返回;}。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-4 07:52 , Processed in 0.147640 second(s), 58 queries .

© 2020-2025 乐筑天下

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