Hi,

...
> 
> While not promising any fixes, I would be intrigued to see what you've got
> if you want to share it. If you could tar your net, cfg, C program, and
> test data, I bet it would be a pretty small file, so you could attach it to
> email. ...

I can't post the data files, because these are customer data (or at least
derived from customer data), but it was easy to extend the C program so
that data are computed on the fly (I used a simple bell-shaped function
which is scanned row-wise back and forth, which resembles my original data).
I enclose this program as attachment together with the net- and cfg-file.
The program has simply been derived fom the sealevel.c - example in 
samples/dxlink; I have compiled it in complete analogy to sealevel.c.

I have made a (perhaps naive) attempt to convince the image module to retain
camera settings from one iteration to the next by employing a SetGlobal/
GetGlobal-pair between the camera output of image and the default camera
input of image, but this seems to be not so easy. When I change the view
interactively (by rotating the image, for example), the image begins to
alternate between views on each iteration. But at least it maintains the
same view when I do not alter any camera settings. The "image flashing" I 
mentioned before was due to the view changing with each iteration. 

There seems to be no easy way to specify that the image module should
retain camera settings between executions or should refrain from resetting
the view with each iteration.

If I execute this program on Sparc Ultra-10, I get about one execution
per second (software rendering). This is way too slow for a reasonable
"online-display" (and in this example, only positions are displayed).
I can not use hardware rendering at the moment; I get a core from dxexec
if I enable it. But this may be a problem of OpenGL 1.2/Creator2D.


> I can run it on an SGI and see if I get the same behavior with the Image
> flashing. I didn't realize -script mode disallowed DXLink. Anyone else have
> any insight on that issue?
> 

The description of DXLStartDX in Chapter 17.5 of the Programmers's
Reference states: "Note that the -script option should not be used, as it
causes the executive to start up in script mode, which requires commands
typed directly at a promt, bypassing the message system." This seems to 
apply also when a script file is specified. I have not found a way to
get rid of the dxui-process (which consumes about half of the performance
when my example program executes). I am also not even sure that I want
to get rid of the dxui-process, because I want the interactive view
manipulation facilities of the image window, and I have got the impression
that this may be tied to the "user interface".

...
> camera on reset. There is also a Reset toggle in there that you may want to
> set to off.

This does not prevent the image module from resetting on each iteration;
this is apparently only a altenative way to reset the image module.


Anyway, I will try to continue with this after the christmas holidays.

Many thanks for the assistance so far, and the best wishes for christmas
and the upcoming new year from Germany!


D.Ruppert
RTS GmbH
Schwieberdingen/Germany
[EMAIL PROTECTED]

//
// time: Wed Dec 22 12:53:19 1999
//
// version: 3.1.2 (format), 4.0.7 (DX)
//
//
// MODULE main
// workspace: width = 497, height = 575
// layout: snap = 0, width = 50, height = 50, align = NN
//
macro main(
) -> (
) {
    // 
    // node DXLInput[1]: x = 171, y = 13, inputs = 1, label = testinput
    // input[1]: defaulting = 0, visible = 1, type = 29, value = [   -1.916   
-2.000    0.000 ]
    //
    main_DXLInput_1_out_1 = testinput;
    // 
    // node GetGlobal[1]: x = 422, y = 109, inputs = 3, label = GetGlobal
    //
main_GetGlobal_1_out_1,
main_GetGlobal_1_out_2 = 
    GetGlobal(
    main_GetGlobal_1_in_1,
    main_GetGlobal_1_in_2,
    main_GetGlobal_1_in_3
    ) [instance: 1, cache: 1];
    // 
    // node List[1]: x = 190, y = 184, inputs = 2, label = List
    //
main_List_1_out_1 = 
    List(
    main_DXLInput_1_out_1,
    main_GetGlobal_1_out_1
    ) [instance: 1, cache: 1];
    // 
    // node Construct[1]: x = 245, y = 288, inputs = 4, label = Construct
    //
