Quantcast
Channel: Rhino Developer - McNeel Forum
Viewing all articles
Browse latest Browse all 8539

System.AccessViolationException when reading doc.RenderMaterials[]

$
0
0

@seppeldue wrote:

Hi,

i get a ‘System.AccessViolationException’ when i run the plugin, accessing doc.RenderMaterials[0] for the SECOND time. First time works.
Also when running the plugin once with multibe objects selected, no problem.
There is not much documentation on RenderMaterials …
Hope someone can help. Thanks.

       if (objRm == null)
                {
                    
                    obj.RenderMaterial = doc.RenderMaterials[0];
                    obj.CommitChanges();
                    obj.Attributes.MaterialIndex = findsRM;
                    obj.CommitChanges();
                }

full code:

    protected override Result RunCommand(RhinoDoc doc, RunMode mode)
    {
        Rhino.Input.Custom.GetObject go = new Rhino.Input.Custom.GetObject();
        go.SetCommandPrompt("Select objects to apply 18ct red gold");
        go.GroupSelect = true;
        go.SubObjectSelect = false;
        go.EnableClearObjectsOnEntry(false);
        go.EnableUnselectObjectsOnExit(false);
        go.DeselectAllBeforePostSelect = false;
        go.GetMultiple(1, 0);

        int findsRM = doc.Materials.Find("18ct red gold", true);

        for (int i = 0; i < go.ObjectCount; i++)
        {
            
            Rhino.DocObjects.ObjRef objref = go.Object(i);
            Rhino.DocObjects.RhinoObject obj = objref.Object();

            if (findsRM == -1)
            {
                Rhino.DocObjects.Material rg18ct = new Rhino.DocObjects.Material();
                rg18ct.Reflectivity = 1;
                rg18ct.ReflectionColor = System.Drawing.Color.FromArgb(255, 187, 132);
                string rg18ctName = "18ct red gold";
                rg18ct.Name = rg18ctName;
                rg18ct.CommitChanges();
                var idrg18 = doc.Materials.Add(rg18ct);

                var rmrg18 = Rhino.Render.RenderMaterial.CreateBasicMaterial(doc.Materials[idrg18]);
                doc.RenderMaterials.Add(rmrg18);
                obj.RenderMaterial = rmrg18;
                obj.CommitChanges();
            }
            else
            {
                var objRm = obj.RenderMaterial;

                if (objRm == null)
                {
                    
                    obj.RenderMaterial = doc.RenderMaterials[0];
                    obj.CommitChanges();
                    obj.Attributes.MaterialIndex = findsRM;
                    obj.CommitChanges();
                }
                else
                {
                    obj.Attributes.MaterialIndex = findsRM;
                    obj.CommitChanges();
                }
            }
        }
        doc.Views.Redraw();
        return Result.Success;
    }
}

Posts: 1

Participants: 1

Read full topic


Viewing all articles
Browse latest Browse all 8539

Trending Articles