Main Page | Modules | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Class Members | File Members | Related Pages | Examples

WhipExamples/WriteRedline.cpp

#include "whiptk/whip_toolkit.h"

void write_my_dwf(RECT rect, double paper_scale, double paper_offset)
{
    WT_File my_file;
    my_file.set_filename("testfile.dwf");
    my_file.heuristics().set_target_version(55);
    my_file.set_file_mode(WT_File::Block_Write);
    my_file.open();

    WT_File redline_hdr_block;
    redline_hdr_block.set_filename("redline_hdr_block_file.dwf"); 

    GUID _guid;

    CoCreateGuid(&_guid);
    WD_GUID redline_hdr_guid;
    memcpy(&redline_hdr_guid,&_guid,sizeof(redline_hdr_guid));

    CoCreateGuid(&_guid);
    WD_GUID redline_guid;
    memcpy(&redline_guid,&_guid,sizeof(redline_guid));

    FILETIME ft;
    GetSystemTimeAsFileTime(&ft);

    WT_FileTime current_time;
    current_time.set_low_date_time(ft.dwLowDateTime);
    current_time.set_high_date_time(ft.dwHighDateTime);

    //do the redline_hdr first
    WT_BlockRef redline_hdr;
    redline_hdr.set_format(WT_BlockRef::Redline_Hdr);
    redline_hdr.set_block_guid(redline_hdr_guid);
    redline_hdr.set_parent_block_guid(redline_guid);
    redline_hdr.set_creation_time(current_time);
    redline_hdr.set_modification_time(current_time);
    redline_hdr.set_encryption(WT_Encryption());
    redline_hdr.set_validity(WD_True);
    redline_hdr.set_visibility(WD_True);
    redline_hdr.set_scan_flag(WD_False);
    redline_hdr.set_mirror_flag(WD_False);
    redline_hdr.set_inversion_flag(WD_False);
    redline_hdr.set_orientation(WT_Orientation());
    redline_hdr.set_rotation(0);
    redline_hdr.set_alignment(WT_Alignment());
    double inked_area[2] = {rect.right-rect.left,rect.bottom-rect.top};
    redline_hdr.set_inked_area(inked_area);
    redline_hdr.set_dpi_resolution((WT_Integer16)(1/paper_scale));

    WT_Logical_Point clip_rectangle[2] = 
    {
           WT_Logical_Point(rect.left,rect.top),
           WT_Logical_Point(rect.right,rect.bottom)
    };
    redline_hdr.set_clip_rectangle(clip_rectangle);
    redline_hdr.set_password("");

    redline_hdr.set_paper_scale(paper_scale);
    redline_hdr.set_paper_offset(&paper_offset);
    my_file.desired_rendition().blockref() = redline_hdr;
    my_file.write_block(redline_hdr_block);

    //serialize a visibility opcode. redline_hdr gets written this way
    WT_Visibility V(WD_True);
    V.serialize(my_file);
    WT_File redline_block;
    redline_block.heuristics().set_target_version(55);
    redline_block.set_filename("redline_block_file.dwf");

    //prepare and serialize the actual redline block
    WT_BlockRef redline;
    redline.set_format(WT_BlockRef::Redline);
    redline.set_block_guid(redline_guid);
    redline.set_creation_time(current_time);
    redline.set_modification_time(current_time);
    redline.set_validity(WD_True);
    my_file.desired_rendition().blockref() = redline;

    //Avoid making the viewport opcode as the first opcode to be serialized as
    //part of the new redline header compressed block. Since the viewport opcode
    //is always serialized ASCII, this would cause confusion for the WHIP! Toolkit
    //to start the compressor.

    WT_Visibility V1(WD_True);
    V1.serialize(my_file);

    //Create a viewport, so that pre-existing viewports don't clip our markups
    //out of existence.

    WT_Logical_Point points[4] = 
    {
           WT_Logical_Point(rect.left,rect.top),
           WT_Logical_Point(rect.right,rect.top),
           WT_Logical_Point(rect.right,rect.bottom),
           WT_Logical_Point(rect.left,rect.bottom)
    };
    WT_Viewport vp(my_file,"",4,points,WD_True);
    my_file.desired_rendition().viewport() = vp;
    my_file.write_block(redline_block);
    my_file.close();
}

Generated on Tue May 17 12:38:50 2005 for Autodesk DWF Toolkit by  doxygen 1.4.1