main_Construct_1_out_1[cache: 0] = 
    Construct(
    main_List_1_out_1,
    main_Construct_1_in_2,
    main_Construct_1_in_3,
    main_Construct_1_in_4
    ) [instance: 1, cache: 1];
    // 
    // node GetGlobal[2]: x = 388, y = 404, inputs = 3, label = GetGlobal
    //
main_GetGlobal_2_out_1,
main_GetGlobal_2_out_2 = 
    GetGlobal(
    main_GetGlobal_2_in_1,
    main_GetGlobal_2_in_2,
    main_GetGlobal_2_in_3
    ) [instance: 2, cache: 1];
    // 
    // node ShowPositions[1]: x = 222, y = 393, inputs = 2, label = 
ShowPositions
    //
main_ShowPositions_1_out_1[cache: 0] = 
    ShowPositions(
    main_Construct_1_out_1,
    main_ShowPositions_1_in_2
    ) [instance: 1, cache: 1];
    // 
    // node Image[1]: x = 245, y = 511, inputs = 49, label = Image
    // input[1]: defaulting = 0, visible = 0, type = 67108863, value = "Image_1"
    // input[4]: defaulting = 0, visible = 0, type = 1, value = 1
    // input[5]: defaulting = 0, visible = 0, type = 8, value = [-2 -2 0]
    // input[6]: defaulting = 0, visible = 0, type = 8, value = [-2 -2 1.86602]
    // input[7]: defaulting = 0, visible = 0, type = 5, value = 1.0
    // input[8]: defaulting = 0, visible = 0, type = 1, value = 640
    // input[9]: defaulting = 0, visible = 0, type = 5, value = 0.751
    // input[10]: defaulting = 0, visible = 0, type = 8, value = [0 1 0]
    // input[11]: defaulting = 1, visible = 0, type = 5, value = 30.0001
    // input[12]: defaulting = 0, visible = 0, type = 1, value = 0
    // input[14]: defaulting = 0, visible = 0, type = 1, value = 1
    // input[15]: defaulting = 1, visible = 0, type = 32, value = "none"
    // input[16]: defaulting = 1, visible = 0, type = 32, value = "none"
    // input[17]: defaulting = 1, visible = 0, type = 1, value = 1
    // input[18]: defaulting = 1, visible = 0, type = 1, value = 1
    // input[19]: defaulting = 0, visible = 0, type = 1, value = 0
    // input[20]: visible = 1
    // input[21]: defaulting = 0, visible = 0, type = 3, value = 0
    // input[29]: defaulting = 1, visible = 0, type = 3, value = 0
    // input[32]: defaulting = 1, visible = 0, type = 16777224, value = {[0 0 
0] [30000 30000 30000]}
    // input[41]: defaulting = 1, visible = 0, type = 32, value = "camera"
    // depth: value = 24
    // window: position = (0.0609,0.2041), size = 0.5109x0.5127
    // internal caching: 1
    //
main_Image_1_out_1[cache: 0],
main_Image_1_out_2[cache: 0],
main_Image_1_out_3[cache: 0] = 
    Image(
    main_Image_1_in_1,
    main_ShowPositions_1_out_1,
    main_Image_1_in_3,
    main_Image_1_in_4,
    main_Image_1_in_5,
    main_Image_1_in_6,
    main_Image_1_in_7,
    main_Image_1_in_8,
    main_Image_1_in_9,
    main_Image_1_in_10,
    main_Image_1_in_11,
    main_Image_1_in_12,
    main_Image_1_in_13,
    main_Image_1_in_14,
    main_Image_1_in_15,
    main_Image_1_in_16,
    main_Image_1_in_17,
    main_Image_1_in_18,
    main_Image_1_in_19,
    main_GetGlobal_2_out_1,
    main_Image_1_in_21,
    main_Image_1_in_22,
    main_Image_1_in_23,
    main_Image_1_in_24,
    main_Image_1_in_25,
    main_Image_1_in_26,
    main_Image_1_in_27,
    main_Image_1_in_28,
    main_Image_1_in_29,
    main_Image_1_in_30,
    main_Image_1_in_31,
    main_Image_1_in_32,
    main_Image_1_in_33,
    main_Image_1_in_34,
    main_Image_1_in_35,
    main_Image_1_in_36,
    main_Image_1_in_37,
    main_Image_1_in_38,
    main_Image_1_in_39,
    main_Image_1_in_40,
    main_Image_1_in_41,
    main_Image_1_in_42,
    main_Image_1_in_43,
    main_Image_1_in_44,
    main_Image_1_in_45,
    main_Image_1_in_46,
    main_Image_1_in_47,
    main_Image_1_in_48,
    main_Image_1_in_49
    ) [instance: 1, cache: 1];
    // 
    // node SetGlobal[1]: x = 421, y = 190, inputs = 3, label = SetGlobal
    //
    SetGlobal(
    main_List_1_out_1,
    main_GetGlobal_1_out_2,
    main_SetGlobal_1_in_3
    ) [instance: 1, cache: 1];
    // 
    // node SetGlobal[2]: x = 401, y = 513, inputs = 3, label = SetGlobal
    //
    SetGlobal(
    main_Image_1_out_2,
    main_GetGlobal_2_out_2,
    main_SetGlobal_2_in_3
    ) [instance: 2, cache: 1];
