<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic Re: AcDbViewport::setVisualStyle() do not work in ObjectARX Forum</title>
    <link>https://forums.autodesk.com/t5/objectarx-forum/acdbviewport-setvisualstyle-do-not-work/m-p/7406173#M7664</link>
    <description>&lt;P&gt;I've just tested my proposed code. It will work if the viewport already has a "3D visual style" but not if it has the style "2D wireframe".&lt;/P&gt;
&lt;P&gt;If you switch from "2D wireframe" to a 3D visual style, an AcGsView needs to be created. This code works for AutoCAD 2018:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;//Need AcDrawBridge.lib for AcGsKernelDescriptor::k3DDrawing
#pragma comment(lib, "AcDrawBridge.lib")

void SetVP(AcGePoint3d modelCenter, AcDbObjectId idVP)
{
	Acad::ErrorStatus es;
	AcDbObjectId vsId = AcDbObjectId::kNull;
	AcDbDictionaryPointer pNOD(acdbHostApplicationServices()-&amp;gt;workingDatabase()-&amp;gt;visualStyleDictionaryId(), AcDb::kForRead);
	pNOD-&amp;gt;getAt(ACRX_T("Conceptual"), vsId);

 
	int vpNum = -1;
	AcDbViewport *pViewport;	
	if ((es = acdbOpenObject(pViewport, idVP, AcDb::kForWrite)) == Acad::eOk)
	{
		vpNum = pViewport-&amp;gt;number();
		pViewport-&amp;gt;setVisualStyle(vsId);
		pViewport-&amp;gt;setViewTarget(modelCenter);
		pViewport-&amp;gt;close();
	}

	AcGsView *pView = acgsGetCurrent3dAcGsView(vpNum);
	if (!pView)
	{
		AcGsKernelDescriptor gsKernel;
		gsKernel.addSupport(AcGsKernelDescriptor::k3DDrawing);
		pView = acgsObtainAcGsView(vpNum, gsKernel);    // create if necessary.
	}
	if (pView)
		pView-&amp;gt;show();

	void ads_regen();
	ads_regen();
}&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
    <pubDate>Mon, 25 Sep 2017 12:21:54 GMT</pubDate>
    <dc:creator>tbrammer</dc:creator>
    <dc:date>2017-09-25T12:21:54Z</dc:date>
    <item>
      <title>AcDbViewport::setVisualStyle() do not work</title>
      <link>https://forums.autodesk.com/t5/objectarx-forum/acdbviewport-setvisualstyle-do-not-work/m-p/7379834#M7662</link>
      <description>&lt;P&gt;hi, community.&lt;/P&gt;&lt;P&gt;I'm trying to change viewport's visual style, but it doesn't,&amp;nbsp;&lt;SPAN&gt;visual style label in layout winodw change, but make no change in entities.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;PRE&gt;static void func(AcDbViewport* pViewport, const AcGePoint3d&amp;amp; modelCenter)
{
	if (pViewport == nullptr)
	{
		ASSERT(pViewport != nullptr);
		return;
	}

	acedSetCurrentVPort(pViewport);
	acedMspace();

	AcDbObjectId vsId = AcDbObjectId::kNull;
	AcDbDictionaryPointer pNOD(acdbHostApplicationServices()-&amp;gt;workingDatabase()-&amp;gt;visualStyleDictionaryId(), AcDb::kForRead);
	pNOD-&amp;gt;getAt(ACRX_T("&lt;STRONG&gt;Conceptual&lt;/STRONG&gt;"), vsId);

	&lt;EM&gt;&lt;STRONG&gt;pViewport-&amp;gt;setVisualStyle(vsId);&lt;/STRONG&gt;&lt;/EM&gt;

	//acedCommand(RTSTR, _T("_vscurrent"), RTSTR, _T("_c"), 0);
	acedCommand(RTSTR, _T("-view"), RTSTR, _T("_swiso"), 0);

	pViewport-&amp;gt;setViewTarget(modelCenter);

	pViewport-&amp;gt;updateDisplay();
	pViewport-&amp;gt;syncModelView();
}&lt;/PRE&gt;&lt;P&gt;&lt;SPAN&gt;the entities in the viewport is still&amp;nbsp;&lt;STRONG&gt;2D wireframe, &lt;/STRONG&gt;which is default, make no change.&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;&lt;STRONG&gt;&amp;nbsp;&lt;/STRONG&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;Any wrong with my code?&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;pls help&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN&gt;thx!&lt;/SPAN&gt;&lt;/P&gt;</description>
      <pubDate>Thu, 14 Sep 2017 08:38:31 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/objectarx-forum/acdbviewport-setvisualstyle-do-not-work/m-p/7379834#M7662</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2017-09-14T08:38:31Z</dc:date>
    </item>
    <item>
      <title>Re: AcDbViewport::setVisualStyle() do not work</title>
      <link>https://forums.autodesk.com/t5/objectarx-forum/acdbviewport-setvisualstyle-do-not-work/m-p/7405988#M7663</link>
      <description>&lt;P&gt;You shoulnd't call&amp;nbsp; &lt;FONT face="courier new,courier"&gt;acedCommand(RTSTR, _T("-view"), RTSTR, _T("_swiso"), 0);&lt;/FONT&gt;&lt;BR /&gt;while you have &lt;FONT face="courier new,courier"&gt;pViewport&lt;/FONT&gt; open.&lt;BR /&gt;&lt;BR /&gt;&lt;FONT face="courier new,courier"&gt;pViewport-&amp;gt;updateDisplay()&lt;/FONT&gt;&amp;nbsp; is called automatically when you close the viewport. Usually you don't need to call it.&lt;/P&gt;
