/// <summary> /// Add info to delete (hide) object from cycles /// </summary> /// <param name="ob"></param> public void DeleteObject(CyclesObject ob) { if (!_cqDeletedObjects.Contains(ob)) { _cqDeletedObjects.Add(ob); } }
/// <summary> /// Add an object change. /// </summary> /// <param name="ob"></param> public void AddOrUpdateObject(CyclesObject ob) { if (!_cqNewUpdatedObjects.Contains(ob)) { _cqNewUpdatedObjects.Add(ob); } }
/// <summary> /// Add info to delete (hide) object from cycles /// </summary> /// <param name="ob"></param> public void DeleteObject(CyclesObject ob) { if(!_cqDeletedObjects.Contains(ob)) _cqDeletedObjects.Add(ob); }
/// <summary> /// Add an object change. /// </summary> /// <param name="ob"></param> public void AddOrUpdateObject(CyclesObject ob) { if(!_cqNewUpdatedObjects.Contains(ob)) _cqNewUpdatedObjects.Add(ob); }
protected override void ApplyMeshInstanceChanges(List<uint> deleted, List<MeshInstance> addedOrChanged) { // helper list to ensure we don't add same material multiple times. var addedmats = new List<uint>(); foreach (var d in deleted) { var cob = _objectDatabase.FindObjectRelation(d); var delob = new CyclesObject {cob = cob}; _objectDatabase.DeleteObject(delob); //System.Diagnostics.Debug.WriteLine("Deleted MI {0}", d); } foreach (var a in addedOrChanged) { var matid = a.MaterialId; var mat = a.RenderMaterial; if (!addedmats.Contains(matid)) { HandleRenderMaterial(mat); addedmats.Add(matid); } var meshid = new Tuple<Guid, int>(a.MeshId, a.MeshIndex); //System.Diagnostics.Debug.WriteLine("Added MI {0}", a.InstanceId); var ob = new CyclesObject {obid = a.InstanceId, meshid = meshid, Transform = CclXformFromRhinoXform(a.Transform), matid = a.MaterialId}; var shaderchange = new CyclesObjectShader(a.InstanceId) { OldShaderHash = uint.MaxValue, NewShaderHash = a.MaterialId }; _shaderDatabase.AddObjectMaterialChange(shaderchange); _objectShaderDatabase.RecordRenderHashRelation(a.MaterialId, meshid, a.InstanceId); _objectDatabase.RecordObjectIdMeshIdRelation(a.InstanceId, meshid); _objectDatabase.AddOrUpdateObject(ob); } }
/// <summary> /// Handle light changes /// </summary> /// <param name="lightChanges"></param> protected override void ApplyLightChanges(List<CqLight> lightChanges) { foreach (var light in lightChanges) { if (light.Data.IsLinearLight) { uint lightmeshinstanceid = light.IdCrc; var ld = light.Data; switch (light.ChangeType) { case CqLight.Event.Deleted: var cob = _objectDatabase.FindObjectRelation(lightmeshinstanceid); var delob = new CyclesObject {cob = cob}; _objectDatabase.DeleteObject(delob); _objectDatabase.DeleteMesh(ld.Id); break; default: HandleLinearLightAddOrModify(lightmeshinstanceid, ld); break; } } else { // we don't necessarily get view changes prior to light changes, so // the old _currentViewInfo could be null - at the end of a Flush // it would be thrown away. Hence we now ask the ChangeQueue for the // proper view info. It will be given if one constructed the ChangeQueue // with a view to force it to be a single-view only ChangeQueue. // See #RH-32345 and #RH-32356 var v = GetQueueView(); var cl = _shaderConverter.ConvertLight(this, light, v, PreProcessGamma); _lightDatabase.AddLight(cl); } } }