// network: end of macro body
CacheScene(main_Image_1_in_1, main_Image_1_out_1, main_Image_1_out_2);
}
testinput = [   -1.916   -2.000    0.000 ];
main_GetGlobal_1_in_1 = NULL;
main_GetGlobal_1_in_2 = NULL;
main_GetGlobal_1_in_3 = NULL;
main_GetGlobal_1_out_1 = NULL;
main_GetGlobal_1_out_2 = NULL;
main_List_1_out_1 = NULL;
main_Construct_1_in_2 = NULL;
main_Construct_1_in_3 = NULL;
main_Construct_1_in_4 = NULL;
main_Construct_1_out_1 = NULL;
main_GetGlobal_2_in_1 = NULL;
main_GetGlobal_2_in_2 = NULL;
main_GetGlobal_2_in_3 = NULL;
main_GetGlobal_2_out_1 = NULL;
main_GetGlobal_2_out_2 = NULL;
main_ShowPositions_1_in_2 = NULL;
main_ShowPositions_1_out_1 = NULL;
macro Image(
        id,
        object,
        where,
        useVector,
        to,
        from,
        width,
        resolution,
        aspect,
        up,
        viewAngle,
        perspective,
        options,
        buttonState = 1,
        buttonUpApprox = "none",
        buttonDownApprox = "none",
        buttonUpDensity = 1,
        buttonDownDensity = 1,
        renderMode = 0,
        defaultCamera,
        reset,
        backgroundColor,
        throttle,
        RECenable = 0,
        RECfile,
        RECformat,
        RECresolution,
        RECaspect,
        AAenable = 0,
        AAlabels,
        AAticks,
        AAcorners,
        AAframe,
        AAadjust,
        AAcursor,
        AAgrid,
        AAcolors,
        AAannotation,
        AAlabelscale,
        AAfont,
        interactionMode,
        title,
        AAxTickLocs,
        AAyTickLocs,
        AAzTickLocs,
        AAxTickLabels,
        AAyTickLabels,
        AAzTickLabels,
        webOptions) -> (
        object,
        camera,
        where)
{
    ImageMessage(
        id,
        backgroundColor,
        throttle,
        RECenable,
        RECfile,
        RECformat,
        RECresolution,
        RECaspect,
        AAenable,
        AAlabels,
        AAticks,
        AAcorners,
        AAframe,
        AAadjust,
        AAcursor,
        AAgrid,
        AAcolors,
        AAannotation,
        AAlabelscale,
        AAfont,
        AAxTickLocs,
        AAyTickLocs,
        AAzTickLocs,
        AAxTickLabels,
        AAyTickLabels,
        AAzTickLabels,
        interactionMode,
        title,
        renderMode,
        buttonUpApprox,
        buttonDownApprox,
        buttonUpDensity,
        buttonDownDensity) [instance: 1, cache: 1];
    autoCamera =
        AutoCamera(
            object,
            "front",
            object,
            resolution,
            aspect,
            [0,1,0],
            perspective,
            viewAngle,
            backgroundColor) [instance: 1, cache: 1];
    realCamera =
        Camera(
            to,
            from,
            width,
            resolution,
            aspect,
            up,
            perspective,
            viewAngle,
            backgroundColor) [instance: 1, cache: 1];
    coloredDefaultCamera = 
         UpdateCamera(defaultCamera,
            background=backgroundColor) [instance: 1, cache: 1];
    nullDefaultCamera =
        Inquire(defaultCamera,
            "is null + 1") [instance: 1, cache: 1];
    resetCamera =
        Switch(
            nullDefaultCamera,
            coloredDefaultCamera,
            autoCamera) [instance: 1, cache: 1];
    resetNull = 
        Inquire(
            reset,
            "is null + 1") [instance: 2, cache: 1];
    reset =
        Switch(
            resetNull,
            reset,
            0) [instance: 2, cache: 1];
    whichCamera =
        Compute(
            "($0 != 0 || $1 == 0) ? 1 : 2",
            reset,
            useVector) [instance: 1, cache: 1];
    camera = Switch(
            whichCamera,
            resetCamera,
            realCamera) [instance: 3, cache: 1];
    AAobject =
        AutoAxes(
            object,
            camera,
            AAlabels,
            AAticks,
            AAcorners,
            AAframe,
            AAadjust,
            AAcursor,
            AAgrid,
            AAcolors,
            AAannotation,
            AAlabelscale,
            AAfont,
            AAxTickLocs,
            AAyTickLocs,
            AAzTickLocs,
            AAxTickLabels,
            AAyTickLabels,
            AAzTickLabels) [instance: 1, cache: 1];
    switchAAenable = Compute("$0+1",
             AAenable) [instance: 2, cache: 1];
    object = Switch(
             switchAAenable,
             object,
             AAobject) [instance:4, cache: 1];
    SWapproximation_options =
        Switch(
            buttonState,
            buttonUpApprox,
            buttonDownApprox) [instance: 5, cache: 1];
    SWdensity_options =
        Switch(
            buttonState,
            buttonUpDensity,
            buttonDownDensity) [instance: 6, cache: 1];
    HWapproximation_options =
        Format(
            "%s,%s",
            buttonDownApprox,
            buttonUpApprox) [instance: 1, cache: 1];
    HWdensity_options =
        Format(
            "%d,%d",
            buttonDownDensity,
            buttonUpDensity) [instance: 2, cache: 1];
    switchRenderMode = Compute(
             "$0+1",
             renderMode) [instance: 3, cache: 1];
    approximation_options = Switch(
             switchRenderMode,
            SWapproximation_options,
             HWapproximation_options) [instance: 7, cache: 1];
    density_options = Switch(
             switchRenderMode,
            SWdensity_options,
            HWdensity_options) [instance: 8, cache: 1];
    renderModeString = Switch(
            switchRenderMode,
            "software",
            "hardware")[instance: 9, cache: 1];
    object_tag = Inquire(
            object,
            "object tag")[instance: 3, cache: 1];
    annoted_object =
        Options(
            object,
            "send boxes",
            0,
            "cache",
            1,
            "object tag",
            object_tag,
            "ddcamera",
            whichCamera,
            "rendering approximation",
            approximation_options,
            "render every",
            density_options,
            "button state",
            buttonState,
            "rendering mode",
            renderModeString) [instance: 1, cache: 1];
    RECresNull =
        Inquire(
            RECresolution,
            "is null + 1") [instance: 4, cache: 1];
    ImageResolution =
        Inquire(
            camera,
            "camera resolution") [instance: 5, cache: 1];
    RECresolution =
        Switch(
            RECresNull,
            RECresolution,
            ImageResolution) [instance: 10, cache: 1];
    RECaspectNull =
        Inquire(
            RECaspect,
            "is null + 1") [instance: 6, cache: 1];
    ImageAspect =
        Inquire(
            camera,
            "camera aspect") [instance: 7, cache: 1];
    RECaspect =
        Switch(
            RECaspectNull,
            RECaspect,
            ImageAspect) [instance: 11, cache: 1];
    switchRECenable = Compute(
          "$0 == 0 ? 1 : (($2 == $3) && ($4 == $5)) ? ($1 == 1 ? 2 : 3) : 4",
            RECenable,
            switchRenderMode,
            RECresolution,
            ImageResolution,
            RECaspect,
             ImageAspect) [instance: 4, cache: 1];
    NoRECobject, RECNoRerenderObject, RECNoRerHW, RECRerenderObject = 
Route(switchRECenable, annoted_object);
    Display(
        NoRECobject,
        camera,
        where,
        throttle) [instance: 1, cache: 1];
    image =
        Render(
            RECNoRerenderObject,
            camera) [instance: 1, cache: 1];
    Display(
        image,
        NULL,
        where,
        throttle) [instance: 2, cache: 1];
    WriteImage(
        image,
        RECfile,
        RECformat) [instance: 1, cache: 1];
    rec_where = Display(
        RECNoRerHW,
        camera,
        where,
        throttle) [instance: 1, cache: 0];
    rec_image = ReadImageWindow(
        rec_where) [instance: 1, cache: 1];
    WriteImage(
        rec_image,
        RECfile,
        RECformat) [instance: 1, cache: 1];
    RECupdateCamera =
        UpdateCamera(
            camera,
            resolution=RECresolution,
            aspect=RECaspect) [instance: 2, cache: 1];
    Display(
        RECRerenderObject,
        camera,
        where,
        throttle) [instance: 1, cache: 1];
    RECRerenderObject =
        ScaleScreen(
            RECRerenderObject,
            NULL,
            RECresolution,
            camera) [instance: 1, cache: 1];
    image =
        Render(
            RECRerenderObject,
            RECupdateCamera) [instance: 2, cache: 1];
    WriteImage(
        image,
        RECfile,
        RECformat) [instance: 2, cache: 1];
}
main_Image_1_in_1 = "Image_1";
main_Image_1_in_3 = "X24,,";
main_Image_1_in_4 = 1;
main_Image_1_in_5 = [-2 -2 0];
main_Image_1_in_6 = [-2 -2 1.86602];
main_Image_1_in_7 = 1.0;
main_Image_1_in_8 = 640;
main_Image_1_in_9 = 0.751;
main_Image_1_in_10 = [0 1 0];
main_Image_1_in_11 = NULL;
main_Image_1_in_12 = 0;
main_Image_1_in_13 = NULL;
main_Image_1_in_14 = 1;
main_Image_1_in_15 = NULL;
main_Image_1_in_16 = NULL;
main_Image_1_in_17 = NULL;
main_Image_1_in_18 = NULL;
main_Image_1_in_19 = 0;
main_Image_1_in_21 = 0;
main_Image_1_in_22 = NULL;
main_Image_1_in_23 = NULL;
main_Image_1_in_25 = NULL;
main_Image_1_in_26 = NULL;
main_Image_1_in_27 = NULL;
main_Image_1_in_28 = NULL;
main_Image_1_in_29 = NULL;
main_Image_1_in_30 = NULL;
main_Image_1_in_31 = NULL;
main_Image_1_in_32 = NULL;
main_Image_1_in_33 = NULL;
main_Image_1_in_34 = NULL;
main_Image_1_in_35 = NULL;
main_Image_1_in_36 = NULL;
main_Image_1_in_37 = NULL;
main_Image_1_in_38 = NULL;
main_Image_1_in_39 = NULL;
main_Image_1_in_40 = NULL;
main_Image_1_in_41 = NULL;
main_Image_1_in_42 = NULL;
main_Image_1_in_43 = NULL;
main_Image_1_in_44 = NULL;
main_Image_1_in_45 = NULL;
main_Image_1_in_46 = NULL;
main_Image_1_in_47 = NULL;
main_Image_1_in_48 = NULL;
main_Image_1_in_49 = NULL;
main_Image_1_out_2 = NULL;
main_SetGlobal_1_in_3 = NULL;
main_SetGlobal_2_in_3 = NULL;
Executive("product version 4 0 7");
$sync
// This network contains DXLink tools.  Therefore, the following line(s)
// that would cause an execution when run in script mode have been 
// commented out.  This will facilitate the use of the DXLink routines
// exDXLLoadScript() and DXLLoadVisualProgram() when the DXLink
// application is connected to an executive.
// main();
#include <stdio.h>
#include <math.h>



