1. This form allowing entry of a coordinate location (X, Y, Z) within the model and a coordinate direction (i, j, k). 2. Launch a ray from this location in this direction to find the first intersection with a face 3. Calculate the reflection angle of the ray from the face and launch another ray to find the next intersection 4. For each ray/intersection, create a model line connecting the two points. The end result should be a series of model lines bouncing from item to item. 5. Provide a hard limit of say, 100 intersections, to prevent endless reflections within an enclosed space. 6. Write a log file of the intersection containing: the element type, id, and material of the intersected face.
Наследование: System.Windows.Forms.Form
Пример #1
0
 /// <summary>
 /// Implement this method as an external command for Revit.
 /// </summary>
 /// <param name="commandData">An object that is passed to the external application
 /// which contains data related to the command,
 /// such as the application object and active view.</param>
 /// <param name="message">A message that can be set by the external application
 /// which will be displayed if a failure or cancellation is returned by
 /// the external command.</param>
 /// <param name="elements">A set of elements to which the external application
 /// can add elements that are to be highlighted in case of failure or cancellation.</param>
 /// <returns>Return the status of the external command.
 /// A result of Succeeded means that the API external method functioned as expected.
 /// Cancelled can be used to signify that the user cancelled the external operation
 /// at some point. Failure should be returned if the application is unable to proceed with
 /// the operation.</returns>
 public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements)
 {
     try
     {
         // should have a line style "bounce" created in the document before running this
         m_app = commandData.Application;
         Get3DView();
         if (m_view == null)
         {
             TaskDialog.Show("Revit", "A default 3D view (named {3D}) must exist before running this command");
             return(Autodesk.Revit.UI.Result.Cancelled);
         }
         else
         {
             RayTraceBounceForm form = new RayTraceBounceForm(commandData, m_view);
             form.ShowDialog();
         }
         return(Autodesk.Revit.UI.Result.Succeeded);
     }
     catch (Exception e)
     {
         message = e.ToString();
         return(Autodesk.Revit.UI.Result.Failed);
     }
 }
Пример #2
0
 /// <summary>
 /// Implement this method as an external command for Revit.
 /// </summary>
 /// <param name="commandData">An object that is passed to the external application 
 /// which contains data related to the command, 
 /// such as the application object and active view.</param>
 /// <param name="message">A message that can be set by the external application 
 /// which will be displayed if a failure or cancellation is returned by 
 /// the external command.</param>
 /// <param name="elements">A set of elements to which the external application 
 /// can add elements that are to be highlighted in case of failure or cancellation.</param>
 /// <returns>Return the status of the external command. 
 /// A result of Succeeded means that the API external method functioned as expected. 
 /// Cancelled can be used to signify that the user cancelled the external operation 
 /// at some point. Failure should be returned if the application is unable to proceed with 
 /// the operation.</returns>
 public Autodesk.Revit.UI.Result Execute(ExternalCommandData commandData, ref string message, Autodesk.Revit.DB.ElementSet elements)
 {
     try
      {
     // should have a line style "bounce" created in the document before running this
     m_app = commandData.Application;
     Get3DView();
     if (m_view == null)
     {
        MessageBox.Show("A default 3D view (named {3D}) must exist before running this command");
        return Autodesk.Revit.UI.Result.Cancelled;
     }
     else
     {
        RayTraceBounceForm form = new RayTraceBounceForm(commandData, m_view);
        form.ShowDialog();
     }
     return Autodesk.Revit.UI.Result.Succeeded;
      }
      catch (Exception e)
      {
     message = e.ToString();
     return Autodesk.Revit.UI.Result.Failed;
      }
 }