&lt;P&gt;I think you shouldn't call &lt;FONT face="courier new,courier"&gt;pViewport-&amp;gt;syncModelView()&lt;/FONT&gt; as well. According to the docs it &lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; "updates the parameters of the AcDbViewport with parameters in the associated view."&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;which is not what you want. Maybe you have to call REGEN or ads_regen() ( see &lt;A title="ads_regen()" href="http://jprdintprev.autodesk.com/adn/servlet/devnote?siteID=4814862&amp;amp;id=11845587&amp;amp;preview=1&amp;amp;linkID=4900509" target="_blank"&gt;here&lt;/A&gt; ) to update the display.&lt;/P&gt;
&lt;P&gt;Try this:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;void SetVpCenterAndStyle(AcGePoint3d modelCenter)
{
	AcDbObjectId vsId = AcDbObjectId::kNull;
	AcDbDictionaryPointer pNOD(acdbHostApplicationServices()-&amp;gt;workingDatabase()-&amp;gt;visualStyleDictionaryId(), AcDb::kForRead);
	pNOD-&amp;gt;getAt(ACRX_T("Conceptual"), vsId);
		
	AcDbViewport *pViewport;
	AcDbObjectId idVP;
	if ( (es=acdbOpenObject(pViewport, idVP, AcDb::kForWrite)) == Acad::eOk )
	{
		pViewport-&amp;gt;setVisualStyle(vsId);
		pViewport-&amp;gt;setViewTarget(modelCenter);
		pViewport-&amp;gt;close();
	}
	
	void ads_regen();
	ads_regen();
}&lt;/PRE&gt;
&lt;P&gt;Note that this code only sets the view target and the visual style.&lt;/P&gt;
&lt;P&gt;You can also set the view direction directly within the viewport without using &lt;FONT face="courier new,courier"&gt;acedCommand()&lt;/FONT&gt;, which should be avoided anyway.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 25 Sep 2017 10:44:26 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/objectarx-forum/acdbviewport-setvisualstyle-do-not-work/m-p/7405988#M7663</guid>
      <dc:creator>tbrammer</dc:creator>
      <dc:date>2017-09-25T10:44:26Z</dc:date>
    </item>
    <item>
      <title>Re: AcDbViewport::setVisualStyle() do not work</title>
      <link>https://forums.autodesk.com/t5/objectarx-forum/acdbviewport-setvisualstyle-do-not-work/m-p/7406173#M7664</link>
      <description>&lt;P&gt;I've just tested my proposed code. It will work if the viewport already has a "3D visual style" but not if it has the style "2D wireframe".&lt;/P&gt;
&lt;P&gt;If you switch from "2D wireframe" to a 3D visual style, an AcGsView needs to be created. This code works for AutoCAD 2018:&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;PRE&gt;//Need AcDrawBridge.lib for AcGsKernelDescriptor::k3DDrawing
#pragma comment(lib, "AcDrawBridge.lib")

void SetVP(AcGePoint3d modelCenter, AcDbObjectId idVP)
{
	Acad::ErrorStatus es;
	AcDbObjectId vsId = AcDbObjectId::kNull;
	AcDbDictionaryPointer pNOD(acdbHostApplicationServices()-&amp;gt;workingDatabase()-&amp;gt;visualStyleDictionaryId(), AcDb::kForRead);
	pNOD-&amp;gt;getAt(ACRX_T("Conceptual"), vsId);

 
	int vpNum = -1;
	AcDbViewport *pViewport;	
	if ((es = acdbOpenObject(pViewport, idVP, AcDb::kForWrite)) == Acad::eOk)
	{
		vpNum = pViewport-&amp;gt;number();
		pViewport-&amp;gt;setVisualStyle(vsId);
		pViewport-&amp;gt;setViewTarget(modelCenter);
		pViewport-&amp;gt;close();
	}

	AcGsView *pView = acgsGetCurrent3dAcGsView(vpNum);
	if (!pView)
	{
		AcGsKernelDescriptor gsKernel;
		gsKernel.addSupport(AcGsKernelDescriptor::k3DDrawing);
		pView = acgsObtainAcGsView(vpNum, gsKernel);    // create if necessary.
	}
	if (pView)
		pView-&amp;gt;show();

	void ads_regen();
	ads_regen();
}&lt;/PRE&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;</description>
      <pubDate>Mon, 25 Sep 2017 12:21:54 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/objectarx-forum/acdbviewport-setvisualstyle-do-not-work/m-p/7406173#M7664</guid>
      <dc:creator>tbrammer</dc:creator>
      <dc:date>2017-09-25T12:21:54Z</dc:date>
    </item>
    <item>
      <title>Re: AcDbViewport::setVisualStyle() do not work</title>
      <link>https://forums.autodesk.com/t5/objectarx-forum/acdbviewport-setvisualstyle-do-not-work/m-p/7496017#M7665</link>
      <description>thx, it works!</description>
      <pubDate>Fri, 27 Oct 2017 07:36:50 GMT</pubDate>
      <guid>https://forums.autodesk.com/t5/objectarx-forum/acdbviewport-setvisualstyle-do-not-work/m-p/7496017#M7665</guid>
      <dc:creator>Anonymous</dc:creator>
      <dc:date>2017-10-27T07:36:50Z</dc:date>
    </item>
  </channel>
</rss>

