home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1998 November / pcwk_11_98a.iso / Wtestowe / SOFTSRC / vtrial15.exe / DATA.1 / VdrawX.cpp < prev    next >
C/C++ Source or Header  |  1997-02-08  |  3KB  |  88 lines

  1. /*
  2. Sample Vdraft C++ code
  3.     (C) Copyright 1997 by SoftSource.  All rights reserved.
  4. Scott Sherman 2-97
  5.  
  6.     This example demonstrates the basics of writing a Vdraft Plug-in.
  7.     If this dll is placed in Vdraft\Programs it will automatically
  8.         be loaded when Vdraft first starts.
  9.     All plug-ins must at least export vfLoad.  This function is called
  10.         by Vdraft when the plug-in is first loaded.
  11.  
  12.     In this example, vfLoad adds a menu item to Vdraft's Tools menu.
  13.     When the user selects it, vfCommand is called.  This plug-in then
  14.         starts the user drawing a line and requests to be notified upon completion.
  15.     When the user finishes drawing, vfDrawEvent is called.  This plug-in
  16.         then retrieves the new line and creates another line based on it
  17.         to draw an X on the drawing.
  18.  
  19.   Note: DrawX.def lists all the exported functions so Vdraft can call them.
  20. */
  21.  
  22. #include "stdafx.h"
  23. #include "Vdraft.h"
  24.  
  25. // the Vdraft application object we use for communications to Vdraft
  26. static IVdraft vdraft;
  27.  
  28. #define MYMENUITEM    1
  29.  
  30. // all plug-ins must export vfLoad
  31. veReturn vfLoad(vtAddOnID id)
  32. {
  33.     if (!vdraft.CreateDispatch("Vdraft.Application", NULL))
  34.         return veR_Unload;
  35.     // add "My Menu Item" to Vdraft's Tools menu
  36.     CString item("My Menu Item"),
  37.         status("A simple Vdraft add-on");
  38.     IApplicationEvents events(vdraft.GetEvents());
  39.     events.AddToolsCommand(id,MYMENUITEM,item,status);
  40.     return veR_OK;
  41. }
  42.  
  43. // vfCommand is called when our menu items are chosen by the user
  44. veReturn vfCommand(vtAddOnID id, long eventid)
  45. {
  46.     if (eventid != MYMENUITEM)
  47.         return veR_OK;
  48.     IDocument doc(vdraft.GetActiveDocument());
  49.  
  50.     // have them draw a line
  51.     IEntities entities(doc.GetEntities());
  52.     entities.DrawLine();
  53.  
  54.     // ask to be notified when they're done
  55.     IPickEvents pick(doc.GetPickEvents());
  56.     pick.RequestDraw(id,cVariant());
  57.  
  58.     return veR_OK;
  59. }
  60.  
  61. // vfDrawEvent is called when the user picks a point, finishes or cancels drawing.
  62. // Vdraft starts calling it when the plug-in requests these events using RequestDraw.
  63. //        Once the user finishes or cancels drawing, this function is no longer called.
  64. veReturn vfDrawEvent(vtAddOnID id, veDrawEvent event, double* point, short picknumber, long info)
  65. {
  66.     if (event != veDE_Done)
  67.         return veR_OK;
  68.     IDocument doc(vdraft.GetActiveDocument());
  69.     IEntities entities(doc.GetEntities());
  70.  
  71.     // get the line they just drew - it will be the last entity
  72.     ILine line(entities.GetLast());
  73.     // get the endpoints of the line
  74.     IVector end1(line.GetWhere1()),
  75.         end2(line.GetWhere2());
  76.  
  77.     // create a new line
  78.     ILine newline(entities.AddLine());
  79.     // get the endpoints of the new line
  80.     IVector newend1(newline.GetWhere1()),
  81.         newend2(newline.GetWhere2());
  82.  
  83.     // use the 1st line to position the 2nd line so we form an X
  84.     newend1.Set3D(end1.GetX(), end2.GetY(), end1.GetZ());
  85.     newend2.Set3D(end2.GetX(), end1.GetY(), end2.GetZ());
  86.     return veR_OK;
  87. }
  88.