@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