home *** CD-ROM | disk | FTP | other *** search
/ Chip: Shareware for Win 95 / Chip-Shareware-Win95.bin / grafika / cad / _setup.1 / AUTOEX1.CPP < prev    next >
Text File  |  1996-11-18  |  18KB  |  530 lines

  1. //----------------------------------------------------------------------------
  2. // Example OLE Automation Controller for GammaCAD PRO
  3. //
  4. // Gamma Software
  5. // August 1996
  6. //
  7. //
  8. // This example uses the Borland C++ Object Components library version 5.
  9. // The implementation for other compilers will be different.  See your
  10. // compilers documentation on creating OLE automation controllers.  The
  11. // GCADP.HXX file lists the automated classes and functions in GammaCAD.
  12. //
  13. //----------------------------------------------------------------------------
  14. #include <stdio.h>
  15. #include <string.h>
  16. #include "gcadp.cxx"
  17. #include "snap.h"
  18. #include "ptype.h"
  19. #include "numfmt.h"
  20. #include "elemtype.h"
  21.  
  22. // loop thru current element selection in GammaCAD
  23. void GetCurrSelection(GcadOleView& cmd)
  24. {
  25.   long id = cmd.CurrSelGetFirst();     // get first element in selection
  26.   while(id)
  27.   {
  28.     id = cmd.CurrSelGetNext();         // get next element
  29.   }
  30. }
  31.  
  32. // prompt user to select a drawing element in GammaCAD
  33. bool GetElement(const char *prompt,GcadOleView& cmd,unsigned long *elemId)
  34. {
  35.   cmd.SelectOne();                     // put GammaCAD in select one mode
  36.   if(prompt)                           // set the prompt line
  37.     cmd.SetPrompt(prompt);
  38.   MSG msg;
  39.   while(!cmd.IsPgmSelDone())           // loop until user makes selection
  40.   {
  41.     if (::PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
  42.     {
  43.       ::TranslateMessage(&msg);
  44.       ::DispatchMessage(&msg);
  45.     }
  46.   }
  47.   *elemId = cmd.IsPgmSelDone();        // get id of selected element
  48.   if(*elemId <= 0)
  49.     exit(0);                           // user has selected another command
  50.   return true;
  51. }
  52.  
  53. // prompt user to select a point in GammaCAD
  54. bool GetPoint(const char *prompt,GcadOleView& cmd,double *x,double *y)
  55. {
  56.   cmd.GetPoint();                      // put GammaCAD in point input mode
  57.   if(prompt)                           // set the prompt line
  58.     cmd.SetPrompt(prompt);
  59.   MSG msg;
  60.  
  61.   while(!cmd.IsPointSelDone(x,y))      // loop until a point is input
  62.   {
  63.     if (::PeekMessage(&msg, 0, 0, 0, PM_REMOVE))
  64.     {
  65.       ::TranslateMessage(&msg);
  66.       ::DispatchMessage(&msg);
  67.     }
  68.   }
  69.                                        // get point entered
  70.   int status = cmd.IsPointSelDone(x,y);
  71.   if(status <= 0)
  72.     exit(0);                           // user has selected another command
  73.  
  74.   return true;
  75. }
  76.  
  77. // select all elements in drawing
  78. bool SelectAll(GcadOleView& cmd)
  79. {
  80.   unsigned long elemId = cmd.DwgGetFirst();
  81.   while(elemId)
  82.   {
  83.     cmd.AddToSel(elemId);
  84.     elemId = cmd.DwgGetNext();
  85.   }
  86. }
  87.  
  88. int PASCAL
  89. WinMain(HINSTANCE /*hInst*/, HINSTANCE/*prev*/, char far* /*cmdLine*/, int/*show*/)
  90. {
  91.   char buf[256];               // text buffer
  92.   unsigned long elemId;        // drawing element id
  93.  
  94.   try {
  95.     TOleAllocator oleMem(0);   // required to initialize OLE memory allocation
  96.  
  97.     bool bound = false;        // Bind to currently running server
  98.     TGcadApp gcad;
  99.     char *pszServerProgID = "GammaCAD.Application.3";
  100.     CLSID clsid;
  101.     HRESULT hr = CLSIDFromProgID(OleStr(pszServerProgID),&clsid);
  102.     if(hr==S_OK)
  103.     {
  104.       LPUNKNOWN lpUnk = 0;
  105.       if(GetActiveObject(clsid,0,&lpUnk)==S_OK)
  106.       {
  107.         LPDISPATCH lpDisp = 0;
  108.         if(lpUnk->QueryInterface(IID_IDispatch,(LPVOID FAR*)&lpDisp)==S_OK)
  109.         {
  110.           lpUnk->Release();
  111.           gcad.Bind(lpDisp);
  112.           bound = true;
  113.         }
  114.         else
  115.           lpUnk->Release();
  116.       }
  117.     }
  118.  
  119.     if(!bound)                     // Bind to new server
  120.       gcad.Bind(pszServerProgID);
  121.     gcad.SetVisible(true);
  122.                                    // App file commands
  123.     ::MessageBox(0, gcad.GetName(), "Name", MB_OK);
  124.     ::MessageBox(0, gcad.GetFullName(), "Path", MB_OK);
  125.     gcad.NewDocument();
  126.     gcad.OpenDocument("test.gc1");
  127.     ::MessageBox(0, "Open file", "Open", MB_OK);
  128.     gcad.SaveDocumentAs("actest1.gc1");
  129.     gcad.SaveDocument();
  130.  
  131.     gcad.LoadSymbolLib("trees");
  132.  
  133.     GcadOleView cmd;               // get the view class
  134.     gcad.GetView(cmd);
  135.  
  136.     TAutoString layer = cmd.GetFirstLayer();
  137.     while((const char *)layer)
  138.     {
  139.       ::MessageBox(0,layer,"LAYER",MB_OK);
  140.       layer = cmd.GetNextLayer();
  141.     }
  142.                                    // device window
  143.     long lxmin,lymin,lxmax,lymax;
  144.     cmd.GetDeviceWindow(&lxmin,&lymin,&lxmax,&lymax);
  145.     sprintf(buf,"min(%ld,%ld) max(%ld,%ld)",lxmin,lymin,lxmax,lymax);
  146.     ::MessageBox(0,buf,"Device Window",MB_OK);
  147.                                    // world window
  148.     double wxmin,wymin,wxmax,wymax;
  149.     cmd.GetWorldWindow(&wxmin,&wymin,&wxmax,&wymax);
  150.     sprintf(buf,"min(%lf,%lf) max(%lf,%lf)",wxmin,wymin,wxmax,wymax);
  151.     ::MessageBox(0,buf,"World Window",MB_OK);
  152.  
  153.                                  // View file commands
  154.     cmd.SetPlotScale(2.,1);
  155.     cmd.SetPlotOrigin(2.,3.);
  156.     cmd.DxfIn("test1.dxf");
  157.  
  158.     SelectAll(cmd);              // erase and set view window
  159.     cmd.DelSel();
  160.     cmd.ZoomWin(-0.1,-0.1,8.6,11.1);
  161.  
  162.                                    // draw commands
  163.     cmd.CreateLine(1.,1.,3.,1.);
  164.     cmd.CreateArc(2.,1.,3.,1.,1.,1.);
  165.     cmd.CreateCircle(2.,3.,1.);
  166.     cmd.CreatePoint(2.,7.);
  167.     cmd.CreateText(1.,8.,"Test String");
  168.     cmd.CreateEllipse(2.,5.,2.,5.5,1.,5.);
  169.     cmd.CopyBmp(0.,0.,8.,10.);
  170.     cmd.CreateSymbol(1.,8.,"..\\symbols\\tree1.sym",0.,1.,1.);
  171.     cmd.CreateLeader(5.1,7.1,7.,8.,"Click here");
  172.     cmd.CreateLinearDim(4.,2.,7.,2.,4.,3.,3.,0.,"3.0");
  173.     cmd.StartPline(4.,4.,1);
  174.     cmd.AddPlineVertex(6.,4.);
  175.     cmd.AddPlineVertex(6.,5.);
  176.     cmd.EndPline();
  177.     long elemPline = cmd.GetLastElem();
  178.     cmd.CreateFill(elemPline);
  179.     cmd.CreateRect(4.,8.,5.,7.);
  180.     if(GetElement("Select element to fill",cmd,&elemId))
  181.       cmd.CreateFill(elemId);
  182.     cmd.CreateBmp("..\\symbols\\tree1.bmp",10.,10.,9.,9.,0);
  183.  
  184.                                    // get element parm's
  185.     LineElem   line;
  186.     ArcElem    arc;
  187.     CircleElem circle;
  188.     PointElem  point;
  189.     TextElem   text;
  190.     InsertElem insert;
  191.     PlineElem  pline;
  192.     FillElem   fill;
  193.     BmpElem    bmp;
  194.     double     x1,y1,x2,y2;
  195.     long       color;
  196.     double     size;
  197.     double     sang,eang,rad;
  198.     bool       flag;
  199.  
  200.     elemId = cmd.DwgGetFirst();
  201.     for(int cnt=0;cnt<5;++cnt)
  202.     {
  203.       if(!elemId)
  204.         break;
  205.       ostrstream os(buf,sizeof(buf));
  206.       int type = cmd.GetElemType(elemId);
  207.       switch(type)
  208.       {
  209.         case TYPE_LINE:
  210.           cmd.GetLineElem(line,elemId);
  211.           line.GetFirstPoint(&x1,&y1);
  212.           line.GetSecondPoint(&x2,&y2);
  213.           color = line.GetColor();
  214.           type  = line.GetType();
  215.           size  = line.GetWidth();
  216.           os << x1 << endl << y1 << endl << x2 << endl << y2 << endl << color << endl << type << endl << size << endl << ends;
  217.           ::MessageBox(0,buf,"Line",MB_OK);
  218.           break;
  219.         case TYPE_ARC:
  220.           cmd.GetArcElem(arc,elemId);
  221.           arc.GetCenterPoint(&x1,&y1);
  222.           sang  = arc.GetStartAngle();
  223.           eang  = arc.GetEndAngle();
  224.           rad   = arc.GetRadius();
  225.           color = arc.GetColor();
  226.           type  = arc.GetType();
  227.           size  = arc.GetWidth();
  228.           os << x1 << endl << y1 << endl << sang << endl << eang << endl << rad << endl << color << endl << type << endl << size << endl << ends;
  229.           ::MessageBox(0,buf,"Arc",MB_OK);
  230.           break;
  231.         case TYPE_CIRCLE:
  232.           cmd.GetCircleElem(circle,elemId);
  233.           circle.GetCenterPoint(&x1,&y1);
  234.           rad   = circle.GetRadius();
  235.           color = circle.GetColor();
  236.           type  = circle.GetType();
  237.           size  = circle.GetWidth();
  238.           os << x1 << endl << y1 << endl << rad << endl << color << endl << type << endl << size << endl << ends;
  239.           ::MessageBox(0,buf,"Circle",MB_OK);
  240.           break;
  241.         case TYPE_POINT:
  242.           cmd.GetPointElem(point,elemId);
  243.           point.GetPoint(&x1,&y1);
  244.           color = point.GetColor();
  245.           type  = point.GetType();
  246.           size  = point.GetSize();
  247.           os << x1 << endl << y1 << endl << color << endl << type << endl << size << endl << ends;
  248.           ::MessageBox(0,buf,"Point",MB_OK);
  249.           break;
  250.         case TYPE_TEXT:
  251.           cmd.GetTextElem(text,elemId);
  252.           text.GetAlignPoint(&x1,&y1);
  253.           color = text.GetColor();
  254.           size  = text.GetHeight();
  255.           sang  = text.GetAngle();
  256.           eang  = text.GetOrient();
  257.           rad   = text.GetWidth();
  258.           type  = text.GetJust();
  259.           os << x1 << endl << y1 << endl << color << endl << size << endl << sang << endl << eang << endl << rad << endl << type << endl << text.GetString() << endl << ends;
  260.           ::MessageBox(0,buf,"Text",MB_OK);
  261.           break;
  262.         case TYPE_INSERT:
  263.           cmd.GetInsertElem(insert,elemId);
  264.           insert.GetInsertPoint(&x1,&y1);
  265.           sang  = insert.GetRotation();
  266.           insert.GetScale(&x1,&y1);
  267.           os << insert.GetName() << endl << sang << endl << x1 << endl << y1 << endl << ends;
  268.           ::MessageBox(0,buf,"Insert",MB_OK);
  269.           break;
  270.         case TYPE_PLINE:
  271.           cmd.GetPlineElem(pline,elemId);
  272.           color = pline.GetColor();
  273.           type  = pline.GetType();
  274.           size  = pline.GetWidth();
  275.           flag  = pline.GetClosed();
  276.           os << color << endl << type << endl << size << endl << flag << endl << ends;
  277.           ::MessageBox(0,buf,"Pline",MB_OK);
  278.           pline.GetFirstVertex(&x1,&y1);
  279.           do {
  280.             os.seekp(0,ostream::beg);
  281.             os << x1 << endl << y1 << endl << ends;
  282.             ::MessageBox(0,buf,"Pline",MB_OK);
  283.           } while(pline.GetNextVertex(&x1,&y1));
  284.           break;
  285.         case TYPE_FILL:
  286.           cmd.GetFillElem(fill,elemId);
  287.           color = fill.GetColor();
  288.           type  = fill.GetType();
  289.           os << color << endl << type << endl << ends;
  290.           ::MessageBox(0,buf,"Fill",MB_OK);
  291.           fill.GetFirstVertex(&x1,&y1);
  292.           do {
  293.             os.seekp(0,ostream::beg);
  294.             os << x1 << endl << y1 << endl << ends;
  295.             ::MessageBox(0,buf,"Fill",MB_OK);
  296.           } while(fill.GetNextVertex(&x1,&y1));
  297.           break;
  298.         case TYPE_BMP:
  299.           cmd.GetBmpElem(bmp,elemId);
  300.           bmp.GetFirstPoint(&x1,&y1);
  301.           bmp.GetSecondPoint(&x2,&y2);
  302.           flag  = bmp.GetScale();
  303.           os << x1 << endl << y1 << endl << x2 << endl << y2 << endl << flag << endl << ends;
  304.           ::MessageBox(0,buf,"Bitmap",MB_OK);
  305.           break;
  306.         default:
  307.           break;
  308.       }
  309.       elemId = cmd.DwgGetNext();
  310.     }
  311.     cmd.ClearPgmSel();
  312.  
  313.                                    // position input
  314.     double x,y;
  315.     if(GetPoint("Enter a point",cmd,&x,&y))
  316.     {
  317.       sprintf(buf,"(%lf,%lf)",x,y);
  318.       ::MessageBox(0, buf, "Input", MB_OK);
  319.     }
  320.  
  321.  
  322.                                    // edit commands
  323.     SelectAll(cmd);
  324.     cmd.DelSel();
  325.     cmd.CreateLine(1.,1.,2.,1.);
  326.     cmd.CreateLine(2.,1.,2.,2.);
  327.     cmd.CreateLine(2.,2.,1.,2.);
  328.     cmd.CreateLine(1.,2.,1.,1.);
  329.  
  330.     cmd.Undo();
  331.     SelectAll(cmd);
  332.     ::MessageBox(0, "All elements selected", "Edit", MB_OK);
  333.     cmd.RemoveFromSel(cmd.DwgGetFirst());
  334.     ::MessageBox(0, "One element removed", "Edit", MB_OK);
  335.     cmd.ClearSel();
  336.     ::MessageBox(0, "Selection cleared", "Edit", MB_OK);
  337.     elemId = cmd.DwgGetFirst();
  338.     while(elemId)
  339.     {
  340.       cmd.AddToSel(elemId);
  341.       elemId = cmd.DwgGetNext();
  342.     }
  343.     elemId = cmd.CurrSelGetFirst();
  344.     while(elemId)
  345.     {
  346.       sprintf(buf,"element %ld",elemId);
  347.       ::MessageBox(0, buf, "Edit", MB_OK);
  348.       elemId = cmd.CurrSelGetNext();
  349.     }
  350.     cmd.MoveSel(1.,1.,2.,2.);
  351.     ::MessageBox(0, "Selection moved", "Edit", MB_OK);
  352.     cmd.CopySel(1.,1.,3.,2.);
  353.     ::MessageBox(0, "Selection copied", "Edit", MB_OK);
  354.     cmd.RotateSel(5.,5.,20.);
  355.     ::MessageBox(0, "Selection rotated", "Edit", MB_OK);
  356.     cmd.ScaleSel(5.,5.,0.5,1.);
  357.     ::MessageBox(0, "Selection scaled", "Edit", MB_OK);
  358.     cmd.MirrorSel(0.,2.,5.,2.,1);
  359.     ::MessageBox(0, "Selection mirrored", "Edit", MB_OK);
  360.     cmd.AdjustSel(0.,0.,1.,1.,1.,1.,2.,2.);
  361.     ::MessageBox(0, "Selection adjusted", "Edit", MB_OK);
  362.     cmd.DelSel();
  363.     ::MessageBox(0, "Selection deleted", "Edit", MB_OK);
  364.     cmd.CreateLine(1.,1.,2.,1.);
  365.     elemId = cmd.GetLastElem();
  366.     cmd.AddToSel(elemId);
  367.     cmd.ChangeLineColor(255L);
  368.     cmd.ChangeLineType(PS_DOT);
  369.     cmd.ChangeLineWidth(0.3);
  370.     cmd.ClearSel();
  371.     ::MessageBox(0, "Line properties changed", "Edit", MB_OK);
  372.     cmd.CreatePoint(1.,2.);
  373.     elemId = cmd.GetLastElem();
  374.     cmd.AddToSel(elemId);
  375.     cmd.ChangePointColor(255L);
  376.     cmd.ChangePointType(PT_BOX);
  377.     cmd.ChangePointSize(0.3);
  378.     cmd.ClearSel();
  379.     ::MessageBox(0, "Point properties changed", "Edit", MB_OK);
  380.     cmd.CreateText(1.,3.,"Test String");
  381.     elemId = cmd.GetLastElem();
  382.     cmd.AddToSel(elemId);
  383.     cmd.ChangeTextFont("Arial",FW_BOLD,255L,1,1,1);
  384.     ::MessageBox(0, "Text font changed", "Edit", MB_OK);
  385.     cmd.ChangeTextHgt(0.3);
  386.     cmd.ChangeTextWidth(2.);
  387.     cmd.ChangeTextAngle(20.);
  388.     cmd.ChangeTextOrient(180.);
  389.     cmd.ChangeTextJust(TA_RIGHT | TA_BOTTOM);
  390.     ::MessageBox(0, "Text properties changed", "Edit", MB_OK);
  391.     cmd.CreateRect(1.,4.,2.,5.);
  392.     elemId = cmd.GetLastElem();
  393.     cmd.CreateFill(elemId);
  394.     elemId = cmd.GetLastElem();
  395.     cmd.AddToSel(elemId);
  396.     cmd.ChangeFillColor(255L);
  397.     cmd.ChangeFillType(HS_DIAGCROSS);
  398.     cmd.ClearSel();
  399.     ::MessageBox(0, "Fill properties changed", "Edit", MB_OK);
  400.     cmd.AddLayer("layer1");
  401.     cmd.ChangeLayer("layer1");
  402.  
  403.     SelectAll(cmd);
  404.     cmd.DelSel();
  405.     cmd.CreateLine(1.,1.,3.,1.);
  406.     long elem = cmd.GetLastElem();
  407.     cmd.BreakEnd(elem,3.,1.,2.5,1.);
  408.     ::MessageBox(0, "break end", "Edit", MB_OK);
  409.     cmd.BreakMiddle(elem,1.5,1.,2.,1.);
  410.     ::MessageBox(0, "break middle", "Edit", MB_OK);
  411.     cmd.CreateLine(1.2,3.,1.2,2.);
  412.     long elem2 = cmd.GetLastElem();
  413.     cmd.Extend(elem,elem2,1.2,2.);
  414.     ::MessageBox(0, "extend", "Edit", MB_OK);
  415.     cmd.SetFilletParms((int)'r',.2);
  416.     cmd.Fillet(elem,elem2,1.2,1.,1.2,1.);
  417.     ::MessageBox(0, "fillet", "Edit", MB_OK);
  418.     cmd.StartPline(7.,7.,1);
  419.     cmd.AddPlineVertex(6.,6.);
  420.     cmd.AddPlineVertex(7.,6.);
  421.     cmd.EndPline();
  422.     elemId = cmd.GetLastElem();
  423.     cmd.OpenClosePline(elemId);
  424.     ::MessageBox(0, "closed pline", "Edit", MB_OK);
  425.     cmd.Offset(elemId,0.2);
  426.     ::MessageBox(0, "offset pline", "Edit", MB_OK);
  427.     cmd.Explode(elemId);
  428.     ::MessageBox(0, "exploded pline", "Edit", MB_OK);
  429.     cmd.CreateText(3.,3.,"String one");
  430.     cmd.ChangeText(cmd.GetLastElem(),"String two");
  431.     ::MessageBox(0, "text changed", "Edit", MB_OK);
  432.     cmd.RedefSym("..\\symbols\\tree1.sym");
  433.  
  434.                                    // view commands
  435.     cmd.ZoomWin(1.,1.,3.,3.);
  436.     ::MessageBox(0, "zoom window", "View", MB_OK);
  437.     cmd.ZoomExt();
  438.     ::MessageBox(0, "zoom extents", "View", MB_OK);
  439.     cmd.ZoomPrev();
  440.     ::MessageBox(0, "zoom previous", "View", MB_OK);
  441.     cmd.ZoomFactor(.5);
  442.     ::MessageBox(0, "zoom factor", "View", MB_OK);
  443.     cmd.ZoomPage();
  444.     ::MessageBox(0, "zoom page", "View", MB_OK);
  445.     cmd.ZoomPrev();
  446.     cmd.ZoomPageExt();
  447.     ::MessageBox(0, "zoom page&ext", "View", MB_OK);
  448.     cmd.Pan(3.,1.);
  449.     ::MessageBox(0, "pan", "View", MB_OK);
  450.     cmd.Redraw();
  451.     ::MessageBox(0, "redraw", "View", MB_OK);
  452.  
  453.                                    // snap modes
  454.     cmd.SetSnapMode(CM_SNAPGRID);
  455.     ::MessageBox(0, "snap grid", "Snap", MB_OK);
  456.     cmd.SetSnapMode(CM_SNAPMIDPT);
  457.     ::MessageBox(0, "snap midpt", "Snap", MB_OK);
  458.     cmd.SetSnapMode(CM_SNAPEND);
  459.     ::MessageBox(0, "snap end", "Snap", MB_OK);
  460.     cmd.SetSnapMode(CM_SNAPCENTER);
  461.     ::MessageBox(0, "snap center", "Snap", MB_OK);
  462.     cmd.SetSnapMode(CM_SNAPPOINT);
  463.     ::MessageBox(0, "snap point", "Snap", MB_OK);
  464.     cmd.SetSnapMode(CM_SNAPNEAREST);
  465.     ::MessageBox(0, "snap nearest", "Snap", MB_OK);
  466.     cmd.SetSnapMode(CM_SNAPINTX);
  467.     ::MessageBox(0, "snap intx", "Snap", MB_OK);
  468.     cmd.SetSnapMode(CM_SNAPTANGENT);
  469.     ::MessageBox(0, "snap tan", "Snap", MB_OK);
  470.     cmd.SetSnapMode(CM_SNAPPERP);
  471.     ::MessageBox(0, "snap perp", "Snap", MB_OK);
  472.     cmd.SetSnapMode(CM_SNAPNONE);
  473.     ::MessageBox(0, "snap none", "Snap", MB_OK);
  474.  
  475.                                    // properties
  476.     cmd.SetLineColor(255L);
  477.     cmd.SetLineType(PS_DOT);
  478.     cmd.SetLineWidth(0.3);
  479.     cmd.SetPointColor(255L);
  480.     cmd.SetPointType(PT_BOX);
  481.     cmd.SetPointSize(0.3);
  482.     cmd.SetTextFont("Arial",1.,FW_BOLD,255L,1,1,1);
  483.     cmd.SetTextHgt(0.3);
  484.     cmd.SetTextWidth(2.);
  485.     cmd.SetTextAngle(20.);
  486.     cmd.SetTextOrient(180.);
  487.     cmd.SetTextJust(TA_RIGHT | TA_BOTTOM);
  488.     cmd.SetFillColor(255L);
  489.     cmd.SetFillType(HS_DIAGCROSS);
  490.     cmd.SetDimArrowScale(2.);
  491.     cmd.SetDimOffset(1.);
  492.     cmd.AddLayer("layer1");
  493.     cmd.SetLayerLock("layer1",1);
  494.     cmd.SetLayerPrint("layer1",0);
  495.     cmd.SetLayerOn("layer1",0);
  496.     cmd.AddLayer("test");
  497.     cmd.SetCurrentLayer("test");
  498.     ::MessageBox(0, "properties set", "Properties", MB_OK);
  499.     cmd.RenameLayer("test","layer2");
  500.     ::MessageBox(0, "layer renamed", "Properties", MB_OK);
  501.     cmd.SetCurrentLayer("layer1");
  502.     ::MessageBox(0, "layer changed", "Properties", MB_OK);
  503.     cmd.SetBasePt(1.,1.);
  504.     cmd.SetGridParms(1.,1.,.2,.2,1);
  505.     cmd.SetNumFmt(NF_ARCH,0,8,'.');
  506.     ::MessageBox(0, "architectural units", "Properties", MB_OK);
  507.     cmd.SetNumFmt(NF_SCI,3,8,',');
  508.     ::MessageBox(0, "scientific units", "Properties", MB_OK);
  509.     cmd.SetNumFmt(NF_DEC,4,8,'x');
  510.     ::MessageBox(0, "decimal units", "Properties", MB_OK);
  511.     cmd.SetDispPage(0);
  512.     cmd.SetDispDxf(0);
  513.  
  514.     double xmin,ymin,xmax,ymax;
  515.     cmd.GetExtents(&xmin,&ymin,&xmax,&ymax);
  516.     sprintf(buf,"(%lf,%lf)(%lf,%lf)",xmin,ymin,xmax,ymax);
  517.     ::MessageBox(0, buf, "Extents", MB_OK);
  518.  
  519.                                    // end of test
  520.     gcad.Quit();
  521.  
  522.     ::CoFreeUnusedLibraries();
  523.   }
  524.   catch (TXBase& x) {
  525.     ::MessageBox(0, x.why().c_str(), "OLE Exception", MB_OK);
  526.   }
  527.   return 0;
  528. }
  529.  
  530.