public static void CopyProperties(this IObject3D copyTo, IObject3D copyFrom, Object3DPropertyFlags flags) { if (flags.HasFlag(Object3DPropertyFlags.Matrix)) { copyTo.Matrix = copyFrom.Matrix; } if (flags.HasFlag(Object3DPropertyFlags.Color)) { copyTo.Color = copyFrom.Color; } if (flags.HasFlag(Object3DPropertyFlags.MaterialIndex)) { copyTo.MaterialIndex = copyFrom.MaterialIndex; } if (flags.HasFlag(Object3DPropertyFlags.Name)) { copyTo.Name = copyFrom.Name; } if (flags.HasFlag(Object3DPropertyFlags.OutputType)) { copyTo.OutputType = copyFrom.OutputType; } if (flags.HasFlag(Object3DPropertyFlags.Visible)) { copyTo.Visible = copyFrom.Visible; } }
public void ResetMeshWrapperMeshes(Object3DPropertyFlags flags, CancellationToken cancellationToken) { using (RebuildLock()) { this.DebugDepth("Reset MWM"); // Remove everything above the objects that have the meshes we are wrapping that are mesh wrappers var wrappers = this.Descendants().Where(o => o.OwnerID == this.ID).ToList(); foreach (var wrapper in wrappers) { using (wrapper.RebuildLock()) { var remove = wrapper.Parent; while (remove is ModifiedMeshObject3D) { var hold = remove; remove.Remove(null); remove = hold.Parent; } } } // if there are not already, wrap all meshes with our id (some inner object may have changed it's meshes) AddMeshWrapperToAllChildren(); this.Mesh = null; var participants = this.Descendants().Where(o => o.OwnerID == this.ID).ToList(); foreach (var item in participants) { var firstChild = item.Children.First(); using (item.RebuildLock()) { // set the mesh back to a copy of the child mesh item.Mesh = firstChild.Mesh.Copy(cancellationToken); // and reset the properties item.CopyProperties(firstChild, flags & (~Object3DPropertyFlags.Matrix)); } } } }
public static void CopyWorldProperties(this IObject3D copyTo, IObject3D copyFrom, IObject3D root, Object3DPropertyFlags flags, bool includingRoot = true) { if (flags.HasFlag(Object3DPropertyFlags.Matrix)) { copyTo.Matrix = copyFrom.WorldMatrix(root, includingRoot); } if (flags.HasFlag(Object3DPropertyFlags.Color)) { copyTo.Color = copyFrom.WorldColor(root, includingRoot); } if (flags.HasFlag(Object3DPropertyFlags.MaterialIndex)) { copyTo.MaterialIndex = copyFrom.WorldMaterialIndex(root, includingRoot); } if (flags.HasFlag(Object3DPropertyFlags.Name)) { copyTo.Name = copyFrom.Name; } if (flags.HasFlag(Object3DPropertyFlags.OutputType)) { copyTo.OutputType = copyFrom.WorldOutputType(root, includingRoot); } if (flags.HasFlag(Object3DPropertyFlags.Visible)) { copyTo.Visible = copyFrom.WorldVisible(root, includingRoot); } }