#include "dxl.h"

int getPos(double* xP,double* yP,double* zP);


/* kopiert aus sealevel.c ! */

/* 
 * define an error handler
 */
void ErrorHandler(DXLConnection *conn, const char *msg, void *data)
{
    printf("DXL Error: %s\n", msg);
}
  

  
main(int argc, char *argv[])
{
    DXLConnection *conn = NULL;
    char result[100];
    int retVal;
    char compoundStr[100];


    
    
    /* 
     * Start Data Explorer in -image mode with certain menus disabled.
     */
    conn = DXLStartDX("dx -image -noExitOptions -noConnectionMenus",NULL); 

    if (conn == NULL)
    {
	fprintf(stderr,"Could not connect\n");
	perror("DXLStartDX");
	exit(1);
    }


    /* 
     * Set the error handler 
     */
    DXLSetErrorHandler(conn, ErrorHandler, NULL);


    /* 
     * Load the visual program to run
     */
    DXLLoadVisualProgram(conn, BASE"/samples/dxlink/flaeche.net");


    while (1)
    {
	double x,y,z;
	retVal = getPos(&x,&y,&z);
	if ( ! retVal )
	{
	    break;
	}
	sprintf(compoundStr,"[ %8.3f %8.3f %8.3f ]",x,y,z);
	DXLSetValue(conn, "testinput", compoundStr);
	DXLExecuteOnce(conn);
	
	
    };



    printf("When you are finished, hit return to quit:");
    gets(result);
    DXLExitDX(conn);
}


