// Write sample material to .sample file (only bool values )
        public override bool Write(string pathToFile, RenderContent renderContent, CreatePreviewEventArgs previewArgs)
        {
            List <string> lines = new List <string>();

            foreach (Field field in renderContent.Fields)
            {
                Type type = field.GetType();

                // Bool fields
                if (type == typeof(BoolField))
                {
                    string key        = field.Name;
                    string prompt     = field.Name;
                    bool   bool_value = false;
                    renderContent.Fields.TryGetValue(key, out bool_value);
                    string value = bool_value.ToString();

                    lines.Add("type=bool," + "key=" + key + ",value=" + value + "," + "prompt=" + prompt);
                }
            }

            // Write all lines to .sample file
            using (System.IO.StreamWriter file =
                       new System.IO.StreamWriter(pathToFile))
            {
                foreach (string line in lines)
                {
                    file.WriteLine(line);
                }
                file.Close();
            }
            return(true);
        }
示例#2
0
        /// <summary>
        /// Handler for rendering preview thumbnails.
        ///
        /// The CreatePreviewEventArgs parameter contains a simple
        /// scene description to be rendered. It contains a set of meshes
        /// and lights. Meshes have RenderMaterials attached to them.
        /// </summary>
        /// <param name="scene">The scene description to render, along with the requested quality setting</param>
        protected override void CreatePreview(CreatePreviewEventArgs scene)
        {
            scene.SkipInitialisation();

            if (scene.Quality == PreviewSceneQuality.Low)
            {
                scene.PreviewImage = null;
                return;
            }

            AsyncRenderContext a_rc = new PreviewRenderEngine(scene, Id);
            var engine = (PreviewRenderEngine)a_rc;

            engine.RenderDimension = scene.PreviewImageSize;
            /* create a window-less, non-document controlled render window */
            engine.RenderWindow             = Rhino.Render.RenderWindow.Create(scene.PreviewImageSize);
            engine.Database.RenderDimension = engine.RenderDimension;

            engine.SetFloatTextureAsByteTexture(false);

            engine.CreateWorld();

            /* render the preview scene */
            PreviewRenderEngine.Renderer(engine);

            /* set final preview bitmap, or null if cancelled */
            scene.PreviewImage = engine.RenderWindow.GetBitmap();

#if DEBUG
            var prev = $"{Environment.GetEnvironmentVariable("TEMP")}\\previmg.jpg";
            scene.PreviewImage.Save(prev, System.Drawing.Imaging.ImageFormat.Jpeg);
#endif
        }
示例#3
0
 protected override void CreatePreview(CreatePreviewEventArgs args)
 {
     foreach (var o in args.Objects)
     {
         RhinoApp.WriteLine($"{o.Material.Name}: {o.Material.TypeName} | {o.Material.TypeId} | {o.Material.TypeDescription}");
     }
     args.PreviewImage = null;
 }
示例#4
0
 public RenderEngine(Guid pluginId, CreatePreviewEventArgs previewEventArgs, bool interactive)
 {
     SetKernelFlags();
     SupportClippingPlanes = RcCore.It.EngineSettings.RaytracedClippingPlanes;
     PreviewEventArgs      = previewEventArgs;
     Database = new ChangeDatabase(pluginId, this, PreviewEventArgs)
     {
         SupportClippingPlanes = SupportClippingPlanes
     };
     RegisterEventHandler();
 }
        Bitmap BitmapForScene(CreatePreviewEventArgs scene, Color4f color)
        {
            var bitmap = new Bitmap(scene.PreviewImageSize.Width, scene.PreviewImageSize.Height, PixelFormat.Format24bppRgb);

            // Fill the bitmap using the computed color
            using (var g = Graphics.FromImage(bitmap))
            {
                g.Clear(Color.FromArgb(255, color.AsSystemColor()));
                g.DrawRectangle(Pens.Black, 0, 0, bitmap.Width - 1, bitmap.Height - 1);
            }
            return(bitmap);
        }
        /// <summary>
        /// Construct a render engine for preview rendering
        /// </summary>
        /// <param name="createPreviewEventArgs"></param>
        /// <param name="pluginId">Id of the plugin for which the render engine is created</param>
        public PreviewRenderEngine(CreatePreviewEventArgs createPreviewEventArgs, Guid pluginId) : base(pluginId, createPreviewEventArgs, false)
        {
            Client = new Client();
            State  = State.Rendering;

            #region create callbacks for Cycles
            m_update_callback             = UpdateCallback;
            m_update_render_tile_callback = PreviewRendererUpdateRenderTileCallback;
            m_write_render_tile_callback  = PreviewRendererWriteRenderTileCallback;
            m_test_cancel_callback        = TestCancel;

            CSycles.log_to_stdout(false);
            #endregion
        }
        protected override void CreatePreview(CreatePreviewEventArgs scene)
        {
            if (scene.Quality == PreviewSceneQuality.Low)
            {
                // Use built in image for quick preview so we don't slow the UI down.
                scene.PreviewImage = new Bitmap(Properties.Resources.AtoZ, scene.PreviewImageSize);
                return;
            }
            // New preview bitmap
            Bitmap bitmap = null;

            // If previewing a custom environment
            if (scene.ContentKind == RenderContentKind.Environment)
            {
                Color4f color;
                if (scene.Environment.Fields.TryGetValue("background", out color) ||
                    scene.Environment.Fields.TryGetValue("color", out color) ||
                    scene.Environment.Fields.TryGetValue("background-color", out color))
                {
                    bitmap = BitmapForScene(scene, color);
                }
            }
            else if (scene.ContentKind == RenderContentKind.Material)
            {
                // Make sure the content is a material
                RenderMaterial render_material = null;
                foreach (var obj in scene.Objects)
                {
                    render_material = obj.Material;
                    if (render_material != null)
                    {
                        break;
                    }
                }
                if (null != render_material)
                {
                    Color4f color;
                    // First try to get the value of the custom color field, if it is not found
                    // then look for the RDK "diffuse" color field
                    if (!render_material.Fields.TryGetValue("color", out color) &&
                        !render_material.Fields.TryGetValue(RenderMaterial.BasicMaterialParameterNames.Diffuse, out color))
                    {
                        color = Color4f.Black; // Could not find either of the color fields
                    }
                    // Create preview bitmap of requested size
                    bitmap = BitmapForScene(scene, color);
                }
            }
            scene.PreviewImage = bitmap ?? new Bitmap(Properties.Resources.AtoZ, scene.PreviewImageSize);
        }