Init
This commit is contained in:
@@ -0,0 +1,144 @@
|
||||
/***********************************************************************************************************************
|
||||
*
|
||||
* Copyright (c) 2010 - 2022 by Tech Soft 3D, Inc.
|
||||
* The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret
|
||||
* as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event
|
||||
* of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized
|
||||
* employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the
|
||||
* scope and manner of such use.
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
/**
|
||||
* Sample CreatePRCCubes
|
||||
* file CreateGraphics.cpp
|
||||
* This file is containing the function allowing to create graphics.
|
||||
*
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
#include "CreateGraphics.h"
|
||||
|
||||
//######################################################################################################################
|
||||
// Color creation
|
||||
A3DStatus createRGBColor(A3DUns32& uiIndexRgbColor, A3DDouble dRed, A3DDouble dGreen, A3DDouble dBlue)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
A3DGraphRgbColorData sData;
|
||||
A3D_INITIALIZE_DATA(A3DGraphRgbColorData, sData);
|
||||
sData.m_dRed = dRed;
|
||||
sData.m_dGreen = dGreen;
|
||||
sData.m_dBlue = dBlue;
|
||||
iRet = A3DGlobalInsertGraphRgbColor(&sData, &uiIndexRgbColor);
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
// Material creation: Creates a material, then inserts it into the global material table.
|
||||
A3DStatus createMaterial(A3DUns32& uiMaterialGenericIndex, A3DDouble dRed, A3DDouble dGreen, A3DDouble dBlue)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
A3DUns32 uiAmbient, uiDiffuse, uiEmissive, uiSpecular;
|
||||
|
||||
CHECK_RET(createRGBColor(uiAmbient, dRed, dGreen, dBlue));
|
||||
CHECK_RET(createRGBColor(uiDiffuse, dRed, dGreen, dBlue));
|
||||
CHECK_RET(createRGBColor(uiEmissive, dRed, dGreen, dBlue));
|
||||
CHECK_RET(createRGBColor(uiSpecular, dRed, dGreen, dBlue));
|
||||
|
||||
A3DGraphMaterialData sMaterialData;
|
||||
A3D_INITIALIZE_DATA(A3DGraphMaterialData, sMaterialData);
|
||||
sMaterialData.m_uiAmbient = uiAmbient;
|
||||
sMaterialData.m_uiDiffuse = uiDiffuse;
|
||||
sMaterialData.m_uiEmissive = uiEmissive;
|
||||
sMaterialData.m_uiSpecular = uiSpecular;
|
||||
sMaterialData.m_dAmbientAlpha = 1.0;
|
||||
sMaterialData.m_dDiffuseAlpha = 1.0;
|
||||
sMaterialData.m_dEmissiveAlpha = 1.0;
|
||||
sMaterialData.m_dSpecularAlpha = 1.0;
|
||||
sMaterialData.m_dShininess = 0.0;
|
||||
CHECK_RET(A3DGlobalInsertGraphMaterial(&sMaterialData, &uiMaterialGenericIndex));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
A3DStatus setGraphicsColor(A3DRootBaseWithGraphicsData* pOutRootBaseWithGraphics, A3DDouble dRed, A3DDouble dGreen, A3DDouble dBlue, A3DDouble dAlpha)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
//Create a style color
|
||||
A3DUns32 uiColorIndex = 0;
|
||||
CHECK_RET(createRGBColor(uiColorIndex, dRed, dGreen, dBlue));
|
||||
|
||||
A3DUns32 uiStyleIndex = 0;
|
||||
A3DGraphStyleData sStyleData;
|
||||
A3D_INITIALIZE_DATA(A3DGraphStyleData, sStyleData);
|
||||
sStyleData.m_bMaterial = false;
|
||||
sStyleData.m_bVPicture = false;
|
||||
sStyleData.m_dWidth = 0.1; // default
|
||||
sStyleData.m_bIsTransparencyDefined = true;
|
||||
sStyleData.m_ucTransparency = (A3DUns8) (dAlpha * 255.0);
|
||||
sStyleData.m_bSpecialCulling = false;
|
||||
sStyleData.m_bBackCulling = false;
|
||||
sStyleData.m_uiRgbColorIndex = uiColorIndex;
|
||||
CHECK_RET(A3DGlobalInsertGraphStyle(&sStyleData, &uiStyleIndex));
|
||||
|
||||
A3DGraphicsData sGraphicsData;
|
||||
A3D_INITIALIZE_DATA(A3DGraphicsData, sGraphicsData);
|
||||
|
||||
sGraphicsData.m_uiStyleIndex = uiStyleIndex;
|
||||
sGraphicsData.m_usBehaviour = kA3DGraphicsShow;
|
||||
sGraphicsData.m_usBehaviour |= kA3DGraphicsSonHeritColor;
|
||||
|
||||
CHECK_RET(A3DGraphicsCreate(&sGraphicsData, &(pOutRootBaseWithGraphics->m_pGraphics)));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
A3DStatus setEntityColor(A3DEntity* inEntity, A3DDouble dRed, A3DDouble dGreen, A3DDouble dBlue, A3DDouble dAlpha)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
A3DRootBaseWithGraphicsData sBaseWithGraphicsData;
|
||||
A3D_INITIALIZE_DATA(A3DRootBaseWithGraphicsData, sBaseWithGraphicsData);
|
||||
CHECK_RET(A3DRootBaseWithGraphicsGet(inEntity, &sBaseWithGraphicsData));
|
||||
|
||||
CHECK_RET(setGraphicsColor(&sBaseWithGraphicsData, dRed, dGreen, dBlue, dAlpha));
|
||||
|
||||
CHECK_RET(A3DRootBaseWithGraphicsSet(inEntity, &sBaseWithGraphicsData));
|
||||
CHECK_RET(A3DGraphicsDelete(sBaseWithGraphicsData.m_pGraphics));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
A3DStatus setGraphicsHidden(A3DRootBaseWithGraphicsData* pOutRootBaseWithGraphics)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
A3DGraphicsData sGraphicsData;
|
||||
A3D_INITIALIZE_DATA(A3DGraphicsData, sGraphicsData);
|
||||
CHECK_RET(A3DGraphicsGet(pOutRootBaseWithGraphics->m_pGraphics, &sGraphicsData));
|
||||
|
||||
sGraphicsData.m_usBehaviour &= ~kA3DGraphicsShow;
|
||||
sGraphicsData.m_usBehaviour |= kA3DGraphicsSonHeritShow;
|
||||
|
||||
CHECK_RET(A3DGraphicsCreate(&sGraphicsData, &(pOutRootBaseWithGraphics->m_pGraphics)));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
A3DStatus setEntityHidden(A3DEntity* inEntity)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
A3DRootBaseWithGraphicsData sBaseWithGraphicsData;
|
||||
A3D_INITIALIZE_DATA(A3DRootBaseWithGraphicsData, sBaseWithGraphicsData);
|
||||
CHECK_RET(A3DRootBaseWithGraphicsGet(inEntity, &sBaseWithGraphicsData));
|
||||
|
||||
CHECK_RET(setGraphicsHidden(&sBaseWithGraphicsData));
|
||||
|
||||
CHECK_RET(A3DRootBaseWithGraphicsSet(inEntity, &sBaseWithGraphicsData));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
/***********************************************************************************************************************
|
||||
*
|
||||
* Copyright (c) 2010 - 2022 by Tech Soft 3D, Inc.
|
||||
* The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret
|
||||
* as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event
|
||||
* of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized
|
||||
* employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the
|
||||
* scope and manner of such use.
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
/**
|
||||
* Sample CreatePRCCubes
|
||||
* file CreateGraphics.cpp
|
||||
* This file is containing the function allowing to create graphics.
|
||||
*
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
#pragma once
|
||||
|
||||
#include "../CreatePRCCubesDef.h"
|
||||
|
||||
|
||||
//######################################################################################################################
|
||||
#define WHITE 1.,1.,1.
|
||||
#define DARK_GREY 0.2,0.2,0.2
|
||||
|
||||
#define RED 1.,0.,0.
|
||||
#define GREEN 0.,1.,0.
|
||||
#define BLUE 0.,0.,1.
|
||||
|
||||
#define YELLOW 1.,1.,0.
|
||||
#define PURPLE 1.,0.,1.
|
||||
#define TURQUOISE 0.,1.,1.
|
||||
|
||||
//######################################################################################################################
|
||||
A3DStatus createRGBColor(A3DUns32& uiIndexRgbColor, A3DDouble dRed, A3DDouble dGreen, A3DDouble dBlue);
|
||||
A3DStatus createMaterial(A3DUns32& uiMaterialGenericIndex, A3DDouble dRed, A3DDouble dGreen, A3DDouble dBlue);
|
||||
|
||||
A3DStatus setGraphicsColor(A3DRootBaseWithGraphicsData* pOutRootBaseWithGraphics, A3DDouble dRed, A3DDouble dGreen, A3DDouble dBlue, A3DDouble dAlpha);
|
||||
A3DStatus setEntityColor(A3DEntity* inEntity, A3DDouble dRed, A3DDouble dGreen, A3DDouble dBlue, A3DDouble dAlpha);
|
||||
|
||||
A3DStatus setGraphicsHidden(A3DRootBaseWithGraphicsData* pOutRootBaseWithGraphics);
|
||||
A3DStatus setEntityHidden(A3DEntity* inEntity);
|
||||
|
||||
|
||||
@@ -0,0 +1,117 @@
|
||||
/***********************************************************************************************************************
|
||||
*
|
||||
* Copyright (c) 2010 - 2022 by Tech Soft 3D, Inc.
|
||||
* The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret
|
||||
* as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event
|
||||
* of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized
|
||||
* employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the
|
||||
* scope and manner of such use.
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
/**
|
||||
* Sample CreatePRCCubes
|
||||
* file CreateLinkedItem.cpp
|
||||
* This file is containing the function allowing to create linked items.
|
||||
*
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
#include "CreateMarkups.h"
|
||||
|
||||
//######################################################################################################################
|
||||
//
|
||||
// Linked Items
|
||||
//
|
||||
//######################################################################################################################
|
||||
// Create a a link mparkup / entity
|
||||
static A3DStatus stCreateLinkedItem(A3DEntity* pEntity, A3DAsmProductOccurrence *pPOTarget,
|
||||
A3DMiscMarkupLinkedItem ** ppMLI)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
A3DMiscMarkupLinkedItemData sMLIData;
|
||||
A3D_INITIALIZE_DATA(A3DMiscMarkupLinkedItemData, sMLIData);
|
||||
|
||||
sMLIData.m_pTargetProductOccurrence = pPOTarget;
|
||||
sMLIData.m_pReference = pEntity;
|
||||
CHECK_RET(A3DMiscMarkupLinkedItemCreate(&sMLIData, ppMLI));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
|
||||
A3DStatus createMarkupLinkedItemOnProduct(A3DAsmProductOccurrence* pPO, A3DAsmProductOccurrence *pPOTarget,
|
||||
A3DMiscMarkupLinkedItem ** ppMLI)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
// pPo: setting a non-null reference
|
||||
// m_pTargetProductOccurrence: setting the target ProductOccurrence to NULL if the reference is at the same level as the PO,
|
||||
// or to the level above if the PO tree has several levels
|
||||
iRet = (stCreateLinkedItem(pPO, pPOTarget, ppMLI));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
A3DStatus createMarkupLinkedItemOnEntity(A3DEntity* pEntity,
|
||||
A3DAsmProductOccurrence * pPOTarget,
|
||||
A3DMiscMarkupLinkedItem ** ppMLI)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
CHECK_RET(stCreateLinkedItem(pEntity, pPOTarget, ppMLI));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
A3DStatus createMarkupLinkedItemOnTopo(A3DEntity* pEntity, A3DEEntityType eTopoItemType,
|
||||
A3DUns32 uiAdditionalIndexesSize,
|
||||
A3DUns32* puiAdditionalIndexes,
|
||||
A3DAsmProductOccurrence* pPOTarget,
|
||||
A3DMiscMarkupLinkedItem ** ppMLI)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
A3DMiscReferenceOnTopologyData sReferenceOnTopologyData;
|
||||
A3D_INITIALIZE_DATA(A3DMiscReferenceOnTopologyData, sReferenceOnTopologyData);
|
||||
|
||||
sReferenceOnTopologyData.m_eTopoItemType = eTopoItemType; // kA3DTypeTopoFace;
|
||||
sReferenceOnTopologyData.m_pBrepData = pEntity;
|
||||
sReferenceOnTopologyData.m_uiSize = uiAdditionalIndexesSize;
|
||||
sReferenceOnTopologyData.m_puiAdditionalIndexes = puiAdditionalIndexes;
|
||||
|
||||
A3DMiscReferenceOnTopology* pReferenceOnTopoItem;
|
||||
CHECK_RET(A3DMiscReferenceOnTopologyCreate(&sReferenceOnTopologyData, &pReferenceOnTopoItem));
|
||||
|
||||
// create MarkupLinkedItem
|
||||
CHECK_RET(stCreateLinkedItem(pReferenceOnTopoItem, pPOTarget, ppMLI));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
A3DStatus createMarkupLinkedItemOnTess(A3DEntity* pEntity, A3DEEntityType eTessItemType,
|
||||
A3DUns32 uiAdditionalIndexesSize,
|
||||
A3DUns32* puiAdditionalIndexes,
|
||||
A3DAsmProductOccurrence* pPOTarget,
|
||||
A3DMiscMarkupLinkedItem ** ppMLI)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
A3DMiscReferenceOnTessData sReferenceOnTessData;
|
||||
A3D_INITIALIZE_DATA(A3DMiscReferenceOnTessData, sReferenceOnTessData);
|
||||
|
||||
sReferenceOnTessData.m_eTopoItemType = eTessItemType; // kA3DTypeTessFace / kA3DTypeTessEdge / kA3DTypeTessVertex;
|
||||
sReferenceOnTessData.m_pPolyBrepModel = pEntity;
|
||||
sReferenceOnTessData.m_pTargetProductOccurrence = pPOTarget;
|
||||
sReferenceOnTessData.m_uiSize = uiAdditionalIndexesSize;
|
||||
sReferenceOnTessData.m_puiAdditionalIndexes = puiAdditionalIndexes;
|
||||
|
||||
A3DMiscReferenceOnTess* pReferenceOnTessItem;
|
||||
CHECK_RET(A3DMiscReferenceOnTessCreate(&sReferenceOnTessData, &pReferenceOnTessItem));
|
||||
|
||||
*ppMLI = (A3DMiscMarkupLinkedItem*)pReferenceOnTessItem;
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
|
||||
@@ -0,0 +1,40 @@
|
||||
/***********************************************************************************************************************
|
||||
*
|
||||
* Copyright (c) 2010 - 2022 by Tech Soft 3D, Inc.
|
||||
* The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret
|
||||
* as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event
|
||||
* of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized
|
||||
* employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the
|
||||
* scope and manner of such use.
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
/**
|
||||
* Sample CreatePRCCubes
|
||||
* file CreateLinkedItem.cpp
|
||||
* This file is containing the function allowing to create linked items.
|
||||
*
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
#pragma once
|
||||
|
||||
#include "../CreatePRCCubesDef.h"
|
||||
|
||||
#include "CreateGraphics.h"
|
||||
|
||||
//######################################################################################################################
|
||||
A3DStatus createMarkupLinkedItemOnProduct(A3DAsmProductOccurrence* pPO, A3DAsmProductOccurrence *pPOTarget,
|
||||
A3DMiscMarkupLinkedItem ** ppMLI);
|
||||
A3DStatus createMarkupLinkedItemOnEntity(A3DEntity* pEntity, A3DAsmProductOccurrence *pPOTarget,
|
||||
A3DMiscMarkupLinkedItem ** ppMLI);
|
||||
A3DStatus createMarkupLinkedItemOnTopo(A3DEntity* pEntity, A3DEEntityType eTopoItemType,
|
||||
A3DUns32 uiAdditionalIndexesSize,
|
||||
A3DUns32* puiAdditionalIndexes,
|
||||
A3DAsmProductOccurrence* pPOTarget,
|
||||
A3DMiscMarkupLinkedItem ** ppMLI);
|
||||
A3DStatus createMarkupLinkedItemOnTess(A3DEntity* pEntity, A3DEEntityType eTopoItemType,
|
||||
A3DUns32 uiAdditionalIndexesSize,
|
||||
A3DUns32* puiAdditionalIndexes,
|
||||
A3DAsmProductOccurrence* pPOTarget,
|
||||
A3DMiscMarkupLinkedItem ** ppMLI);
|
||||
|
||||
|
||||
444
exchange/exchangesource/CreatePRCCubes/modules/CreateMarkups.cpp
Normal file
444
exchange/exchangesource/CreatePRCCubes/modules/CreateMarkups.cpp
Normal file
@@ -0,0 +1,444 @@
|
||||
/***********************************************************************************************************************
|
||||
*
|
||||
* Copyright (c) 2010 - 2022 by Tech Soft 3D, Inc.
|
||||
* The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret
|
||||
* as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event
|
||||
* of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized
|
||||
* employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the
|
||||
* scope and manner of such use.
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
/**
|
||||
* Sample CreatePRCCubes
|
||||
* file CreateMartkups.cpp
|
||||
* This file is containing the function allowing to create markups.
|
||||
*
|
||||
* Markups creation exemple
|
||||
* Create tessellated markups with linked items.
|
||||
* Different style of markups can be created (normal or face to screen).
|
||||
* Different links to the PRC entities can be created as well.
|
||||
*
|
||||
* These exemples are using the tessellation wrapper: HXWMarkupTessellation.cpp
|
||||
*
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
#include "CreateMarkups.h"
|
||||
|
||||
#include "../tessellation_wrapper/HXWMarkupTessellation.h"
|
||||
|
||||
#include <vector>
|
||||
|
||||
//######################################################################################################################
|
||||
//
|
||||
// Tessellation Helper
|
||||
//
|
||||
//######################################################################################################################
|
||||
// Create a leader and an arrow
|
||||
static void stCreateLeaderTess(HXWMarkupTessellation* sMarkupLeaderTessellation, A3DVector3dData* pLeaderBegin, A3DVector3dData* pLeaderEnd)
|
||||
{
|
||||
// Leader
|
||||
A3DDouble* pdLeaderPolylineData = (A3DDouble*) malloc(9 * sizeof(A3DDouble));
|
||||
pdLeaderPolylineData[0] = pLeaderBegin->m_dX;
|
||||
pdLeaderPolylineData[1] = pLeaderBegin->m_dY;
|
||||
pdLeaderPolylineData[2] = pLeaderBegin->m_dZ;
|
||||
|
||||
pdLeaderPolylineData[3] = pdLeaderPolylineData[0];
|
||||
pdLeaderPolylineData[4] = pdLeaderPolylineData[1];
|
||||
pdLeaderPolylineData[5] = pLeaderEnd->m_dZ;
|
||||
|
||||
pdLeaderPolylineData[6] = pLeaderEnd->m_dX;
|
||||
pdLeaderPolylineData[7] = pLeaderEnd->m_dY;
|
||||
pdLeaderPolylineData[8] = pLeaderEnd->m_dZ;
|
||||
|
||||
sMarkupLeaderTessellation->set_color(YELLOW);
|
||||
sMarkupLeaderTessellation->add_polyline(pdLeaderPolylineData, 3);
|
||||
free(pdLeaderPolylineData);
|
||||
|
||||
// Arrow
|
||||
A3DDouble* pdTriangle = (A3DDouble*) malloc(9 * sizeof(A3DDouble));
|
||||
pdTriangle[0] = pLeaderBegin->m_dX;
|
||||
pdTriangle[1] = pLeaderBegin->m_dY;
|
||||
pdTriangle[2] = pLeaderBegin->m_dZ;
|
||||
|
||||
pdTriangle[3] = pdTriangle[0];
|
||||
pdTriangle[4] = pdTriangle[1] - 3;
|
||||
pdTriangle[5] = pdTriangle[2] + 6;
|
||||
|
||||
pdTriangle[6] = pdTriangle[0];
|
||||
pdTriangle[7] = pdTriangle[1] + 3;
|
||||
pdTriangle[8] = pdTriangle[2] + 6;
|
||||
|
||||
sMarkupLeaderTessellation->set_color(YELLOW);
|
||||
sMarkupLeaderTessellation->add_triangle(pdTriangle);
|
||||
free(pdTriangle);
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
// Create a Frame and Background
|
||||
static void stCreateFrameTess(HXWMarkupTessellation* pMarkupTessellation,
|
||||
A3DVector3dData* pBottomLeft, // this feel the most natural as text will begin from that point
|
||||
A3DDouble width, A3DDouble height)
|
||||
{
|
||||
// Frame
|
||||
A3DDouble* pdMarkupFrameData = (A3DDouble*) malloc(16 * sizeof(A3DDouble));
|
||||
pdMarkupFrameData[0] = pBottomLeft->m_dX; // lower left corner
|
||||
pdMarkupFrameData[1] = pBottomLeft->m_dY;
|
||||
pdMarkupFrameData[2] = pBottomLeft->m_dZ;
|
||||
|
||||
pdMarkupFrameData[3] = pdMarkupFrameData[0] + width; // lower right corner
|
||||
pdMarkupFrameData[4] = pdMarkupFrameData[1];
|
||||
pdMarkupFrameData[5] = pdMarkupFrameData[2];
|
||||
|
||||
pdMarkupFrameData[6] = pdMarkupFrameData[0] + width; // upper right corner
|
||||
pdMarkupFrameData[7] = pdMarkupFrameData[1] + height;
|
||||
pdMarkupFrameData[8] = pdMarkupFrameData[2];
|
||||
|
||||
pdMarkupFrameData[9] = pdMarkupFrameData[0]; // upper left corner
|
||||
pdMarkupFrameData[10] = pdMarkupFrameData[1] + height;
|
||||
pdMarkupFrameData[11] = pdMarkupFrameData[2];
|
||||
|
||||
pdMarkupFrameData[12] = pdMarkupFrameData[0]; // lower left corner
|
||||
pdMarkupFrameData[13] = pdMarkupFrameData[1];
|
||||
pdMarkupFrameData[14] = pdMarkupFrameData[2];
|
||||
|
||||
pMarkupTessellation->set_color(RED);
|
||||
pMarkupTessellation->add_polyline(pdMarkupFrameData, 5);
|
||||
free(pdMarkupFrameData);
|
||||
|
||||
// Background
|
||||
A3DDouble* pdMarkupBackGroundData = (A3DDouble*) malloc(12 * sizeof(A3DDouble));
|
||||
pdMarkupBackGroundData[0] = pBottomLeft->m_dX; // lower left corner
|
||||
pdMarkupBackGroundData[1] = pBottomLeft->m_dY;
|
||||
pdMarkupBackGroundData[2] = pBottomLeft->m_dZ - 0.01;
|
||||
|
||||
pdMarkupBackGroundData[3] = pdMarkupBackGroundData[0] + width; // lower right corner
|
||||
pdMarkupBackGroundData[4] = pdMarkupBackGroundData[1];
|
||||
pdMarkupBackGroundData[5] = pdMarkupBackGroundData[2] - 0.01;;
|
||||
|
||||
pdMarkupBackGroundData[6] = pdMarkupBackGroundData[0] + width; // upper right corner
|
||||
pdMarkupBackGroundData[7] = pdMarkupBackGroundData[1] + height;
|
||||
pdMarkupBackGroundData[8] = pdMarkupBackGroundData[2] - 0.01;;
|
||||
|
||||
pdMarkupBackGroundData[9] = pdMarkupBackGroundData[0]; // upper left corner
|
||||
pdMarkupBackGroundData[10] = pdMarkupBackGroundData[1] + height;
|
||||
pdMarkupBackGroundData[11] = pdMarkupBackGroundData[2] - 0.01;;
|
||||
|
||||
pMarkupTessellation->set_color(WHITE);
|
||||
pMarkupTessellation->add_polygons(pdMarkupBackGroundData, 4);
|
||||
free(pdMarkupBackGroundData);
|
||||
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
// Create a Text
|
||||
static void stCreateText(HXWMarkupTessellation* pMarkupTessellation,
|
||||
const A3DUTF8Char* pcText,
|
||||
A3DVector3dData* pBottomLeft, A3DDouble width, A3DDouble height)
|
||||
{
|
||||
// Text
|
||||
HXWVector3d position(pBottomLeft->m_dX + 5,
|
||||
pBottomLeft->m_dY + 5,
|
||||
pBottomLeft->m_dZ);
|
||||
HXWVector3d normal(0., 0., 1.);
|
||||
HXWVector3d x_direction(1., 0., 0.);
|
||||
pMarkupTessellation->begin_matrix(position.m_data, normal.m_data, x_direction.m_data);
|
||||
pMarkupTessellation->set_textfont("Courier New", 10, kA3DFontBold);
|
||||
pMarkupTessellation->set_color(BLUE);
|
||||
pMarkupTessellation->add_text(pcText, width, height);
|
||||
pMarkupTessellation->end_matrix();
|
||||
/* to test a second text
|
||||
position.m_data.m_dX += width + 5;
|
||||
pMarkupTessellation->begin_matrix(position.m_data, normal.m_data, x_direction.m_data);
|
||||
pMarkupTessellation->set_textfont("Myriad CAD", 10, kA3DFontBold);
|
||||
pMarkupTessellation->set_color(BLUE);
|
||||
pMarkupTessellation->add_text("Publish");
|
||||
pMarkupTessellation->end_matrix();
|
||||
*/
|
||||
|
||||
}
|
||||
|
||||
|
||||
//######################################################################################################################
|
||||
//
|
||||
// Leader, frame and text
|
||||
//
|
||||
//######################################################################################################################
|
||||
static const double sdFrameWidth = 110;
|
||||
static const double sdFrameHeight = 25;
|
||||
|
||||
static const double sdTextWidth = 100;
|
||||
static const double sdTextHeight = 10;
|
||||
|
||||
|
||||
// Create a Tessellation
|
||||
static A3DStatus stCreateFrameAndText(A3DTessMarkup** ppTessMarkup,
|
||||
const A3DUTF8Char* pcText,
|
||||
A3DVector3dData* pFramePos)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
// label
|
||||
HXWMarkupTessellation sMarkupTessellation;
|
||||
|
||||
stCreateFrameTess(&sMarkupTessellation, pFramePos, sdFrameWidth, sdFrameHeight);
|
||||
stCreateText(&sMarkupTessellation, pcText, pFramePos, sdTextWidth, sdTextHeight);
|
||||
|
||||
*ppTessMarkup = sMarkupTessellation.GetEntity();
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
// Create a Face to screen Tessellation
|
||||
static A3DStatus stCreateFrameAndTextFaceToScreen(A3DTessMarkup** ppTessMarkup,
|
||||
const A3DUTF8Char* pcText,
|
||||
A3DVector3dData* pFrame3DPos,
|
||||
FlatToScreenMode inFlatToScreenMode)
|
||||
{
|
||||
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
HXWMarkupTessellation sMarkupTessellation;
|
||||
// FaceMode
|
||||
A3DDouble pFaceModeOrigin[3];
|
||||
pFaceModeOrigin[0] = pFrame3DPos->m_dX;
|
||||
pFaceModeOrigin[1] = pFrame3DPos->m_dY;
|
||||
pFaceModeOrigin[2] = pFrame3DPos->m_dZ;
|
||||
|
||||
A3DVector3dData sOrigin;
|
||||
A3D_INITIALIZE_DATA(A3DVector3dData, sOrigin);
|
||||
sOrigin.m_dX = 0;
|
||||
sOrigin.m_dY = 0;
|
||||
sOrigin.m_dZ = 0;
|
||||
|
||||
switch (inFlatToScreenMode)
|
||||
{
|
||||
case FlatToScreen:
|
||||
sMarkupTessellation.BeginFaceView(pFaceModeOrigin);
|
||||
break;
|
||||
case FlatToScreenAlwaysOnTop:
|
||||
sMarkupTessellation.BeginFaceViewAlwaysOnTop(pFaceModeOrigin);
|
||||
break;
|
||||
case FlatToScreenNonZoomable:
|
||||
sMarkupTessellation.BeginFrameDraw(pFaceModeOrigin);
|
||||
break;
|
||||
}
|
||||
|
||||
stCreateFrameTess(&sMarkupTessellation, &sOrigin, sdFrameWidth, sdFrameHeight);
|
||||
stCreateText(&sMarkupTessellation, pcText, &sOrigin, sdTextWidth, sdTextHeight);
|
||||
|
||||
switch (inFlatToScreenMode)
|
||||
{
|
||||
case FlatToScreen:
|
||||
case FlatToScreenAlwaysOnTop:
|
||||
sMarkupTessellation.EndFaceView();
|
||||
break;
|
||||
case FlatToScreenNonZoomable:
|
||||
sMarkupTessellation.EndFrameDraw();
|
||||
break;
|
||||
}
|
||||
|
||||
*ppTessMarkup = sMarkupTessellation.GetEntity();
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
// Create a Leader Tessellation
|
||||
static A3DStatus stCreateLeader(A3DMkpLeader** ppMkpLeader,
|
||||
A3DVector3dData* pBeginLeaderPos,
|
||||
A3DVector3dData* pEndLeaderPos)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
// leader
|
||||
HXWMarkupTessellation sMarkupLeaderTessellation;
|
||||
stCreateLeaderTess(&sMarkupLeaderTessellation, pBeginLeaderPos, pEndLeaderPos);
|
||||
|
||||
A3DMkpLeaderData sMkpLeaderData;
|
||||
A3D_INITIALIZE_DATA(A3DMkpLeaderData, sMkpLeaderData);
|
||||
A3DTessMarkup* pLeaderTessMarkup = sMarkupLeaderTessellation.GetEntity();
|
||||
sMkpLeaderData.m_pTessellation = pLeaderTessMarkup;
|
||||
CHECK_RET(A3DMkpLeaderCreate(&sMkpLeaderData, ppMkpLeader));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
static A3DStatus stCreateMkpMarkup(A3DMkpMarkup** ppMarkup,
|
||||
A3DTessMarkup* pTessMarkup,
|
||||
A3DUns32 uiMkpLeaderSize,
|
||||
A3DMkpLeader** ppMkpLeader,
|
||||
A3DUns32 uiMarkupLinkedItemSize,
|
||||
A3DMiscMarkupLinkedItem** ppMarkupLinkedItem)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
A3DMkpMarkupData sMarkupData;
|
||||
A3D_INITIALIZE_DATA(A3DMkpMarkupData, sMarkupData);
|
||||
sMarkupData.m_eType = kA3DMarkupTypeText;
|
||||
sMarkupData.m_eSubType = kA3DMarkupSubTypeUnknown;
|
||||
|
||||
sMarkupData.m_uiLeadersSize = uiMkpLeaderSize;
|
||||
sMarkupData.m_ppLeaders = ppMkpLeader;
|
||||
|
||||
sMarkupData.m_uiLinkedItemsSize = uiMarkupLinkedItemSize;
|
||||
sMarkupData.m_ppLinkedItems = ppMarkupLinkedItem;
|
||||
|
||||
sMarkupData.m_pTessellation = pTessMarkup;
|
||||
|
||||
CHECK_RET(A3DMkpMarkupCreate(&sMarkupData, ppMarkup));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
|
||||
//######################################################################################################################
|
||||
//
|
||||
// Markups creation
|
||||
//
|
||||
//######################################################################################################################
|
||||
// Tesselated Markup creation
|
||||
|
||||
|
||||
//######################################################################################################################
|
||||
// Tesselated Markup creation
|
||||
A3DStatus createMarkup(A3DMkpAnnotationItem** ppOutAnnotItem,
|
||||
const A3DUTF8Char* pcText,
|
||||
A3DUns32 uiLinkedEntitySize,
|
||||
A3DEntity** ppLinkedEntity,
|
||||
A3DAsmProductOccurrence** ppPOTarget,
|
||||
A3DVector3dData* pFramePos,
|
||||
A3DVector3dData* pLeaderPos)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
A3DMkpLeader* pMkpLeader = 0;
|
||||
A3DUns32 uiMkpLeaderSize = 0;
|
||||
if (pLeaderPos)
|
||||
{
|
||||
CHECK_RET(stCreateLeader(&pMkpLeader, pLeaderPos, pFramePos));
|
||||
uiMkpLeaderSize = 1;
|
||||
}
|
||||
|
||||
A3DTessMarkup* pTessMarkup = 0;
|
||||
CHECK_RET(stCreateFrameAndText(&pTessMarkup, pcText, pFramePos));
|
||||
|
||||
// -----------------------------------------------------------
|
||||
// creation of linked item
|
||||
std::vector<A3DMiscMarkupLinkedItem*> vLinkedItems;
|
||||
for (A3DUns32 i = 0; i < uiLinkedEntitySize; ++i)
|
||||
{
|
||||
A3DMiscMarkupLinkedItem* pMarkupLinkedItem = 0;
|
||||
CHECK_RET(createMarkupLinkedItemOnEntity(ppLinkedEntity[i], ppPOTarget[i], &pMarkupLinkedItem));
|
||||
vLinkedItems.push_back(pMarkupLinkedItem);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------
|
||||
// create a Markup from the MarkupTessData
|
||||
A3DMkpMarkup* pMarkup = 0;
|
||||
CHECK_RET(stCreateMkpMarkup(&pMarkup, pTessMarkup, uiMkpLeaderSize, &pMkpLeader, (A3DUns32)vLinkedItems.size(), &(vLinkedItems[0])));
|
||||
vLinkedItems.clear();
|
||||
|
||||
// -----------------------------------------------------------
|
||||
// Annotation item creation
|
||||
A3DMkpAnnotationItemData sAnnotItemData;
|
||||
A3D_INITIALIZE_DATA(A3DMkpAnnotationItemData, sAnnotItemData);
|
||||
sAnnotItemData.m_pMarkup = pMarkup;
|
||||
CHECK_RET(A3DMkpAnnotationItemCreate(&sAnnotItemData, ppOutAnnotItem));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
// Tesselated Markup creation
|
||||
// Only the linked item creation process will change from the normal sample markup.
|
||||
A3DStatus createMarkupOnFace(A3DMkpAnnotationItem** ppOutAnnotItem,
|
||||
const A3DUTF8Char* pcText,
|
||||
A3DUns32 uiLinkedEntitySize,
|
||||
A3DEntity** ppLinkedEntity,
|
||||
A3DAsmProductOccurrence** ppPOTarget,
|
||||
A3DUns32* puiFaceIndexes,
|
||||
A3DVector3dData* pFramePos,
|
||||
A3DVector3dData* pLeaderPos)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
A3DMkpLeader* pMkpLeader = 0;
|
||||
A3DUns32 uiMkpLeaderSize = 0;
|
||||
if (pLeaderPos)
|
||||
{
|
||||
CHECK_RET(stCreateLeader(&pMkpLeader, pLeaderPos, pFramePos));
|
||||
uiMkpLeaderSize = 1;
|
||||
}
|
||||
|
||||
|
||||
A3DTessMarkup* pTessMarkup = 0;
|
||||
CHECK_RET(stCreateFrameAndText(&pTessMarkup, pcText, pFramePos));
|
||||
|
||||
// -----------------------------------------------------------
|
||||
// creation of linked item on a face
|
||||
std::vector<A3DMiscMarkupLinkedItem*> vLinkedItems;
|
||||
for (A3DUns32 i = 0; i < uiLinkedEntitySize; ++i)
|
||||
{
|
||||
A3DMiscMarkupLinkedItem* pMarkupLinkedItem = 0;
|
||||
CHECK_RET(createMarkupLinkedItemOnTess(ppLinkedEntity[i], kA3DTypeTessFace, 1, &puiFaceIndexes[i], ppPOTarget[i], &pMarkupLinkedItem));
|
||||
vLinkedItems.push_back(pMarkupLinkedItem);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------
|
||||
// create a Markup from the MarkupTessData
|
||||
A3DMkpMarkup* pMarkup = 0;
|
||||
CHECK_RET(stCreateMkpMarkup(&pMarkup, pTessMarkup, uiMkpLeaderSize, &pMkpLeader, (A3DUns32)vLinkedItems.size(), &(vLinkedItems[0])));
|
||||
vLinkedItems.clear();
|
||||
|
||||
// -----------------------------------------------------------
|
||||
// Annotation item creation
|
||||
A3DMkpAnnotationItemData sAnnotItemData;
|
||||
A3D_INITIALIZE_DATA(A3DMkpAnnotationItemData, sAnnotItemData);
|
||||
sAnnotItemData.m_pMarkup = pMarkup;
|
||||
CHECK_RET(A3DMkpAnnotationItemCreate(&sAnnotItemData, ppOutAnnotItem));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
// FaceMode Markup creation
|
||||
A3DStatus createMarkupFaceToScreen(A3DMkpAnnotationItem** ppOutAnnotItem,
|
||||
const A3DUTF8Char* pcText,
|
||||
A3DUns32 uiLinkedEntitySize,
|
||||
A3DEntity** ppLinkedEntity,
|
||||
A3DAsmProductOccurrence** ppPOTarget,
|
||||
A3DVector3dData* pFramePos,
|
||||
FlatToScreenMode inFlatToScreenMode)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
A3DTessMarkup* pTessMarkup = 0;
|
||||
CHECK_RET(stCreateFrameAndTextFaceToScreen(&pTessMarkup, pcText, pFramePos, inFlatToScreenMode));
|
||||
|
||||
// -----------------------------------------------------------
|
||||
// creation of linked item
|
||||
// creation of linked item
|
||||
std::vector<A3DMiscMarkupLinkedItem*> vLinkedItems;
|
||||
for (A3DUns32 i = 0; i < uiLinkedEntitySize; ++i)
|
||||
{
|
||||
A3DMiscMarkupLinkedItem* pMarkupLinkedItem = 0;
|
||||
CHECK_RET(createMarkupLinkedItemOnEntity(ppLinkedEntity[i], ppPOTarget[i], &pMarkupLinkedItem));
|
||||
vLinkedItems.push_back(pMarkupLinkedItem);
|
||||
}
|
||||
|
||||
// -----------------------------------------------------------
|
||||
// create a Markup from the MarkupTessData
|
||||
A3DMkpMarkup* pMarkup = 0;
|
||||
CHECK_RET(stCreateMkpMarkup(&pMarkup, pTessMarkup, 0, 0, (A3DUns32)vLinkedItems.size(), &(vLinkedItems[0])));
|
||||
vLinkedItems.clear();
|
||||
|
||||
// -----------------------------------------------------------
|
||||
// Annotation item creation
|
||||
A3DMkpAnnotationItemData sAnnotItemData;
|
||||
A3D_INITIALIZE_DATA(A3DMkpAnnotationItemData, sAnnotItemData);
|
||||
sAnnotItemData.m_pMarkup = pMarkup;
|
||||
CHECK_RET(A3DMkpAnnotationItemCreate(&sAnnotItemData, ppOutAnnotItem));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
@@ -0,0 +1,69 @@
|
||||
/***********************************************************************************************************************
|
||||
*
|
||||
* Copyright (c) 2010 - 2022 by Tech Soft 3D, Inc.
|
||||
* The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret
|
||||
* as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event
|
||||
* of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized
|
||||
* employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the
|
||||
* scope and manner of such use.
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
/**
|
||||
* Sample CreatePRCCubes
|
||||
* file CreateMartkups.cpp
|
||||
* This file is containing the function allowing to create markups.
|
||||
*
|
||||
* Markups creation exemple
|
||||
* Create tessellated markups with linked items.
|
||||
* Different style of markups can be created (normal or face to screen).
|
||||
* Different links to the PRC entities can be created as well.
|
||||
*
|
||||
* These exemples are using the tessellation wrapper: HXWMarkupTessellation.cpp
|
||||
*
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
#pragma once
|
||||
|
||||
#include "../CreatePRCCubesDef.h"
|
||||
|
||||
#include "CreateLinkedItem.h"
|
||||
#include "CreateGraphics.h"
|
||||
|
||||
//######################################################################################################################
|
||||
|
||||
enum FlatToScreenMode
|
||||
{
|
||||
FlatToScreen,
|
||||
FlatToScreenAlwaysOnTop,
|
||||
FlatToScreenNonZoomable
|
||||
};
|
||||
|
||||
|
||||
//######################################################################################################################
|
||||
// Tesselated Markup creation with Publish
|
||||
|
||||
A3DStatus createMarkup(A3DMkpAnnotationItem** ppOutAnnotItem,
|
||||
const A3DUTF8Char* pcText,
|
||||
A3DUns32 uiLinkedEntitySize,
|
||||
A3DEntity** ppLinkedEntity,
|
||||
A3DAsmProductOccurrence** ppPOTarget,
|
||||
A3DVector3dData* pFramePos,
|
||||
A3DVector3dData* pLeaderPos = 0);
|
||||
|
||||
A3DStatus createMarkupOnFace(A3DMkpAnnotationItem** ppOutAnnotItem,
|
||||
const A3DUTF8Char* pcText,
|
||||
A3DUns32 uiLinkedEntitySize,
|
||||
A3DEntity** ppLinkedEntity,
|
||||
A3DAsmProductOccurrence** ppPOTarget,
|
||||
A3DUns32* puiFaceIndexes,
|
||||
A3DVector3dData* pFramePos,
|
||||
A3DVector3dData* pLeaderPos = 0);
|
||||
|
||||
A3DStatus createMarkupFaceToScreen(A3DMkpAnnotationItem** ppOutAnnotItem,
|
||||
const A3DUTF8Char* pcText,
|
||||
A3DUns32 uiLinkedEntitySize,
|
||||
A3DEntity** ppLinkedEntity,
|
||||
A3DAsmProductOccurrence** ppPOTarget,
|
||||
A3DVector3dData* pFramePos,
|
||||
FlatToScreenMode inFlatToScreenMode = FlatToScreen);
|
||||
|
||||
@@ -0,0 +1,161 @@
|
||||
/***********************************************************************************************************************
|
||||
*
|
||||
* Copyright (c) 2010 - 2022 by Tech Soft 3D, Inc.
|
||||
* The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret
|
||||
* as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event
|
||||
* of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized
|
||||
* employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the
|
||||
* scope and manner of such use.
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
/**
|
||||
* Sample CreatePRCCubes
|
||||
* file CreateTextures.cpp
|
||||
* This file is containing the function allowing to create Textures.
|
||||
*
|
||||
* Texture creation exemple
|
||||
* Create the style corresponding to texture.
|
||||
*
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
#include "CreateTextures.h"
|
||||
|
||||
#ifdef WIN32
|
||||
# include <sys/stat.h>
|
||||
#else
|
||||
# include <sys/types.h> /* stat */
|
||||
# include <sys/stat.h>
|
||||
# include <unistd.h>
|
||||
#endif
|
||||
|
||||
//######################################################################################################################
|
||||
// Picture creation
|
||||
static A3DStatus stFillBinaryDataWithFile(const A3DUTF8Char* pcPictureFilePath, A3DUns8*& pcBinaryData, A3DUns32& iFileSize)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
FILE* psFile = fopen(pcPictureFilePath, "rb");
|
||||
if(psFile == NULL)
|
||||
return A3D_ERROR;
|
||||
|
||||
#ifdef WIN32
|
||||
struct _stat ficstat;
|
||||
iRet = (A3DStatus) _stat(pcPictureFilePath, &ficstat);
|
||||
#else
|
||||
struct stat ficstat;
|
||||
# if defined(Apple) && defined(_UNICODE)
|
||||
USES_CONVERSION;
|
||||
iRet = (stat(W2A(pcPictureFilePath), &ficstat) == 0 ? A3D_SUCCESS : A3D_ERROR);
|
||||
# else
|
||||
iRet = (stat(pcPictureFilePath, &ficstat) == 0 ? A3D_SUCCESS : A3D_ERROR);
|
||||
# endif
|
||||
#endif
|
||||
if (iRet != A3D_SUCCESS || ficstat.st_size == 0)
|
||||
{
|
||||
fclose(psFile);
|
||||
return A3D_ERROR;
|
||||
}
|
||||
|
||||
iFileSize = ficstat.st_size;
|
||||
pcBinaryData = (A3DUns8*)malloc(iFileSize * A3DUns32(sizeof(A3DUns8)));
|
||||
fread(pcBinaryData, sizeof(unsigned char), size_t(iFileSize), psFile);
|
||||
fclose(psFile);
|
||||
return A3D_SUCCESS;
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
static A3DStatus stCreatePicture(const A3DUTF8Char* pcPictureFilePath, A3DEPictureDataFormat eFormat,
|
||||
A3DUns32 uiPixelHeight, A3DUns32 uiPixelWidth, A3DUns32& uiPictureIndex)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
// For supported PRC image type, the sizes should be 0 as they are stored in the data
|
||||
A3DGraphPictureData sPictureData;
|
||||
A3D_INITIALIZE_DATA(A3DGraphPictureData, sPictureData);
|
||||
sPictureData.m_eFormat = eFormat;
|
||||
sPictureData.m_uiPixelHeight = uiPixelHeight;
|
||||
sPictureData.m_uiPixelWidth = uiPixelWidth;
|
||||
CHECK_RET(stFillBinaryDataWithFile(pcPictureFilePath, sPictureData.m_pucBinaryData, sPictureData.m_uiSize));
|
||||
|
||||
CHECK_RET(A3DGlobalInsertGraphPicture(&sPictureData, &uiPictureIndex));
|
||||
free(sPictureData.m_pucBinaryData);
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
// Texture creation
|
||||
A3DStatus createTexture(const A3DUTF8Char* pcPictureFilePath, A3DEPictureDataFormat eFormat, A3DUns32 uiPixelHeight, A3DUns32 uiPixelWidth, A3DUns32& uiStyleIndex)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
A3DUns32 uiPictureIndex;
|
||||
CHECK_RET(stCreatePicture(pcPictureFilePath, eFormat, uiPixelHeight, uiPixelWidth, uiPictureIndex));
|
||||
|
||||
A3DUns32 uiMaterialGenericIndex;
|
||||
CHECK_RET(createMaterial(uiMaterialGenericIndex, DARK_GREY));
|
||||
|
||||
A3DGraphTextureDefinitionData sTextureDefinitionData;
|
||||
A3D_INITIALIZE_DATA(A3DGraphTextureDefinitionData, sTextureDefinitionData);
|
||||
sTextureDefinitionData.m_uiMappingAttributes = kA3DTextureMappingDiffuse;
|
||||
sTextureDefinitionData.m_ucTextureDimension = 2;
|
||||
sTextureDefinitionData.m_eMappingType = kA3DTextureMappingTypeStored;
|
||||
sTextureDefinitionData.m_eMappingOperator = kA3DTextureMappingOperatorUnknown;
|
||||
sTextureDefinitionData.m_uiPictureIndex = uiPictureIndex;
|
||||
sTextureDefinitionData.m_eTextureWrappingModeS = kA3DTextureWrappingModeClampToBorder;
|
||||
sTextureDefinitionData.m_eTextureWrappingModeT = kA3DTextureWrappingModeClampToBorder;
|
||||
sTextureDefinitionData.m_eTextureFunction = kA3DTextureFunctionModulate;
|
||||
sTextureDefinitionData.m_dRed = 0.0;
|
||||
sTextureDefinitionData.m_dGreen = 0.0;
|
||||
sTextureDefinitionData.m_dBlue = 0.0;
|
||||
sTextureDefinitionData.m_dAlpha = 0.0;
|
||||
sTextureDefinitionData.m_eBlend_src_RGB = kA3DTextureBlendParameterUnknown;
|
||||
sTextureDefinitionData.m_eBlend_dst_RGB = kA3DTextureBlendParameterUnknown;
|
||||
sTextureDefinitionData.m_eBlend_src_Alpha = kA3DTextureBlendParameterUnknown;
|
||||
sTextureDefinitionData.m_eBlend_dst_Alpha = kA3DTextureBlendParameterUnknown;
|
||||
|
||||
sTextureDefinitionData.m_ucTextureApplyingMode = kA3DTextureApplyingModeNone;
|
||||
sTextureDefinitionData.m_eTextureAlphaTest = kA3DTextureAlphaTestUnknown;
|
||||
sTextureDefinitionData.m_dAlphaTestReference = 0.0;
|
||||
|
||||
A3DUns32 uiIndexTextureDefinition;
|
||||
CHECK_RET(A3DGlobalInsertGraphTextureDefinition(&sTextureDefinitionData, &uiIndexTextureDefinition));
|
||||
free(sTextureDefinitionData.m_pdMappingAttributesIntensity);
|
||||
CHECK_RET(iRet);
|
||||
|
||||
A3DGraphTextureApplicationData sTextureApplicationData;
|
||||
A3D_INITIALIZE_DATA(A3DGraphTextureApplicationData, sTextureApplicationData);
|
||||
sTextureApplicationData.m_uiMaterialIndex = uiMaterialGenericIndex;
|
||||
sTextureApplicationData.m_uiTextureDefinitionIndex = uiIndexTextureDefinition;
|
||||
sTextureApplicationData.m_iUVCoordinatesIndex = 0;
|
||||
sTextureApplicationData.m_uiNextTextureApplicationIndex = A3D_DEFAULT_MATERIAL_INDEX;
|
||||
|
||||
A3DUns32 uiTextureApplicationIndex;
|
||||
CHECK_RET(A3DGlobalInsertGraphTextureApplication(&sTextureApplicationData, &uiTextureApplicationIndex));
|
||||
|
||||
// LinePattern is mandatory
|
||||
A3DUns32 uiLinePatternIndex;
|
||||
A3DGraphLinePatternData sLinePatternData;
|
||||
A3D_INITIALIZE_DATA(A3DGraphLinePatternData, sLinePatternData);
|
||||
sLinePatternData.m_uiNumberOfLengths = 2;
|
||||
sLinePatternData.m_pdLengths =
|
||||
(A3DDouble*)malloc(sLinePatternData.m_uiNumberOfLengths * A3DUns32(sizeof(A3DDouble)));
|
||||
sLinePatternData.m_pdLengths[0] = 10000.0;
|
||||
sLinePatternData.m_pdLengths[1] = 0.0;
|
||||
sLinePatternData.m_dPhase = 0.0;
|
||||
sLinePatternData.m_bRealLength = true;
|
||||
CHECK_RET(A3DGlobalInsertGraphLinePattern(&sLinePatternData, &uiLinePatternIndex));
|
||||
free(sLinePatternData.m_pdLengths);
|
||||
CHECK_RET(iRet);
|
||||
|
||||
A3DGraphStyleData sStyleData;
|
||||
A3D_INITIALIZE_DATA(A3DGraphStyleData, sStyleData);
|
||||
sStyleData.m_bMaterial = true;
|
||||
sStyleData.m_bVPicture = false;
|
||||
sStyleData.m_dWidth = 0.1; // default
|
||||
sStyleData.m_ucTransparency = 255;
|
||||
sStyleData.m_uiLinePatternIndex = uiLinePatternIndex;
|
||||
sStyleData.m_uiRgbColorIndex = uiTextureApplicationIndex;
|
||||
CHECK_RET(A3DGlobalInsertGraphStyle(&sStyleData, &uiStyleIndex));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
/***********************************************************************************************************************
|
||||
*
|
||||
* Copyright (c) 2010 - 2022 by Tech Soft 3D, Inc.
|
||||
* The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret
|
||||
* as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event
|
||||
* of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized
|
||||
* employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the
|
||||
* scope and manner of such use.
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
/**
|
||||
* Sample CreatePRCCubes
|
||||
* file CreateTextures.cpp
|
||||
* This file is containing the function allowing to create textures.
|
||||
*
|
||||
* Texture creation exemple
|
||||
* Create the style corresponding to texture.
|
||||
*
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
#pragma once
|
||||
|
||||
#include "../CreatePRCCubesDef.h"
|
||||
|
||||
#include "CreateGraphics.h"
|
||||
|
||||
//######################################################################################################################
|
||||
// Create the style corresponding to texture.
|
||||
A3DStatus createTexture(const A3DUTF8Char* pcPictureFilePath, A3DEPictureDataFormat eFormat, A3DUns32 uiPixelHeight, A3DUns32 uiPixelWidth, A3DUns32& uiStyleIndex);
|
||||
|
||||
275
exchange/exchangesource/CreatePRCCubes/modules/CreateViews.cpp
Normal file
275
exchange/exchangesource/CreatePRCCubes/modules/CreateViews.cpp
Normal file
@@ -0,0 +1,275 @@
|
||||
/***********************************************************************************************************************
|
||||
*
|
||||
* Copyright (c) 2010 - 2022 by Tech Soft 3D, Inc.
|
||||
* The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret
|
||||
* as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event
|
||||
* of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized
|
||||
* employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the
|
||||
* scope and manner of such use.
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
/**
|
||||
* Sample CreatePRCCubes
|
||||
* file CreateViews.cpp
|
||||
* This file is containing the function allowing to create views.
|
||||
*
|
||||
* The function createView contains a lot of optionnal elements that function as so:
|
||||
*
|
||||
* If pCameraPos and pCameraLookAt are defined: function stiA3DGraphSceneDisplayParametersDataAddCamera
|
||||
* is used to create a camera placement.
|
||||
*
|
||||
* If inGraphicsData is defined: linked item will be created in order to, at view activation,
|
||||
* apply the graphic behavior on the POs defined by ppLinkedPOs.
|
||||
*
|
||||
* If ppAnnotations are defined: the designated annotation will not be hidden at view activation.
|
||||
*
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
#include "CreateViews.h"
|
||||
|
||||
#include <vector>
|
||||
|
||||
//######################################################################################################################
|
||||
// Camera creation
|
||||
static int stiA3DGraphSceneDisplayParametersDataAddCamera(A3DGraphSceneDisplayParametersData& sGraphSceneDisplayParametersData,
|
||||
A3DVector3dData& sCameraPos,
|
||||
A3DVector3dData& sCameraLookAt,
|
||||
A3DDouble dXFovy, A3DDouble dYFovy)
|
||||
{
|
||||
A3DGraphCameraData sData;
|
||||
A3DGraphCamera* pCamera = NULL;
|
||||
A3D_INITIALIZE_DATA(A3DGraphCameraData, sData);
|
||||
sData.m_bOrthographic = true;
|
||||
sData.m_dAspectRatio = 1;
|
||||
sData.m_dZNear = 0.;
|
||||
sData.m_dZFar = 2. * INFINITE_COORD;
|
||||
sData.m_dXFovy = (dXFovy == -1.) ? stCameraFovX : dXFovy;
|
||||
sData.m_dYFovy = (dYFovy == -1.) ? stCameraFovY : dYFovy;
|
||||
|
||||
sData.m_sLookAt.m_dX = sCameraLookAt.m_dX;
|
||||
sData.m_sLookAt.m_dY = sCameraLookAt.m_dY;
|
||||
sData.m_sLookAt.m_dZ = sCameraLookAt.m_dZ;
|
||||
|
||||
sData.m_sLocation.m_dX = sCameraPos.m_dX;
|
||||
sData.m_sLocation.m_dY = sCameraPos.m_dY;
|
||||
sData.m_sLocation.m_dZ = sCameraPos.m_dZ;
|
||||
|
||||
sData.m_sUp.m_dX = 0.;
|
||||
sData.m_sUp.m_dY = 1.;
|
||||
sData.m_sUp.m_dZ = 0.;
|
||||
|
||||
if (A3DGraphCameraCreate(&sData, &pCamera) != A3D_SUCCESS)
|
||||
return A3D_ERROR;
|
||||
|
||||
sGraphSceneDisplayParametersData.m_pCamera = pCamera;
|
||||
return A3D_SUCCESS;
|
||||
}
|
||||
|
||||
|
||||
//######################################################################################################################
|
||||
//######################################################################################################################
|
||||
A3DStatus setViewCameraPlacement(A3DMkpViewData* pMkpViewData,
|
||||
A3DVector3dData* pCameraPos,
|
||||
A3DVector3dData* pCameraLookAt,
|
||||
A3DDouble dXFovy, A3DDouble dYFovy)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
if (pCameraPos && pCameraLookAt)
|
||||
{
|
||||
A3DGraphSceneDisplayParametersData sGraphSceneDisplayParametersData;
|
||||
A3D_INITIALIZE_DATA(A3DGraphSceneDisplayParametersData, sGraphSceneDisplayParametersData);
|
||||
sGraphSceneDisplayParametersData.m_uiBackgroundStyleIndex = A3D_DEFAULT_STYLE_INDEX;
|
||||
stiA3DGraphSceneDisplayParametersDataAddCamera(sGraphSceneDisplayParametersData, *pCameraPos, *pCameraLookAt, dXFovy, dYFovy);
|
||||
|
||||
CHECK_RET(A3DGraphSceneDisplayParametersCreate(&sGraphSceneDisplayParametersData, &pMkpViewData->m_pSceneDisplayParameters));
|
||||
}
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
A3DStatus addViewLinkedItem(A3DMkpViewData* pMkpViewData,
|
||||
A3DUns32 uiLinkedItemsSize,
|
||||
A3DMiscMarkupLinkedItem** ppLinkedItems)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
std::vector<A3DMiscMarkupLinkedItem*> vpMarkupLinkedItems;
|
||||
|
||||
// copy previous linked item of view.
|
||||
for (A3DUns32 i = 0; i < pMkpViewData->m_uiLinkedItemsSize; ++i)
|
||||
{
|
||||
vpMarkupLinkedItems.push_back(pMkpViewData->m_ppLinkedItems);
|
||||
}
|
||||
|
||||
// add the new ones
|
||||
for (A3DUns32 i = 0; i < uiLinkedItemsSize; ++i)
|
||||
{
|
||||
vpMarkupLinkedItems.push_back(ppLinkedItems[i]);
|
||||
}
|
||||
|
||||
// replace the data
|
||||
pMkpViewData->m_uiLinkedItemsSize = (A3DUns32)vpMarkupLinkedItems.size();
|
||||
pMkpViewData->m_ppLinkedItems = (A3DMiscMarkupLinkedItem**) malloc(pMkpViewData->m_uiLinkedItemsSize * A3DUns32(sizeof(A3DMiscMarkupLinkedItem*)));
|
||||
for (A3DUns32 i = 0; i < pMkpViewData->m_uiLinkedItemsSize; ++i)
|
||||
{
|
||||
pMkpViewData->m_ppLinkedItems[i] = vpMarkupLinkedItems[i];
|
||||
}
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
A3DStatus setIsDefaultView(A3DMkpViewData* pMkpViewData,
|
||||
A3DBool bIsDefaultView)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
pMkpViewData->m_bIsDefaultView = bIsDefaultView;
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
A3DStatus setViewEntitiesOffsetPosition(A3DMkpViewData* pMkpViewData,
|
||||
A3DUns32 uiLinkedPOsSize,
|
||||
A3DAsmProductOccurrence** ppLinkedPOs,
|
||||
A3DMiscCartesianTransformation** ppOffsetTransformation)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
std::vector<A3DMiscMarkupLinkedItem*> vpMarkupLinkedItems;
|
||||
|
||||
// create new Linked items pointing to entity with new coordinates systems
|
||||
for (A3DUns32 i = 0; i < uiLinkedPOsSize; ++i)
|
||||
{
|
||||
// create a linked item pointing to the entity
|
||||
A3DMiscMarkupLinkedItem* pLinkedItem = 0;
|
||||
CHECK_RET(createMarkupLinkedItemOnProduct(ppLinkedPOs[i], NULL, &pLinkedItem));
|
||||
|
||||
// create the new coordinate system
|
||||
// add the offset to every PO current position
|
||||
A3DAsmProductOccurrenceData sPOData;
|
||||
A3D_INITIALIZE_DATA(A3DAsmProductOccurrenceData, sPOData);
|
||||
CHECK_RET(A3DAsmProductOccurrenceGet(ppLinkedPOs[i], &sPOData));
|
||||
A3DMiscCartesianTransformationData sPOTransformationData;
|
||||
A3D_INITIALIZE_DATA(A3DMiscCartesianTransformationData, sPOTransformationData);
|
||||
CHECK_RET(A3DMiscCartesianTransformationGet(sPOData.m_pLocation, &sPOTransformationData));
|
||||
|
||||
A3DMiscCartesianTransformation* pOffsetTransformation = 0;
|
||||
A3DMiscCartesianTransformationData sOffsetTransformationData;
|
||||
A3D_INITIALIZE_DATA(A3DMiscCartesianTransformationData, sOffsetTransformationData);
|
||||
CHECK_RET(A3DMiscCartesianTransformationGet(ppOffsetTransformation[i], &sOffsetTransformationData));
|
||||
sOffsetTransformationData.m_sOrigin.m_dX += sPOTransformationData.m_sOrigin.m_dX;
|
||||
sOffsetTransformationData.m_sOrigin.m_dY += sPOTransformationData.m_sOrigin.m_dY;
|
||||
sOffsetTransformationData.m_sOrigin.m_dZ += sPOTransformationData.m_sOrigin.m_dZ;
|
||||
CHECK_RET(A3DMiscCartesianTransformationCreate(&sOffsetTransformationData, &pOffsetTransformation));
|
||||
|
||||
//create a CoordSystem
|
||||
A3DRiCoordinateSystem* pCoordinateSystem = 0;
|
||||
A3DRiCoordinateSystemData sCoordinateSystemData;
|
||||
A3D_INITIALIZE_DATA(A3DRiCoordinateSystemData, sCoordinateSystemData);
|
||||
sCoordinateSystemData.m_pTransformation = pOffsetTransformation;
|
||||
CHECK_RET(A3DRiCoordinateSystemCreate(&sCoordinateSystemData, &pCoordinateSystem));
|
||||
|
||||
//Create a A3DMiscEntityReference with the coordinates
|
||||
A3DMiscEntityReferenceData sMiscEntityRefData;
|
||||
A3D_INITIALIZE_DATA(A3DMiscEntityReferenceData, sMiscEntityRefData);
|
||||
sMiscEntityRefData.m_pEntity = ppLinkedPOs[i];
|
||||
sMiscEntityRefData.m_pCoordinateSystem = pCoordinateSystem;
|
||||
|
||||
//Attach A3DMiscEntityReference to the MkpLinkedItem previously created, pointing to entity
|
||||
CHECK_RET(A3DMiscEntityReferenceSet(pLinkedItem, &sMiscEntityRefData));
|
||||
|
||||
vpMarkupLinkedItems.push_back(pLinkedItem);
|
||||
}
|
||||
|
||||
CHECK_RET(addViewLinkedItem(pMkpViewData, (A3DUns32)vpMarkupLinkedItems.size(), &vpMarkupLinkedItems[0]));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
A3DStatus setViewEntitiesGraphics(A3DMkpViewData* pMkpViewData,
|
||||
A3DUns32 uiLinkedPOsSize,
|
||||
A3DAsmProductOccurrence** ppLinkedPOs,
|
||||
A3DRootBaseWithGraphicsData* inGraphicsData)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
std::vector<A3DMiscMarkupLinkedItem*> vpMarkupLinkedItems;
|
||||
|
||||
// create new Linked items pointing to entity with graphics
|
||||
for (A3DUns32 i = 0; i < uiLinkedPOsSize; ++i)
|
||||
{
|
||||
// create a linked item pointing to the entity
|
||||
A3DMiscMarkupLinkedItem* pLinkedItem = 0;
|
||||
CHECK_RET(createMarkupLinkedItemOnProduct(ppLinkedPOs[i], NULL, &pLinkedItem));
|
||||
// add the graphic to the linked item
|
||||
CHECK_RET(A3DRootBaseWithGraphicsSet(pLinkedItem, inGraphicsData));
|
||||
|
||||
vpMarkupLinkedItems.push_back(pLinkedItem);
|
||||
}
|
||||
|
||||
CHECK_RET(addViewLinkedItem(pMkpViewData, (A3DUns32)vpMarkupLinkedItems.size(), &vpMarkupLinkedItems[0]));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
//######################################################################################################################
|
||||
// The following function is only to be used when the annotations are owned by the same PO as the view will be.
|
||||
A3DStatus setViewAnnotations(A3DMkpViewData* pMkpViewData,
|
||||
A3DUns32 uiAnnotationsSize,
|
||||
A3DMkpAnnotationEntity ** ppAnnotations)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
pMkpViewData->m_uiAnnotationsSize = uiAnnotationsSize;
|
||||
pMkpViewData->m_ppAnnotations = ppAnnotations;
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
// The following function is to be used when the annotations are owned by the PO that is a child of the PO that own the view.
|
||||
A3DStatus setViewAnnotations(A3DMkpViewData* pMkpViewData,
|
||||
A3DUns32 uiAnnotationsSize,
|
||||
A3DMkpAnnotationEntity ** ppAnnotations,
|
||||
A3DAsmProductOccurrence** ppPOOwners)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
std::vector<A3DMiscMarkupLinkedItem*> vpMarkupLinkedItems;
|
||||
|
||||
// create new Linked items pointing to annotation
|
||||
for (A3DUns32 i = 0; i < uiAnnotationsSize; ++i)
|
||||
{
|
||||
// create a linked item pointing to the annotation
|
||||
// note that the PO owner of the annotation should be set.
|
||||
A3DMiscMarkupLinkedItem* pLinkedItem = 0;
|
||||
CHECK_RET(createMarkupLinkedItemOnEntity(ppAnnotations[i], ppPOOwners[i], &pLinkedItem));
|
||||
|
||||
vpMarkupLinkedItems.push_back(pLinkedItem);
|
||||
}
|
||||
|
||||
CHECK_RET(addViewLinkedItem(pMkpViewData, (A3DUns32)vpMarkupLinkedItems.size(), &vpMarkupLinkedItems[0]));
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
|
||||
//######################################################################################################################
|
||||
A3DStatus createView(A3DMkpView** ppOutMkupView,
|
||||
A3DMkpViewData* pMkpViewData,
|
||||
const A3DUTF8Char* inName)
|
||||
{
|
||||
A3DStatus iRet = A3D_SUCCESS;
|
||||
|
||||
CHECK_RET(A3DMkpViewCreate(pMkpViewData, ppOutMkupView));
|
||||
setEntityName(*ppOutMkupView, inName);
|
||||
|
||||
return iRet;
|
||||
}
|
||||
|
||||
|
||||
|
||||
74
exchange/exchangesource/CreatePRCCubes/modules/CreateViews.h
Normal file
74
exchange/exchangesource/CreatePRCCubes/modules/CreateViews.h
Normal file
@@ -0,0 +1,74 @@
|
||||
/***********************************************************************************************************************
|
||||
*
|
||||
* Copyright (c) 2010 - 2022 by Tech Soft 3D, Inc.
|
||||
* The information contained herein is confidential and proprietary to Tech Soft 3D, Inc., and considered a trade secret
|
||||
* as defined under civil and criminal statutes. Tech Soft 3D shall pursue its civil and criminal remedies in the event
|
||||
* of unauthorized use or misappropriation of its trade secrets. Use of this information by anyone other than authorized
|
||||
* employees of Tech Soft 3D, Inc. is granted only under a written non-disclosure agreement, expressly prescribing the
|
||||
* scope and manner of such use.
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
/**
|
||||
* Sample CreatePRCCubes
|
||||
* file CreateViews.cpp
|
||||
* This file is containing the function allowing to create views with optionnal elements.
|
||||
*
|
||||
*
|
||||
*
|
||||
*
|
||||
***********************************************************************************************************************/
|
||||
#pragma once
|
||||
|
||||
#include "../CreatePRCCubesDef.h"
|
||||
|
||||
#include "CreateLinkedItem.h"
|
||||
#include "CreateGraphics.h"
|
||||
|
||||
//######################################################################################################################
|
||||
|
||||
static const double stCameraFovX = 1000;
|
||||
static const double stCameraFovY = 1000;
|
||||
|
||||
static const A3DVector3dData stCameraPosDefault = {0, 2000, 0, 0};
|
||||
static const A3DVector3dData stCameraLookAtDefault = { 0, 300, 1050, 1050 };
|
||||
|
||||
//######################################################################################################################
|
||||
A3DStatus setViewCameraPlacement(A3DMkpViewData* pMkpViewData,
|
||||
A3DVector3dData* pCameraPos,
|
||||
A3DVector3dData* pCameraLookAt,
|
||||
A3DDouble dXFovy, A3DDouble dYFovy);
|
||||
|
||||
A3DStatus addViewLinkedItem(A3DMkpViewData* pMkpViewData,
|
||||
A3DUns32 uiLinkedItemsSize,
|
||||
A3DMiscMarkupLinkedItem** ppLinkedItems);
|
||||
|
||||
A3DStatus setIsDefaultView(A3DMkpViewData* pMkpViewData,
|
||||
A3DBool bIsDefaultView);
|
||||
|
||||
A3DStatus setViewEntitiesOffsetPosition(A3DMkpViewData* pMkpViewData,
|
||||
A3DUns32 uiLinkedPOsSize,
|
||||
A3DAsmProductOccurrence** ppLinkedPOs,
|
||||
A3DMiscCartesianTransformation** ppOffsetTransformation);
|
||||
|
||||
A3DStatus setViewEntitiesGraphics(A3DMkpViewData* pMkpViewData,
|
||||
A3DUns32 uiLinkedPOsSize,
|
||||
A3DAsmProductOccurrence** ppLinkedPOs,
|
||||
A3DRootBaseWithGraphicsData* inGraphicsData);
|
||||
|
||||
// The following function is only to be used when the annotations are owned by the same PO as the view will be.
|
||||
A3DStatus setViewAnnotations(A3DMkpViewData* pMkpViewData,
|
||||
A3DUns32 uiAnnotationsSize,
|
||||
A3DMkpAnnotationEntity ** ppAnnotations);
|
||||
|
||||
// The following function is to be used when the annotations are owned by the PO that is a child of the PO that own the view.
|
||||
A3DStatus setViewAnnotations(A3DMkpViewData* pMkpViewData,
|
||||
A3DUns32 uiAnnotationsSize,
|
||||
A3DMkpAnnotationEntity ** ppAnnotations,
|
||||
A3DAsmProductOccurrence** ppPOOwners);
|
||||
|
||||
A3DStatus createView(A3DMkpView** ppOutMkupView,
|
||||
A3DMkpViewData* pMkpViewData,
|
||||
const A3DUTF8Char* inName);
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user