double x_start = -2.0;
double y_start = -2.0;
double delta_xpos = 0.004;
double delta_ypos = 0.004;

int max_xstep = 100;
int max_ystep = 100;

int act_xstep = 0;
int act_ystep = 0;

int dir = 1; /* direction */

int getPos(double *xP,double *yP,double *zP)
{
    if (act_ystep > max_ystep)
    {
	return 0;  /* end reached */
    }
    printf("XSTEP: %d YSTEP: %d\n",act_xstep,act_ystep);

    
		    /* compute act. position */
    *xP = x_start + act_xstep * delta_xpos;
    *yP = y_start + act_ystep * delta_ypos;
    *zP = exp(-((*xP)*(*xP) + (*yP)*(*yP)));

		    /* increment x and y */
    act_xstep += dir;
    if (act_xstep > max_xstep)
    {
	act_ystep += 1;
	act_xstep = max_xstep;
	dir = -1;
    }
    else if (act_xstep < 0)
    {
	act_ystep += 1;
	act_xstep = 0;
	dir = 1;
    }
    return 1;
}
	
	
	
//
// time: Wed Dec 22 12:53:19 1999
//
// version: 3.1.2 (format), 4.0.7 (DX)
//
//
// node Image[1]:
// depth: value = 24
// window: position = (0.0609,0.2041), size = 0.5109x0.5127
// input[1]: defaulting = 0, value = "Image_1"
// input[4]: defaulting = 0, value = 1
// input[5]: defaulting = 0, value = [-2 -2 0]
// input[6]: defaulting = 0, value = [-2 -2 1.86602]
// input[7]: defaulting = 0, value = 1.0
// input[8]: defaulting = 0, value = 640
// input[9]: defaulting = 0, value = 0.751
// input[10]: defaulting = 0, value = [0 1 0]
// input[11]: defaulting = 1, value = 30.0001
// input[12]: defaulting = 0, value = 0
// input[14]: defaulting = 0, value = 1
// input[15]: defaulting = 1, value = "none"
// input[16]: defaulting = 1, value = "none"
// input[17]: defaulting = 1, value = 1
// input[18]: defaulting = 1, value = 1
// input[19]: defaulting = 0, value = 0
// input[21]: defaulting = 0, value = 0
// input[29]: defaulting = 1, value = 0
// input[32]: defaulting = 1, value = {[0 0 0] [30000 30000 30000]}
// input[41]: defaulting = 1, value = "camera"
// internal caching: 1

Reply via email to