DWF

Reply
Active Member
reterVision
Posts: 10
Registered: ‎10-10-2011
Message 1 of 1 (179 Views)

Write W2D problem with multi-page DWF

179 Views, 0 Replies
02-19-2012 08:19 PM

Hi,

 

I've met a problem when I trying to write w2d into multi-page DWF files. 

 

Every time when I called DWFToolkit::smileyvery-happy:WF6PackageWriter::write(), the program just paused and never wake up again. But everything goeswell when I run the same program with one-page DWF.

 

Any suggestiones were appreciated, thank you!

 

Here is my code:

 

DWFToolkit::smileyvery-happy:WFManifest::smileyfrustrated:ectionIterator* piSections = rManifestIn.getSections();
if (piSections)
{
DWFToolkit::smileyvery-happy:WFSection* pSection = NULL;
for (; piSections->valid(); piSections->next())
{
pSection = piSections->get();
pSection->readDescriptor();

if (pSection->type() == _DWF_FORMAT_EPLOT_TYPE_WIDE_STRING) // 2D Model handler.
{
// Add WT_Text.
for (DWFToolkit::smileyvery-happy:WFResourceContainer::ResourceIterator* pResources =
pSection->findResourcesByRole(DWFXML::kzRole_Graphics2d);
pResources && pResources->valid();
pResources->next())
{
if(pResources && pResources->valid())
{
DWFToolkit::smileyvery-happy:WFGraphicResource* w2dGraphics = (DWFToolkit::smileyvery-happy:WFGraphicResource*) pResources->get();
WT_Result res = WT_Result::smileyfrustrated:uccess;

// assumes above call to valid will return false if get()
// would return null
g_pDWFInputStream = pResources->get()->getInputStream();

WT_File inputStream;
inputStream.set_stream_open_action (&DWFInputStreamOpen);
inputStream.set_stream_close_action(&DWFInputStreamClose);
inputStream.set_stream_read_action (&DWFInputStreamRead);
inputStream.set_stream_seek_action (&DWFInputStreamSeek);
inputStream.set_stream_end_seek_action (&DWFInputStreamEndSeek);

// Open file to insert new object.
inputStream.set_file_mode(WT_File::File_Read);
inputStream.open();

// Create temporary w2d file.
WT_File pOutput;
pOutput.set_filename("temp.w2d");
pOutput.set_file_mode (WT_File::File_Write);
pOutput.open();
pOutput.heuristics().set_allow_binary_data(inputStream.heuristics().allow_binary_data());
pOutput.heuristics().set_allow_data_compression(inputStream.heuristics().allow_data_compression());
pOutput.heuristics().set_target_version(inputStream.heuristics().target_version());

double viewHeight=0.0f, viewWidth=0.0f;

while(res == WT_Result::smileyfrustrated:uccess)
{
res = inputStream.process_next_object();
if(res == WT_Result::smileyfrustrated:uccess)
{
const WT_Object* pObj = inputStream.current_object();
if(pObj)
{
switch (pObj->object_id())
{
case WT_Object::smileyvery-happy:WF_Header_ID:
case WT_Object::End_Of_DWF_ID:
// do nothing
break;

case WT_Object::View_ID:
{
WT_View *viewObj = (WT_View *) pObj;
WT_Logical_Box viewBox = viewObj->view();

viewHeight = viewBox.maxpt().m_y - viewBox.minpt().m_y;
viewWidth = viewBox.maxpt().m_x - viewBox.minpt().m_x;
}

default:
pObj->serialize(pOutput);
break;
}
}
}
}

// Close file stream.
inputStream.close();

// Open temporary file for writing new WT_Text.
WT_W2D_Class_Factory cf;
int x=viewWidth-viewWidth/10, y=viewHeight*2/3;

//Create text with overscoring, underscoring, and a bounding box
char contentASCii[255];
wcstombs(contentASCii, comment, wcslen(comment)+1);

// Set font property.
pOutput.desired_rendition().color().set(pOutput.desired_rendition().color_map().map(0));
pOutput.desired_rendition().font().font_name().set("Times New Roman");
pOutput.desired_rendition().font().height() = (WT_Integer32)(2.0 * 70);
pOutput.desired_rendition().font().width_scale() = 822;

// Font rotation.
const double degree = (int)(65636/360);
pOutput.desired_rendition().font().rotation().set((int)(degree * 45.0f));

WT_Text watermarkText = WT_Text(WT_Logical_Point(x+700, y-200), contentASCii);
//Serialize it.
WD_CHECK(watermarkText.serialize(pOutput));

// Add temporary w2d to resources.
pOutput.close();

//
// define the resource - this must be allocated on the heap
//
DWFToolkit::smileyvery-happy:WFGraphicResource* p2Dgfx =
DWFCORE_ALLOC_OBJECT(DWFToolkit::smileyvery-happy:WFGraphicResource(
w2dGraphics->title(), // title
DWFXML::kzRole_Graphics2d, // role
DWFMIME::kzMIMEType_W2D, // MIME type
w2dGraphics->author(), // author
w2dGraphics->description(), // description
w2dGraphics->creationTime(), // creation time
w2dGraphics->modificationTime())); // modification time
if (p2Dgfx == NULL)
{
_DWFCORE_THROW( DWFMemoryException, L"Failed to allocate resource" );
}

p2Dgfx->configureGraphic(
w2dGraphics->transform(),//(const double*)anTransform,
w2dGraphics->extents(),
w2dGraphics->clip()
);
//pSection->removeResource(*w2dGraphics, true);

DWFFile oW2DFilename(L"temp.w2d");
DWFStreamFileDescriptor* pW2DFile = DWFCORE_ALLOC_OBJECT(DWFStreamFileDescriptor(oW2DFilename, L"rb"));
DWFFileInputStream* pW2DFilestream = DWFCORE_ALLOC_OBJECT(DWFFileInputStream);

pW2DFile->open();
pW2DFilestream->attach(pW2DFile, true);
p2Dgfx->setInputStream(pW2DFilestream);
pSection->addResource(p2Dgfx, true);

// Add image to page
DWFToolkit::smileyvery-happy:WFImageResource* pImage =
DWFCORE_ALLOC_OBJECT(DWFToolkit::smileyvery-happy:WFImageResource(L"Watermark",
DWFXML::kzRole_RasterOverlay,
DWFMIME::kzMIMEType_JPG));
if (pImage == NULL)
{
_DWFCORE_THROW( DWFMemoryException, L"Failed to allocate resource" );
}

double anTransform2[4][4] = {
0.02, 0, 0, 0,
0, 0.02, 0, 0,
0, 0, 0.02, 0,
750, 400, 0, 1
};
double anExtents2[4] = {0, 0, 0, 0};
pImage->configureGraphic((const double*)anTransform2,
(const double*)anExtents2, NULL, true, 0, 0);

DWFFile oImageFilename(image_filename);
DWFStreamFileDescriptor* pImageFile = DWFCORE_ALLOC_OBJECT(DWFStreamFileDescriptor(oImageFilename, L"rb"));
DWFFileInputStream* pImageFilestream = DWFCORE_ALLOC_OBJECT(DWFFileInputStream);
pImageFile->open();
pImageFilestream->attach(pImageFile, true);
pImage->setInputStream(pImageFilestream);

// Add image resource into file.
pSection->addResource(pImage, true, true, true, NULL);
pResources->next();
}
}
}
oWriter.addSection(pSection);
}

DWFCORE_FREE_OBJECT(piSections);
}

oWriter.write();

You are not logged in.

Log into access your profile, ask and answer questions, share ideas and more. Haven't signed up yet? Register

Announcements
Welcome to the new Autodesk Community!
If this is your first visit, click here to get started and make the most of the Community. Let us know what you think of the new experience in the Community Feedback Forum.

Need installation help?

Start with some of our most frequented solutions to get help installing your software.

Ask the Community