Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

The DWG Viewer reads all drawings from the Support folder of the IPA. This may result in a slower opening and rendering time. It is recommended to load drawings from a local or external folder of the device. The drawing is loaded with the OPEN command using the -(void)runCommand:(NSString*)command method of the singleton [CFxARESInstance instance]. Once the drawing is loaded the CFxAresDelegate triggers -(void)documentCreated and the CFxARESDocumentView can become visible. This is the time when additional user interfaces can show up or drawing content can be accessed. In general, the CFxAresDelegate informs the host application about all important drawing events.

...

The active drawing is closed with the CLOSE command. When the document is closed the CFxARESDelegate triggers -(void)documentDestroyed , the drawing is removed from the memory and the CFxARESDocumentView  can become hidden. The host application can set up the user interface for a new drawing like switching between state view controllers.

...

It is not necessary to implement viewing gestures. The framework comes with a set of basic finger gestures to change the active view of the drawing. It supports zooming in and out but has to know if it runs in Pan or Orbit mode. The viewing mode can be switched with a Diesel expression that can be executed with the -(void)runCommand:(NSString*)command method of the singleton [CFxARESInstance instance].

...

Code Block
languageobjective-c
-(void)SwitchViewModeToPan:(BOOL)panMode
{
    if (m_bPanMode != panMode)
    {
        m_bPanMode = panMode;
        ...
        [[CFxARESInstance instance] runCommand:@"'2dmode $M=$(if,$(and,$(getvar,2dmode),1),$(-,$(getvar,2dmode),1),$(+,$(getvar,2dmode),1))"];
    }
}


NoteHint:  The kernel SDK also provides commands like ZOOM or PAN to achieve similar results. You can achieve similar results with commands like ZOOM or PAN.

DWG Viewer - Change layout background color

Status
titleOBJ-C
Status
colourYellow
titleC++

The DWG Viewer uses a native method -(void)SetBackgroundColor:(Colors) color to change the background color of the active model or sheet.  The offered color indexes are linked to a button. The native method is called when the button is tapped.  The native method -(void)SetBackgroundColor:(Colors) color manipulates the C++ part of the application.

File: CFxNativeConnection.mm

Code Block
-(void)SetBackgroundColor:(Colors)color
{
    ODCOLORREF background = 0;
    switch ( color )
    {
        case BLACK:
            background = 0;
            break;
        case WHITE:
            background = ODRGB( 255, 255, 255 );
            break;
        case MAGENTA:
            background = ODRGB( 255, 0, 255 );
            break;
    }

    OdEditorImplPtr pEditor = odedEditor();
    pEditor->fire_modelessOperationWillStart( L"BACKGROUND_COLOR" );
    ACTIVE_DOCUMENT()->GetFxDisplayDevice()->SetBackground( background );
    CFxDisplayDevicePtr pDevice = ACTIVE_DOCUMENT()->GetFxDisplayDevice();
    for ( int i = 0; i < pDevice->numViews(); i++ )
    {
        OdGsView *pView = pDevice->viewAt(i );
        if ( pView->isVisible() )
            pView->invalidate();
    }
    pEditor->fire_modelessOperationEnded( L"BACKGROUND_COLOR" );
}

 

File: ViewController.m

Code Block
- (IBAction)onBlackBackgroundPressed:(id)sender
{
    [[CFxNativeConnection GetNativeConnection] SetBackgroundColor:BLACK];
}

- (IBAction)onWhiteBackgroundPressed:(id)sender
{
    [[CFxNativeConnection GetNativeConnection] SetBackgroundColor:WHITE];
}

- (IBAction)onMagentaBackgroundPressed:(id)sender
{
    [[CFxNativeConnection GetNativeConnection] SetBackgroundColor:MAGENTA];
}

 

DWG Viewer - Switch between model and sheets

Status
titleOBJ-C
Status
colourYellow
titleC++

The DWG Viewer uses a native method -(void)AddSheetButtonsTo:(UIStackView*)sheets to get all available sheets of the drawing. All available sheets are stored as a UIButton inside a UIStackView. The button is linked with a command expression that is executed when tapped. The command _SHEET_CONTROL handles the layout switch.

 

File: ViewController.m

Code Block
languageobjective-c
-(void)viewDidAppear:(BOOL)animated
{
    ...
    [[CFxNativeConnection GetNativeConnection] AddSheetButtonsTo:m_StackSheets.firstObject];
}


File: CFxNativeConnection.mm

Code Block
languageobjective-c
-(void)AddSheetButtonsTo:(UIStackView*)sheets
{
    [CFxARESInstance runOnWorkingThread:^
    {
        std::map<int, CFxString> layouts;

        CFxDatabasePtr pDB = ACTIVE_DOCUMENT()->GetFxDatabase();
        if ( pDB.isNull() )
            return;

        OdDbDictionaryPtr layoutDictionary = pDB->getLayoutDictionaryId().openObject();
        OdDbDictionaryIteratorPtr iterator = layoutDictionary->newIterator();
        while( !iterator->done() )
        {
            OdDbLayoutPtr pLayout = iterator->object();
            layouts[ pLayout->getTabOrder() ] = pLayout->getLayoutName();
            iterator->next();
        }

        [CFxARESInstance runOnUiThread:^
        {
            [sheets setSpacing:10];
            for (auto layout : layouts)
            {
                UIButton* button = [UIButton buttonWithType:UIButtonTypeSystem];

                NSString* sheet = [NSString stringWithFormat:@"%@", [CFxNativeConnection nsStringFromWchar:layout.second.wide_str()]];
                [button setTitle:sheet forState:UIControlStateNormal];

                [button setContentEdgeInsets:UIEdgeInsetsMake(0, 12, 0, 12)];

                [button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
                CGFloat grayLevel = 2.0/3.0;
                [button setBackgroundColor:[UIColor colorWithRed:grayLevel green:grayLevel blue:grayLevel alpha:1]];

                [button addTarget:self action:@selector(OnSheetButtonPressed:) forControlEvents:UIControlEventTouchUpInside];

                [sheets addArrangedSubview:button];
            }
            UIView* filler = [[UIView alloc] init];
            [sheets addArrangedSubview:filler];
        }];
    }];
}

 

File: CFxNativeConnection.mm

Code Block
languageobjective-c
-(IBAction)OnSheetButtonPressed:(UIButton*)button
{
    NSString* cmd = [NSString stringWithFormat:@"_SHEET_CONTROL\n_ACTIVATE\n%@\n", [button currentTitle]];
    [[CFxARESInstance instance] runCommand:cmd];
}