private void RemovePlacement(PaletteHolder holder, int index) { var element = holder.Elements[index]; if (element == null) { return; } holder.GroupElement.Children.Remove(element); element.Dispose(); holder.Elements[index] = null; }
public override void InitializeElements(ModelFactory factory) { foreach (var definition in scenario.Palettes.Values) { //not implemented if (definition.Name == PaletteType.LightFixture) { continue; } var holder = new PaletteHolder(definition); holder.GroupElement = new Helix.GroupModel3D(); holder.SetCapacity(holder.Definition.Placements.Count); for (int i = 0; i < holder.Definition.Placements.Count; i++) { ConfigurePlacement(factory, holder, i); } PaletteHolders.Add(holder.Name, holder); } }
private void ConfigurePlacement(ModelFactory factory, PaletteHolder holder, int index) { RemovePlacement(holder, index); var placement = holder.Definition.Placements[index]; var tag = placement.PaletteIndex >= 0 && placement.PaletteIndex < holder.Definition.Palette.Count ? holder.Definition.Palette[placement.PaletteIndex].Tag : null; if (tag == null) { holder.Elements[index] = null; return; } Helix.Element3D inst; if (holder.Definition.Name == PaletteType.Decal) { inst = new DecalMarker3D(); } else if (holder.Definition.Name == PaletteType.LightFixture) { inst = new LightMarker3D(); } else { inst = factory.CreateObjectModel(tag.Id); if (inst == null) { holder.Elements[index] = null; return; } } BindPlacement(placement, inst); holder.Elements[index] = inst; holder.GroupElement.Children.Add(inst); }