mirror of
https://github.com/JakubMelka/PDF4QT.git
synced 2025-06-05 21:59:17 +02:00
3D PDF: PRC specification continuation, Right Hemisphere Adobe Mesh
This commit is contained in:
@@ -43,7 +43,7 @@ set(CMAKE_CXX_STANDARD_REQUIRED ON)
|
||||
|
||||
include(GNUInstallDirs)
|
||||
|
||||
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Svg Xml PrintSupport TextToSpeech OpenGL OpenGLWidgets Multimedia Network Test 3dcore 3drender 3dinput 3dlogic 3dextras)
|
||||
find_package(Qt6 REQUIRED COMPONENTS Core Gui Widgets Svg Xml PrintSupport TextToSpeech OpenGL OpenGLWidgets Multimedia Network Test 3dcore 3drender 3dinput 3dlogic 3dextras ShaderTools)
|
||||
qt_standard_project_setup()
|
||||
|
||||
find_package(OpenSSL REQUIRED)
|
||||
|
@@ -16,6 +16,7 @@
|
||||
// along with PDF4QT. If not, see <https://www.gnu.org/licenses/>.
|
||||
|
||||
#include "pdf3d_u3d.h"
|
||||
#include "pdfstreamfilters.h"
|
||||
|
||||
#include <QImageReader>
|
||||
#include <QStringConverter>
|
||||
@@ -915,6 +916,16 @@ private:
|
||||
float m_reserved3 = 0.0;
|
||||
};
|
||||
|
||||
class PDF3D_U3D_RHAdobeMeshResourceBlock : public PDF3D_U3D_AbstractBlock
|
||||
{
|
||||
public:
|
||||
virtual EBlockType getBlockType() const override { return PDF3D_U3D_Block_Info::BT_Unknown; }
|
||||
|
||||
static PDF3D_U3D_AbstractBlockPtr parse(QByteArray data, QByteArray metaData, PDF3D_U3D_Parser* object);
|
||||
|
||||
private:
|
||||
};
|
||||
|
||||
class PDF3D_U3D_LineSetContinuationBlock : public PDF3D_U3D_AbstractBlock
|
||||
{
|
||||
public:
|
||||
@@ -1509,6 +1520,8 @@ public:
|
||||
|
||||
void addBlockToU3D(PDF3D_U3D_AbstractBlockPtr block);
|
||||
|
||||
PDF3D_U3D_Block_Info::EPalette getPaletteByBlockType(uint32_t blockType) const;
|
||||
|
||||
QStringList getErrors() const { return m_errors; }
|
||||
|
||||
private:
|
||||
@@ -1532,6 +1545,7 @@ private:
|
||||
bool m_isCompressed = true;
|
||||
uint32_t m_priority = 0;
|
||||
QStringDecoder m_stringDecoder;
|
||||
uint32_t m_RHAdobeMeshResourceId = 0;
|
||||
};
|
||||
|
||||
class PDF3D_U3D_DataReader
|
||||
@@ -1547,6 +1561,7 @@ public:
|
||||
|
||||
uint8_t readU8();
|
||||
uint16_t readU16();
|
||||
uint32_t readU24();
|
||||
uint32_t readU32();
|
||||
uint64_t readU64();
|
||||
int16_t readI16();
|
||||
@@ -1672,6 +1687,14 @@ uint16_t PDF3D_U3D_DataReader::readU16()
|
||||
return low + (high << 8);
|
||||
}
|
||||
|
||||
uint32_t PDF3D_U3D_DataReader::readU24()
|
||||
{
|
||||
const uint32_t low = readU8();
|
||||
const uint32_t high = readU8();
|
||||
const uint32_t highest = readU8();
|
||||
return low + (high << 8) + (highest << 16);
|
||||
}
|
||||
|
||||
uint32_t PDF3D_U3D_DataReader::readU32()
|
||||
{
|
||||
const uint32_t low = readU16();
|
||||
@@ -3416,6 +3439,16 @@ void PDF3D_U3D_Parser::addBlockToU3D(PDF3D_U3D_AbstractBlockPtr block)
|
||||
}
|
||||
}
|
||||
|
||||
PDF3D_U3D_Block_Info::EPalette PDF3D_U3D_Parser::getPaletteByBlockType(uint32_t blockType) const
|
||||
{
|
||||
if (blockType == m_RHAdobeMeshResourceId)
|
||||
{
|
||||
return PDF3D_U3D_Block_Info::PL_Generator;
|
||||
}
|
||||
|
||||
return PDF3D_U3D_Block_Info::getPalette(static_cast<PDF3D_U3D_Block_Info::EBlockType>(blockType));
|
||||
}
|
||||
|
||||
PDF3D_U3D_Parser::PDF3D_U3D_Parser()
|
||||
{
|
||||
// Jakub Melka: Utf-8 (MIB 106) is default value for U3D strings
|
||||
@@ -3503,6 +3536,19 @@ void PDF3D_U3D_Parser::processBlock(const PDF3D_U3D_Block_Data& blockData,
|
||||
}
|
||||
|
||||
case PDF3D_U3D_NewObjectTypeBlock::ID:
|
||||
{
|
||||
auto block = parseBlock(blockData);
|
||||
const PDF3D_U3D_NewObjectTypeBlock* newObjectTypeBlock = dynamic_cast<const PDF3D_U3D_NewObjectTypeBlock*>(block.get());
|
||||
|
||||
// Right Hemisphere Adobe Mesh (RHAdobeMeshResource)
|
||||
// {00000000-0000-0000-0000-000000000000}
|
||||
if (newObjectTypeBlock->getExtensionId() == QUuid::fromString("{96a804a6-3fb9-43c5-b2df-2a31b5569340}"))
|
||||
{
|
||||
m_RHAdobeMeshResourceId = newObjectTypeBlock->getNewDeclarationBlockType();
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case PDF3D_U3D_FileReferenceBlock::ID:
|
||||
// Skip this block, we do not handle these type of blocks,
|
||||
// just read it... to check errors.
|
||||
@@ -3558,7 +3604,7 @@ void PDF3D_U3D_Parser::processGenericBlock(const PDF3D_U3D_Block_Data& blockData
|
||||
|
||||
uint32_t chainIndex = 0;
|
||||
PDF3D_U3D_Block_Info::EPalette effectivePalette = PDF3D_U3D_Block_Info::isChain(blockData.blockType) ? palette
|
||||
: PDF3D_U3D_Block_Info::getPalette(blockData.blockType);
|
||||
: getPaletteByBlockType(blockData.blockType);
|
||||
|
||||
if (effectivePalette == PDF3D_U3D_Block_Info::PL_LastPalette)
|
||||
{
|
||||
@@ -3700,6 +3746,11 @@ PDF3D_U3D_AbstractBlockPtr PDF3D_U3D_Parser::parseBlock(uint32_t blockType,
|
||||
return PDF3D_U3D_MotionResourceBlock::parse(data, metaData, this);
|
||||
|
||||
default:
|
||||
if (blockType == m_RHAdobeMeshResourceId)
|
||||
{
|
||||
return PDF3D_U3D_RHAdobeMeshResourceBlock::parse(data, metaData, this);
|
||||
}
|
||||
|
||||
m_errors << PDFTranslationContext::tr("Unable to parse block of type '%1'.").arg(blockType, 8, 16);
|
||||
break;
|
||||
}
|
||||
@@ -6766,6 +6817,154 @@ void PDF3D_U3D_Geometry::setShaders(const std::vector<QStringList>& newShaders)
|
||||
m_shaders = newShaders;
|
||||
}
|
||||
|
||||
PDF3D_U3D_AbstractBlockPtr PDF3D_U3D_RHAdobeMeshResourceBlock::parse(QByteArray data, QByteArray metaData, PDF3D_U3D_Parser* object)
|
||||
{
|
||||
PDF3D_U3D_RHAdobeMeshResourceBlock* block = new PDF3D_U3D_RHAdobeMeshResourceBlock();
|
||||
PDF3D_U3D_AbstractBlockPtr pointer(block);
|
||||
|
||||
PDF3D_U3D_DataReader reader(data, object->isCompressed());
|
||||
|
||||
QString objectName = reader.readString(object->getStringDecoder());
|
||||
uint32_t chainIndex = reader.readU32();
|
||||
/*
|
||||
QByteArray remainingData = reader.readRemainingData();
|
||||
QByteArray uncompressedData = PDFFlateDecodeFilter::uncompress(remainingData);
|
||||
return pointer;
|
||||
*/
|
||||
// Read the data
|
||||
while (!reader.isAtEnd())
|
||||
{
|
||||
// Read the header
|
||||
QString encoding = reader.readString(object->getStringDecoder());
|
||||
uint8_t flags = reader.readU8();
|
||||
|
||||
const bool hasExtensionData = flags & 0x10;
|
||||
const bool hasSkeletonData = flags & 0x20;
|
||||
const uint8_t materialTypeCount = flags >> 6;
|
||||
|
||||
if (hasExtensionData)
|
||||
{
|
||||
uint32_t sizeOfTheMeshDescriptionBlock = reader.readU32();
|
||||
uint16_t numberOfSubChunks = reader.readU16();
|
||||
|
||||
Q_UNUSED(sizeOfTheMeshDescriptionBlock);
|
||||
|
||||
for (uint16_t i = 0; i < numberOfSubChunks; ++i)
|
||||
{
|
||||
uint32_t subChunkSize = reader.readU32();
|
||||
uint16_t subChunkTypeInfo = reader.readU16();
|
||||
|
||||
Q_UNUSED(subChunkSize);
|
||||
Q_UNUSED(subChunkTypeInfo);
|
||||
}
|
||||
}
|
||||
|
||||
uint32_t materialCount = 0;
|
||||
switch (materialTypeCount)
|
||||
{
|
||||
case 0x00:
|
||||
materialCount = 1;
|
||||
break;
|
||||
|
||||
case 0x01:
|
||||
materialCount = reader.readU8();
|
||||
break;
|
||||
|
||||
case 0x02:
|
||||
materialCount = reader.readU16();
|
||||
break;
|
||||
|
||||
case 0x03:
|
||||
materialCount = reader.readU32();
|
||||
break;
|
||||
}
|
||||
|
||||
struct MaterialInfo
|
||||
{
|
||||
uint8_t textureDimensions = 0;
|
||||
uint32_t numberOfTextureLayers = 0;
|
||||
uint32_t originalShadingId = 0;
|
||||
bool hasDiffuseColors = false;
|
||||
bool hasSpecularColors = false;
|
||||
QByteArray additionalTextDimensions;
|
||||
};
|
||||
std::vector<MaterialInfo> materialInfos;
|
||||
|
||||
// We will read material info from the data
|
||||
if (materialTypeCount != 0)
|
||||
{
|
||||
for (uint32_t i = 0; i < materialTypeCount; ++i)
|
||||
{
|
||||
MaterialInfo materialInfo;
|
||||
|
||||
uint8_t materialFlags = reader.readU8();
|
||||
materialInfo.textureDimensions = materialFlags & 0x03;
|
||||
uint8_t originalShadingIdBytes = (materialFlags >> 2) & 0x03;
|
||||
uint8_t numberOfTextureLayersBytes = (materialFlags >> 4) & 0x03;
|
||||
materialInfo.hasDiffuseColors = (materialFlags & 0x40);
|
||||
materialInfo.hasSpecularColors = (materialFlags & 0x80);
|
||||
|
||||
switch (numberOfTextureLayersBytes)
|
||||
{
|
||||
case 0:
|
||||
materialInfo.numberOfTextureLayers = reader.readU8();
|
||||
break;
|
||||
case 1:
|
||||
materialInfo.numberOfTextureLayers = reader.readU16();
|
||||
break;
|
||||
case 2:
|
||||
materialInfo.numberOfTextureLayers = reader.readU24();
|
||||
break;
|
||||
case 3:
|
||||
materialInfo.numberOfTextureLayers = reader.readU32();
|
||||
break;
|
||||
}
|
||||
|
||||
switch (originalShadingIdBytes)
|
||||
{
|
||||
case 0:
|
||||
materialInfo.originalShadingId = reader.readU8();
|
||||
break;
|
||||
case 1:
|
||||
materialInfo.originalShadingId = reader.readU16();
|
||||
break;
|
||||
case 2:
|
||||
materialInfo.originalShadingId = reader.readU24();
|
||||
break;
|
||||
case 3:
|
||||
materialInfo.originalShadingId = reader.readU32();
|
||||
break;
|
||||
}
|
||||
|
||||
uint32_t numberOfAdditionalTextureLayers = materialInfo.numberOfTextureLayers > 0 ? materialInfo.numberOfTextureLayers - 1 : 0;
|
||||
uint32_t numberOfAdditionalTextureLayersBytes = 0;
|
||||
|
||||
if (numberOfAdditionalTextureLayers % 4 > 0)
|
||||
{
|
||||
numberOfAdditionalTextureLayersBytes = numberOfAdditionalTextureLayers / 4 + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
numberOfAdditionalTextureLayersBytes = numberOfAdditionalTextureLayers / 4;
|
||||
}
|
||||
|
||||
if (numberOfAdditionalTextureLayersBytes > 0)
|
||||
{
|
||||
materialInfo.additionalTextDimensions = reader.readByteArray(numberOfAdditionalTextureLayersBytes);
|
||||
}
|
||||
|
||||
materialInfos.emplace_back(std::move(materialInfo));
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
block->parseMetadata(metaData, object);
|
||||
return pointer;
|
||||
}
|
||||
|
||||
} // namespace u3d
|
||||
|
||||
} // namespace pdf
|
||||
|
@@ -61,7 +61,7 @@ GENERATE_EXPORT_HEADER(Pdf4QtViewer
|
||||
PDF4QTVIEWERLIBSHARED_EXPORT
|
||||
EXPORT_FILE_NAME "${CMAKE_BINARY_DIR}/${INSTALL_INCLUDEDIR}/pdf4qtviewer_export.h")
|
||||
|
||||
target_link_libraries(Pdf4QtViewer PRIVATE Pdf4QtLib Qt6::Core Qt6::Gui Qt6::Widgets Qt6::PrintSupport Qt6::TextToSpeech Qt6::Xml Qt6::OpenGLWidgets Qt6::3DCore Qt6::3DRender Qt6::3DInput Qt6::3DLogic Qt6::3DExtras)
|
||||
target_link_libraries(Pdf4QtViewer PRIVATE Pdf4QtLib Qt6::Core Qt6::Gui Qt6::Widgets Qt6::PrintSupport Qt6::TextToSpeech Qt6::Xml Qt6::OpenGLWidgets Qt6::3DCore Qt6::3DRender Qt6::3DInput Qt6::3DLogic Qt6::3DExtras Qt6::ShaderTools)
|
||||
target_include_directories(Pdf4QtViewer INTERFACE ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
target_include_directories(Pdf4QtViewer PUBLIC ${CMAKE_BINARY_DIR}/${INSTALL_INCLUDEDIR})
|
||||
|
||||
|
@@ -9,6 +9,45 @@
|
||||
|
||||
<enums>
|
||||
<enum name="EntityType">
|
||||
<item name="PRC_TYPE_CRV" value="PRC_TYPE_ROOT + 10" />
|
||||
<item name="PRC_TYPE_CRV_Base" value="PRC_TYPE_CRV + 1" />
|
||||
<item name="PRC_TYPE_CRV_Blend02Boundary" value="PRC_TYPE_CRV + 2" />
|
||||
<item name="PRC_TYPE_CRV_NURBS" value="PRC_TYPE_CRV + 3" />
|
||||
<item name="PRC_TYPE_CRV_Circle" value="PRC_TYPE_CRV + 4" />
|
||||
<item name="PRC_TYPE_CRV_Composite" value="PRC_TYPE_CRV + 5" />
|
||||
<item name="PRC_TYPE_CRV_OnSurf" value="PRC_TYPE_CRV + 6" />
|
||||
<item name="PRC_TYPE_CRV_Ellipse" value="PRC_TYPE_CRV + 7" />
|
||||
<item name="PRC_TYPE_CRV_Equation" value="PRC_TYPE_CRV + 8" />
|
||||
<item name="PRC_TYPE_CRV_Helix01" value="PRC_TYPE_CRV + 9" />
|
||||
<item name="PRC_TYPE_CRV_Hyperbola" value="PRC_TYPE_CRV + 10" />
|
||||
<item name="PRC_TYPE_CRV_Intersection" value="PRC_TYPE_CRV + 11" />
|
||||
<item name="PRC_TYPE_CRV_Line" value="PRC_TYPE_CRV + 12" />
|
||||
<item name="PRC_TYPE_CRV_Offset" value="PRC_TYPE_CRV + 13" />
|
||||
<item name="PRC_TYPE_CRV_Parabola" value="PRC_TYPE_CRV + 14" />
|
||||
<item name="PRC_TYPE_CRV_PolyLine" value="PRC_TYPE_CRV + 15" />
|
||||
<item name="PRC_TYPE_CRV_Transform" value="PRC_TYPE_CRV + 16" />
|
||||
|
||||
<item name="PRC_TYPE_SURF" value="PRC_TYPE_ROOT + 75" />
|
||||
<item name="PRC_TYPE_SURF_Base" value="PRC_TYPE_SURF + 1" />
|
||||
<item name="PRC_TYPE_SURF_Blend01" value="PRC_TYPE_SURF + 2" />
|
||||
<item name="PRC_TYPE_SURF_Blend02" value="PRC_TYPE_SURF + 3" />
|
||||
<item name="PRC_TYPE_SURF_Blend03" value="PRC_TYPE_SURF + 4" />
|
||||
<item name="PRC_TYPE_SURF_NURBS" value="PRC_TYPE_SURF + 5" />
|
||||
<item name="PRC_TYPE_SURF_Cone" value="PRC_TYPE_SURF + 6" />
|
||||
<item name="PRC_TYPE_SURF_Cylinder" value="PRC_TYPE_SURF + 7" />
|
||||
<item name="PRC_TYPE_SURF_Cyldrical" value="PRC_TYPE_SURF + 8" />
|
||||
<item name="PRC_TYPE_SURF_Offset" value="PRC_TYPE_SURF + 9" />
|
||||
<item name="PRC_TYPE_SURF_Pipe" value="PRC_TYPE_SURF + 10" />
|
||||
<item name="PRC_TYPE_SURF_Plane" value="PRC_TYPE_SURF + 11" />
|
||||
<item name="PRC_TYPE_SURF_Ruled" value="PRC_TYPE_SURF + 12" />
|
||||
<item name="PRC_TYPE_SURF_Sphere" value="PRC_TYPE_SURF + 13" />
|
||||
<item name="PRC_TYPE_SURF_Revolution" value="PRC_TYPE_SURF +14" />
|
||||
<item name="PRC_TYPE_SURF_Extrusion" value="PRC_TYPE_SURF + 15" />
|
||||
<item name="PRC_TYPE_SURF_FromCurves" value="PRC_TYPE_SURF + 16" />
|
||||
<item name="PRC_TYPE_SURF_Torus" value="PRC_TYPE_SURF + 17" />
|
||||
<item name="PRC_TYPE_SURF_Transform" value="PRC_TYPE_SURF + 18" />
|
||||
<item name="PRC_TYPE_SURF_Blend04" value="PRC_TYPE_SURF + 19" />
|
||||
|
||||
<item name="PRC_TYPE_TOPO" value="PRC_TYPE_ROOT + 140" />
|
||||
<item name="PRC_TYPE_TOPO_Context" value="PRC_TYPE_TOPO + 1" />
|
||||
<item name="PRC_TYPE_TOPO_Item" value="PRC_TYPE_TOPO + 2" />
|
||||
@@ -607,7 +646,7 @@
|
||||
|
||||
<object name="ElementInformation">
|
||||
<field name="has_graphics" type="Boolean" />
|
||||
<field name="graphic_behavior" typ="ElementGraphicsBehavior" condition="has_graphics == TRUE" />
|
||||
<field name="graphic_behavior" type="ElementGraphicsBehavior" condition="has_graphics == TRUE" />
|
||||
</object>
|
||||
|
||||
<object name="ElementGraphicsBehavior">
|
||||
@@ -1667,7 +1706,436 @@
|
||||
<field name="knot2" type="DoubleWithVariableBitNumber" condition="number_bit_parameter <= 30" />
|
||||
</object>
|
||||
|
||||
str. 146
|
||||
<object name="CompressedWeights">
|
||||
<field name="number_bit_weight" type="UnsignedIntegerWithVariableBitNumber" bits="6" />
|
||||
<array name="weights" dim="number_ccpt_in_u * number_ccpt_in_v" type="Double" condition="number_bit_weight > 30" />
|
||||
<field name="tolerance" type="Double" condition="number_bit_weight <= 30" />
|
||||
<array name="compressed_weights" dim="number_ccpt_in_u * number_ccpt_in_v" type="DoubleWithVariableBitNumber" condition="number_bit_weight <= 30" />
|
||||
</object>
|
||||
|
||||
<object name="ContentCompressedFace">
|
||||
<field name="orientation_surface_with_shell" type="Boolean" />
|
||||
<field name="iso_face" type="ContentCompressedIsoFace" condition="is_an_iso_face == TRUE"/>
|
||||
<field name="ana_face" type="ContentCompressedAnaFace" condition="is_an_iso_face == FALSE" />
|
||||
</object>
|
||||
|
||||
<object name="ContentCompressedIsoFace">
|
||||
<field name="orientation_loop_with_surface" type="Boolean" />
|
||||
<field name="first_trim_curve" type="RefOrCompressedCurve" />
|
||||
<field name="second_trim_curve" type="RefOrCompressedCurve" />+
|
||||
<field name="third_trim_curve_is_not_yet_saved" type="Boolean" />
|
||||
<field name="third_trim_curve" type="UnsignedIntegerWithVariableBitNumber" condition="third_trim_curve_is_not_yet_saved == FALSE" />
|
||||
<field name="fourth_trim_curve_is_not_yet_saved" type="Boolean" />
|
||||
<field name="fourth_trim_curve" type="UnsignedIntegerWithVariableBitNumber" condition="fourth_trim_curve_is_not_yet_saved == FALSE" />
|
||||
<field name="common_third_fourth_vertex" type="CompressedVertex" condition="third_trim_curve_is_not_yet_saved && fourth_trim_curve_is_not_yet_saved" />
|
||||
</object>
|
||||
|
||||
<object name="ContentCompressedAnaFace">
|
||||
<field name="is_trimmed" type="Boolean" />
|
||||
<array name="trim_loop" dim="" type="AnaFaceTrimLoop" condition="is_trimmed == TRUE" />
|
||||
<field name="point_on_torus" type="CompressedPoint" condition="all_loops_are_vertex_loops == TRUE && surface_type == PRC_HCG_AnaTorus && is_trimmed == TRUE" />
|
||||
</object>
|
||||
|
||||
<object name="AnaFaceTrimLoop">
|
||||
<field name="loop_surface_orientation" type="Boolean" />
|
||||
<array name="curves" dim="" type="RefOrCompressedCurve" />
|
||||
<field name="curve_is_not_already_stored" type="Boolean" />
|
||||
<field name="type" type="CompressedEntityType" />
|
||||
</object>
|
||||
|
||||
<object name="RefOrCompressedCurve">
|
||||
<field name="curve_is_not_already_stored" type="Boolean" />
|
||||
<field name="index_compressed_curve" type="UnsignedIntegerWithVariableBitNumber" bits="number_of_bits_to_store_reference" condition="curve_is_not_already_stored == FALSE" />
|
||||
<field name="compressed_curve" type="CompressedCurve" condition="curve_is_not_already_stored == TRUE" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_HCG_Line">
|
||||
<field name="" type="CompressedEntityType" constant="PRC_HCG_Line" />
|
||||
<field name="start_end_data" type="StartEndData" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_HCG_Circle">
|
||||
<field name="" type="CompressedEntityType" constant="PRC_HCG_Circle" condition="compressed_iso_spline == FALSE" />
|
||||
<field name="is_particular_circle" type="Boolean" />
|
||||
<field name="particular_circle" type="ParticularCircle" condition="is_particular_circle == TRUE" />
|
||||
<field name="general_circle" type="GeneralCircle" condition="is_particular_circle == FALSE" />
|
||||
</object>
|
||||
|
||||
<object name="ParticularCircle">
|
||||
<field name="full_circle" type="Boolean" />
|
||||
<field name="start_end_data" type="StartEndData" condition="compressed_iso_spline == FALSE" />
|
||||
<field name="center" type="CompressedPoint" condition="full_circle == TRUE" />
|
||||
<field name="normal_plane" type="CompressedPoint" condition="full_circle == TRUE" />
|
||||
<field name="middle_of_arc" type="CompressedPoint" condition="full_circle == FALSE" />
|
||||
</object>
|
||||
|
||||
<object name="GeneralCircle">
|
||||
<field name="start_end_data" type="StartEndData" />
|
||||
<field name="center" type="CompressedPoint" />
|
||||
<field name="circle_angle" type="Boolean" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_HCG_BsplineHermiteCurve">
|
||||
<field name="" type="CompressedEntityType" constant="PRC_HCG_BsplineHermiteCurve" />
|
||||
<field name="start_end_data" type="StartEndData" />
|
||||
<field name="number_bits" type="UnsignedIntegerWithVariableBitNumber" bits="4" />
|
||||
<field name="number_points" type="UnsignedIntegerWithVariableBitNumber" bits="number_bits" />
|
||||
<field name="point_number_bits" type="UnsignedIntegerWithVariableBitNumber" bits="6" />
|
||||
<array name="points" dim="number_points - 2" type="Vector3d" condition="point_number_bits > 30" />
|
||||
<array name="compressed_points" dim="number_points - 2" type="Point3DWithVariableBitNumber" bits="point_number_bits" condition="point_number_bits <= 30" />
|
||||
<field name="tangent_number_bits" type="UnsignedIntegerWithVariableBitNumber" bits="6" />
|
||||
<array name="tangents" dim="number_points" type="Vector3d" condition="tangent_number_bits > 30" />
|
||||
<array name="compressed_tangents" dim="number_points" type="Point3DWithVariableBitNumber" bits="tangent_number_bits" condition="tangent_number_bits <= 30" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_HCG_CompositeCurve">
|
||||
<field name="" type="CompressedEntityType" constant="PRC_HCG_CompositeCurve" condition="compressed_iso_spline == FALSE" />
|
||||
<field name="start_end_data" type="StartEndData" />
|
||||
<field name="dimension" type="UnsignedInteger" />
|
||||
<field name="is_closed" type="Boolean" />
|
||||
<field name="number_of_curves" type="UnsignedInteger" />
|
||||
<array name="curves" dim="number_of_curves" type="CompressedCurve" />
|
||||
</object>
|
||||
|
||||
<object name="StartEndData">
|
||||
<field name="start_vertex" type="CompressedVertex" condition="curve_trimming_face == TRUE" />
|
||||
<field name="end_vertex" type="CompressedVertex" condition="curve_trimming_face == TRUE" />
|
||||
<field name="start_point" type="CompressedPoint" condition="curve_trimming_face == FALSE" />
|
||||
<field name="end_point" type="CompressedPoint" condition="curve_trimming_face == FALSE" />
|
||||
</object>
|
||||
|
||||
<object name="CompressedVertex">
|
||||
<field name="already_stored" type="Boolean" />
|
||||
<field name="point_index" type="UnsignedIntegerWithVariableBitNumber" bits="number_of_bits_to_store_reference" condition="already_stored == FALSE" />
|
||||
<field name="point_data" type="CompressedPoint" condition="already_stored == TRUE" />
|
||||
</object>
|
||||
|
||||
<object name="CompressedPoint">
|
||||
<field name="uNbBits" type="UnsignedIntegerWithVariableBitNumber" bits="6" />
|
||||
<field name="pointA" type="Point3DWithVariableBitNumber" condition="uNbBits <= 30" />
|
||||
<field name="pointB" type="Vector3d" condition="uNbBits > 30" />
|
||||
</object>
|
||||
|
||||
<object name="PtrCurve">
|
||||
<field name="is_referenced" type="Boolean" />
|
||||
<field name="curve" type="PRC_TYPE_CRV" condition="is_referenced == FALSE" />
|
||||
<field name="curve_identifier" type="UnsignedInteger" condition="is_referenced == TRUE" />
|
||||
</object>
|
||||
|
||||
<object name="PtrSurface">
|
||||
<field name="is_referenced" type="Boolean" />
|
||||
<field name="surface" type="PRC_TYPE_SURF" condition="is_referenced == FALSE" />
|
||||
<field name="surface_identifier" type="UnsignedInteger" condition="is_referenced == TRUE" />
|
||||
</object>
|
||||
|
||||
<object name="PtrTopology">
|
||||
<field name="is_referenced" type="Boolean" />
|
||||
<field name="topo" type="PRC_TYPE_TOPO" condition="is_referenced == FALSE" />
|
||||
<field name="topo_identifier" type="UnsignedInteger" condition="is_referenced == TRUE" />
|
||||
</object>
|
||||
|
||||
<object name="ContentCurve">
|
||||
<field name="has_base_geometry" type="Boolean" />
|
||||
<field name="attribute_data" type="AttributeData" condition="has_base_geometry == TRUE" />
|
||||
<field name="name" type="Name" condition="has_base_geometry == TRUE" />
|
||||
<field name="id" type="UnsignedInteger" condition="has_base_geometry == TRUE" />
|
||||
<field name="extend_type" type="UnsignedInteger" />
|
||||
<field name="is_3d_flag" type="Boolean" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_TYPE_CRV_Blend02Boundary">
|
||||
<field name="" type="UnsignedInteger" constant="PRC_TYPE_CRV_Blend02Boundary" />
|
||||
<field name="curve_data" type="ContentCurve" />
|
||||
<field name="transform" type="Transformation" />
|
||||
<field name="paramaterization" type="Parameterization" />
|
||||
<field name="surface" type="PtrSurface" />
|
||||
<field name="bound" type="Integer" />
|
||||
<field name="number_of_crossing_points" type="UnsignedInteger" />
|
||||
<array name="crossing_points" dim="number_of_crossing_points" type="Vector3d" />
|
||||
<field name="chord_error" type="Double" />
|
||||
<field name="angle_error" type="Double" />
|
||||
<field name="bound_surface" type="PtrSurface" />
|
||||
<field name="sense_bound_surface" type="Boolean" />
|
||||
<field name="intersection_order" type="Boolean" />
|
||||
<field name="sense_intersection_order" type="Boolean" />
|
||||
<field name="base_parameter" type="Double" />
|
||||
<field name="base_scale" type="Double" />
|
||||
<field name="start_limit_point" type="Vector3D" />
|
||||
<field name="start_limit_type" type="UnsignedInteger" />
|
||||
<field name="end_limit_point" type="Vector3D" />
|
||||
<field name="end_limit_type" type="UnsignedInteger" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_TYPE_CRV_NURBS">
|
||||
<field name="" type="UnsignedInteger" constant="PRC_TYPE_CRV_NURBS" />
|
||||
<field name="curve_data" type="ContentCurve" />
|
||||
<field name="is_rational" type="Boolean" />
|
||||
<field name="d" type="UnsignedInteger" />
|
||||
<field name="highest_index_of_control_points" type="UnsignedInteger" />
|
||||
<field name="highest_index_of_knots" type="UnsignedInteger" />
|
||||
<array name="p" dim="np" type="ControlPointsNurbsCrv" />
|
||||
<array name="u" dim="nu" type="Double" />
|
||||
<field name="knot_type" type="UnsignedInteger" />
|
||||
<field name="curve_form" type="UnsignedInteger" />
|
||||
</object>
|
||||
|
||||
<object name="ControlPointsNurbsCrv">
|
||||
<field name="x" type="Double" />
|
||||
<field name="y" type="Double" />
|
||||
<field name="z" type="Double" condition="is_3d_flag == TRUE" />
|
||||
<field name="w" type="Double" condition="is_rational == TRUE" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_TYPE_CRV_Circle">
|
||||
<field name="" type="UnsignedInteger" constant="PRC_TYPE_CRV_Circle" />
|
||||
<field name="curve_data" type="ContentCurve" />
|
||||
<field name="has_transform" type="Boolean" />
|
||||
<field name="transform" type="Transformation" condition="has_transform == TRUE" />
|
||||
<field name="paramaterization" type="Parameterization" />
|
||||
<field name="radius" type="Double" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_TYPE_CRV_Composite">
|
||||
<field name="" type="UnsignedInteger" constant="PRC_TYPE_CRV_Composite" />
|
||||
<field name="curve_data" type="ContentCurve" />
|
||||
<field name="transform" type="Transformation" />
|
||||
<field name="paramaterization" type="Parameterization" />
|
||||
<field name="number_of_subcurves" type="UnsignedInteger" />
|
||||
<array name="subcurves" dim="number_of_subcurves" type="CompositeSubCurve" />
|
||||
<field name="is_closed" type="Boolean" />
|
||||
</object>
|
||||
|
||||
<object name="CompositeSubCurve">
|
||||
<field name="subcurve" type="PtrCurve" />
|
||||
<field name="sense" type="Boolean" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_TYPE_CRV_OnSurf">
|
||||
<field name="" type="UnsignedInteger" constant="PRC_TYPE_CRV_OnSurf" />
|
||||
<field name="curve_data" type="ContentCurve" />
|
||||
<field name="transform" type="Transformation" />
|
||||
<field name="paramaterization" type="Parameterization" />
|
||||
<field name="tolerance" type="Double" />
|
||||
<field name="uv_curve" type="PtrCurve" />
|
||||
<field name="surface" type="PtrSurface" />
|
||||
<field name="uv_domain" type="Domain" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_TYPE_CRV_Ellipse">
|
||||
<field name="" type="UnsignedInteger" constant="PRC_TYPE_CRV_Ellipse" />
|
||||
<field name="curve_data" type="ContentCurve" />
|
||||
<field name="transform" type="Transformation" />
|
||||
<field name="paramaterization" type="Parameterization" />
|
||||
<field name="rx" type="Double" />
|
||||
<field name="ry" type="Double" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_TYPE_CRV_Equation">
|
||||
<field name="" type="UnsignedInteger" constant="PRC_TYPE_CRV_Equation" />
|
||||
<field name="curve_data" type="ContentCurve" />
|
||||
<field name="transform" type="Transformation" />
|
||||
<field name="paramaterization" type="Parameterization" />
|
||||
<field name="interval" type="Interval" />
|
||||
<field name="x_function" type="PRC_TYPE_MATH_FCT_1D" />
|
||||
<field name="y_function" type="PRC_TYPE_MATH_FCT_1D" />
|
||||
<field name="z_function" type="PRC_TYPE_MATH_FCT_1D" condition="is_3d_flag == TRUE" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_TYPE_CRV_Helix01">
|
||||
<field name="" type="UnsignedInteger" constant="PRC_TYPE_CRV_Helix01" />
|
||||
<field name="curve_data" type="ContentCurve" />
|
||||
<field name="transform" type="Transformation" />
|
||||
<field name="paramaterization" type="Parameterization" />
|
||||
<field name="type" type="Character" />
|
||||
<field name="orientation" type="Boolean" />
|
||||
<field name="start" type="Vector3d" />
|
||||
<field name="type0_helix" type="Type0HelixData" condition="type == 0" />
|
||||
<field name="type1_helix" type="Type1HelixData" condition="type == 1" />
|
||||
</object>
|
||||
|
||||
<object name="Type0HelixData">
|
||||
<field name="origin_0" type="Double" />
|
||||
<field name="direction_0" type="Double" />
|
||||
<field name="origin_1" type="Double" />
|
||||
<field name="direction_1" type="Double" />
|
||||
<field name="origin_2" type="Double" />
|
||||
<field name="direction_2" type="Double" />
|
||||
<field name="pitch" type="Double" />
|
||||
<field name="radius" type="Double" />
|
||||
</object>
|
||||
|
||||
<object name="Type1HelixData">
|
||||
<field name="unit_z0" type="Double" />
|
||||
<field name="unit_u0" type="Double" />
|
||||
<field name="unit_z1" type="Double" />
|
||||
<field name="unit_u1" type="Double" />
|
||||
<field name="unit_z2" type="Double" />
|
||||
<field name="unit_u2" type="Double" />
|
||||
<field name="reserved_double_0" type="Double" />
|
||||
<field name="reserved_double_1" type="Double" />
|
||||
<field name="reserved_double_2" type="Double" />
|
||||
<field name="reserved_double_3" type="Double" />
|
||||
<field name="radius_law" type="PRC_TYPE_MATH_FCT_1D" />
|
||||
<field name="z_law" type="PRC_TYPE_MATH_FCT_1D" />
|
||||
<field name="theta_law" type="PRC_TYPE_MATH_FCT_1D" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_TYPE_CRV_Hyperbola">
|
||||
<field name="" type="UnsignedInteger" constant="PRC_TYPE_CRV_Hyperbola" />
|
||||
<field name="curve_data" type="ContentCurve" />
|
||||
<field name="transform" type="Transformation" />
|
||||
<field name="paramaterization" type="Parameterization" />
|
||||
<field name="semi_axis" type="Double" />
|
||||
<field name="semi_image_axis" type="Double" />
|
||||
<field name="type" type="Character" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_TYPE_CRV_Intersection">
|
||||
<field name="" type="UnsignedInteger" constant="PRC_TYPE_CRV_Intersection" />
|
||||
<field name="curve_data" type="ContentCurve" />
|
||||
<field name="has_transform" type="Boolean" />
|
||||
<field name="transform" type="Transformation" condition="has_transform == TRUE" />
|
||||
<field name="parameterization" type="Parameterization" />
|
||||
<field name="surface_1" type="PtrSurface" />
|
||||
<field name="surface_2" type="PtrSurface" />
|
||||
<field name="sense_1" type="Boolean" />
|
||||
<field name="sense_2" type="Boolean" />
|
||||
<field name="sense_cross" type="Boolean" />
|
||||
<field name="number_of_crossings" type="UnsignedInteger" />
|
||||
<array name="crossings" dim="number_of_crossings" type="CrossingPointsCrvIntersection" />
|
||||
<field name="start_limit_point" type="Vector3D" />
|
||||
<field name="start_limit_type" type="UnsignedInteger" />
|
||||
<field name="end_limit_point" type="Vector3D" />
|
||||
<field name="end_limit_type" type="UnsignedInteger" />
|
||||
<field name="chord_error" type="Double" />
|
||||
<field name="angle_error" type="Double" />
|
||||
<field name="param_respected" type="Boolean" />
|
||||
</object>
|
||||
|
||||
<object name="CrossingPointsCrvIntersection">
|
||||
<field name="position" type="Vector3D" />
|
||||
<field name="uv_surface_1" type="Vector2D" />
|
||||
<field name="uv_surface_2" type="Vector2D" />
|
||||
<field name="tangent" type="Vector3D" />
|
||||
<field name="parameter" type="Double" />
|
||||
<field name="scale" type="Double" />
|
||||
<field name="flags" type="Character" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_TYPE_CRV_Line">
|
||||
<field name="" type="UnsignedInteger" constant="PRC_TYPE_CRV_Line" />
|
||||
<field name="curve_data" type="ContentCurve" />
|
||||
<field name="has_transform" type="Boolean" />
|
||||
<field name="transform" type="Transformation" condition="has_transform == TRUE" />
|
||||
<field name="parameterization" type="Parameterization" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_TYPE_CRV_Offset">
|
||||
<field name="" type="UnsignedInteger" constant="PRC_TYPE_CRV_Offset" />
|
||||
<field name="curve_data" type="ContentCurve" />
|
||||
<field name="transform" type="Transformation" />
|
||||
<field name="parameterization" type="Parameterization" />
|
||||
<field name="base_curve" type="PtrCurve" />
|
||||
<field name="offset_plane_normal" type="Vector3D" />
|
||||
<field name="offset" type="Double" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_TYPE_CRV_Parabola">
|
||||
<field name="" type="UnsignedInteger" constant="PRC_TYPE_CRV_Parabola" />
|
||||
<field name="curve_data" type="ContentCurve" />
|
||||
<field name="transform" type="Transformation" />
|
||||
<field name="parameterization" type="Parameterization" />
|
||||
<field name="focal_length" type="Double" />
|
||||
<field name="type" type="Character" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_TYPE_CRV_PolyLine">
|
||||
<field name="" type="UnsignedInteger" constant="PRC_TYPE_CRV_PolyLine" />
|
||||
<field name="curve_data" type="ContentCurve" />
|
||||
<field name="has_transform" type="Boolean" />
|
||||
<field name="transform" type="Transformation" condition="has_transform == TRUE" />
|
||||
<field name="parameterization" type="Parameterization" />
|
||||
<field name="number_of_points" type="UnsignedInteger" />
|
||||
<array name="points" dim="number_of_points" type="PolyLinePoint" />
|
||||
</object>
|
||||
|
||||
<object name="PolyLinePoint">
|
||||
<field name="point_3d" type="Vector3D" conditions="is_3d_flag == TRUE" />
|
||||
<field name="point_2d" type="Vector2D" conditions="is_3d_flag == FALSE" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_TYPE_CRV_Transform">
|
||||
<field name="" type="UnsignedInteger" constant="PRC_TYPE_CRV_Transform" />
|
||||
<field name="curve_data" type="ContentCurve" />
|
||||
<field name="transform" type="Transformation" />
|
||||
<field name="parameterization" type="Parameterization" />
|
||||
<field name="base_curve" type="PtrCurve" />
|
||||
<field name="math_transformation" type="PRC_TYPE_MATH_FCT_3D" />
|
||||
</object>
|
||||
|
||||
<object name="ContentSurface">
|
||||
<field name="has_base_geometry" type="Boolean" />
|
||||
<field name="attribute_data" type="AttributeData" condition="has_base_geometry == TRUE" />
|
||||
<field name="name" type="Name" condition="has_base_geometry == TRUE" />
|
||||
<field name="id" type="UnsignedInteger" condition="has_base_geometry == TRUE" />
|
||||
<field name="extend_type" type="UnsignedInteger" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_TYPE_SURF_Blend01">
|
||||
<field name="" type="UnsignedInteger" constant="PRC_TYPE_SURF_Blend01" />
|
||||
<field name="curve_data" type="ContentSurface" />
|
||||
<field name="transform" type="Transformation" />
|
||||
<field name="parameterization" type="UVParameterization" />
|
||||
<field name="center_curve" type="PtrCurve" />
|
||||
<field name="origin_curve" type="PtrCurve" />
|
||||
<field name="tangent_curve" type="PtrCurve" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_TYPE_SURF_Blend02">
|
||||
<field name="" type="UnsignedInteger" constant="PRC_TYPE_SURF_Blend02" />
|
||||
<field name="curve_data" type="ContentSurface" />
|
||||
<field name="transform" type="Transformation" />
|
||||
<field name="parameterization" type="UVParameterization" />
|
||||
<field name="bound_surface_0" type="PtrSurface" />
|
||||
<field name="bound_curve_0" type="PtrCurve" />
|
||||
<field name="bound_surface_1" type="PtrSurface" />
|
||||
<field name="bound_curve_1" type="PtrCurve" />
|
||||
<field name="center_curve" type="PtrCurve" />
|
||||
<field name="center_curve_sense" type="Boolean" />
|
||||
<field name="bound_surface_0_sense" type="Boolean" />
|
||||
<field name="bound_surface_1_sense" type="Boolean" />
|
||||
<field name="radius_0" type="Double" />
|
||||
<field name="radius_1" type="Double" />
|
||||
<field name="cliff_surface_0" type="PtrSurface" />
|
||||
<field name="cliff_surface_1" type="PtrSurface" />
|
||||
<field name="parameterization_type" type="Character" />
|
||||
</object>
|
||||
|
||||
<object name="PRC_TYPE_SURF_Blend03">
|
||||
<field name="" type="UnsignedInteger" constant="PRC_TYPE_SURF_Blend03" />
|
||||
<field name="curve_data" type="ContentSurface" />
|
||||
<field name="transform" type="Transformation" />
|
||||
<field name="parameterization" type="UVParameterization" />
|
||||
<field name="number_of_elements" type="Integer" />
|
||||
<array name="parameters" dim="number_of_elements" type="Double" />
|
||||
<array name="multiplicities" dim="number_of_elements" type="Integer" />
|
||||
<array name="points" dim="number_of_elements" type="Vector3D" />
|
||||
<array name="rail_2_angles_v" dim="number_of_elements" type="Double" />
|
||||
<array name="tangents" dim="number_of_elements" type="Vector3D" />
|
||||
<array name="rail_2_derivatives_v" dim="number_of_elements" type="Double" />
|
||||
<array name="second_derivatives" dim="number_of_elements" type="Vector3D" />
|
||||
<array name="rail_2_second_derivatives" dim="number_of_elements" type="Double" />
|
||||
<field name="rail_2_parameter_v" type="Double" />
|
||||
<field name="trim_v_min" type="Double" />
|
||||
<field name="trim_v_max" type="Double" />
|
||||
<array name="reserved_int" dim="6" type="Integer" />
|
||||
<field name="reserved_char_0" type="Character" />
|
||||
<field name="reserved_char_1" type="Character" />
|
||||
<field name="reserved_char_2" type="Character" />
|
||||
<field name="number_of_supplimental_doubles" type="Integer" />
|
||||
<array name="supplimental_doubles" dim="number_of_supplimental_doubles" type="Double" />
|
||||
</object>
|
||||
|
||||
</objects>
|
||||
</prc>
|
||||
|
||||
|
Reference in New Issue
Block a user