Improved interior info display and XML conversion

This commit is contained in:
dexyfex 2018-03-07 13:12:20 +11:00
parent 05ec5e5b76
commit a68523b2ef
7 changed files with 269 additions and 140 deletions

View File

@ -1828,8 +1828,60 @@ namespace CodeWalker.GameFiles
if (iarch == null)
{ } //can't find archetype - des stuff eg {des_prologue_door}
}
//update archetype room AABB's.. bad to have this here? where else to put it?
var mloa = arch as MloArchetype;
if (mloa != null)
{
Vector3[] c = new Vector3[8];
var rooms = mloa.rooms;
if (rooms != null)
{
for (int j = 0; j < rooms.Length; j++)
{
var room = rooms[j];
if ((room.AttachedObjects == null) || (room.AttachedObjects.Length == 0)) continue;
Vector3 min = new Vector3(float.MaxValue);
Vector3 max = new Vector3(float.MinValue);
for (int k = 0; k < room.AttachedObjects.Length; k++)
{
var objid = room.AttachedObjects[k];
if (objid < entities.Length)
{
var rooment = entities[objid];
if ((rooment != null) && (rooment.Archetype != null))
{
var earch = rooment.Archetype;
var pos = rooment._CEntityDef.position;
var ori = rooment.Orientation;
Vector3 abmin = earch.BBMin * rooment.Scale; //entity box
Vector3 abmax = earch.BBMax * rooment.Scale;
c[0] = abmin;
c[1] = new Vector3(abmin.X, abmin.Y, abmax.Z);
c[2] = new Vector3(abmin.X, abmax.Y, abmin.Z);
c[3] = new Vector3(abmin.X, abmax.Y, abmax.Z);
c[4] = new Vector3(abmax.X, abmin.Y, abmin.Z);
c[5] = new Vector3(abmax.X, abmin.Y, abmax.Z);
c[6] = new Vector3(abmax.X, abmax.Y, abmin.Z);
c[7] = abmax;
for (int n = 0; n < 8; n++)
{
Vector3 corn = ori.Multiply(c[n]) + pos;
min = Vector3.Min(min, corn);
max = Vector3.Max(max, corn);
}
}
}
}
room.BBMin_CW = min;
room.BBMax_CW = max;
}
}
}
}
}
}
}

View File

@ -3441,7 +3441,7 @@ namespace CodeWalker.GameFiles
timecycleName = 2724323497,
secondaryTimecycleName = 3255324828,
portalCount = 1105339827,
//exteriorVisibiltyDepth = 552849982, //not correct = spelling error?
exteriorVisibiltyDepth = 552849982, //not correct = spelling error?
attachedObjects = 2382704940,
roomFrom = 4101034749,
roomTo = 2607060513,

View File

@ -840,7 +840,7 @@ namespace CodeWalker.GameFiles
new MetaStructureEntryInfo_s(MetaName.flags, 76, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.portalCount, 80, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.floorId, 84, MetaStructureEntryDataType.SignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s((MetaName)552849982, 88, MetaStructureEntryDataType.SignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.exteriorVisibiltyDepth, 88, MetaStructureEntryDataType.SignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.ARRAYINFO, 0, MetaStructureEntryDataType.UnsignedInt, 0, 0, 0),
new MetaStructureEntryInfo_s(MetaName.attachedObjects, 96, MetaStructureEntryDataType.Array, 0, 10, 0)
);
@ -2411,7 +2411,7 @@ namespace CodeWalker.GameFiles
public uint flags { get; set; } //76 76: UnsignedInt: 0: flags
public uint portalCount { get; set; } //80 80: UnsignedInt: 0: portalCount//1105339827
public int floorId { get; set; } //84 84: SignedInt: 0: floorId//2187650609
public int Unk_552849982 { get; set; } //88 88: SignedInt: 0: exteriorVisibiltyDepth//552849982
public int exteriorVisibiltyDepth { get; set; } //88 88: SignedInt: 0: exteriorVisibiltyDepth//552849982
public uint Unused6 { get; set; }//92
public Array_uint attachedObjects { get; set; } //96 96: Array: 0: attachedObjects//2382704940 {0: UnsignedInt: 0: 256}
}
@ -2422,6 +2422,14 @@ namespace CodeWalker.GameFiles
public string RoomName { get; set; }
public uint[] AttachedObjects { get; set; }
public Vector3 BBCenter { get { return (_Data.bbMax + _Data.bbMin) * 0.5f; } }
public Vector3 BBSize { get { return (_Data.bbMax - _Data.bbMin); } }
public Vector3 BBMin { get { return (_Data.bbMin); } }
public Vector3 BBMax { get { return (_Data.bbMax); } }
public Vector3 BBMin_CW { get; set; }
public Vector3 BBMax_CW { get; set; }
public MCMloRoomDef() { }
public MCMloRoomDef(Meta meta, CMloRoomDef data)
{
@ -2495,6 +2503,21 @@ namespace CodeWalker.GameFiles
public Vector4[] Corners { get; set; }
public uint[] AttachedObjects { get; set; }
public Vector3 Center
{
get
{
if ((Corners == null)||(Corners.Length==0)) return Vector3.Zero;
var v = Vector3.Zero;
for (int i = 0; i < Corners.Length; i++)
{
v += Corners[i].XYZ();
}
v *= (1.0f / Corners.Length);
return v;
}
}
public MCMloPortalDef() { }
public MCMloPortalDef(Meta meta, CMloPortalDef data)
{

View File

@ -101,6 +101,7 @@ done:
[v.29]
Improved selected MLO instance display - portals, limbo room
New Project Window
RPF Explorer drag & drop
Show vehicle wheels

168
WorldForm.Designer.cs generated
View File

@ -145,6 +145,8 @@ namespace CodeWalker
this.WaitForChildrenCheckBox = new System.Windows.Forms.CheckBox();
this.label14 = new System.Windows.Forms.Label();
this.tabPage9 = new System.Windows.Forms.TabPage();
this.SnapGridSizeUpDown = new System.Windows.Forms.NumericUpDown();
this.label26 = new System.Windows.Forms.Label();
this.SkeletonsCheckBox = new System.Windows.Forms.CheckBox();
this.AudioOuterBoundsCheckBox = new System.Windows.Forms.CheckBox();
this.PopZonesCheckBox = new System.Windows.Forms.CheckBox();
@ -258,6 +260,10 @@ namespace CodeWalker
this.ToolbarTransformSpaceButton = new System.Windows.Forms.ToolStripSplitButton();
this.ToolbarObjectSpaceButton = new System.Windows.Forms.ToolStripMenuItem();
this.ToolbarWorldSpaceButton = new System.Windows.Forms.ToolStripMenuItem();
this.ToolbarSnapButton = new CodeWalker.WinForms.ToolStripSplitButtonFix();
this.ToolbarSnapToGroundButton = new System.Windows.Forms.ToolStripMenuItem();
this.ToolbarSnapToGridButton = new System.Windows.Forms.ToolStripMenuItem();
this.ToolbarSnapToGroundGridButton = new System.Windows.Forms.ToolStripMenuItem();
this.toolStripSeparator2 = new System.Windows.Forms.ToolStripSeparator();
this.ToolbarUndoButton = new System.Windows.Forms.ToolStripSplitButton();
this.ToolbarUndoListButton = new System.Windows.Forms.ToolStripMenuItem();
@ -278,12 +284,6 @@ namespace CodeWalker
this.ToolbarCameraMapViewButton = new System.Windows.Forms.ToolStripMenuItem();
this.ToolbarCameraOrthographicButton = new System.Windows.Forms.ToolStripMenuItem();
this.ToolbarPanel = new System.Windows.Forms.Panel();
this.ToolbarSnapButton = new CodeWalker.WinForms.ToolStripSplitButtonFix();
this.ToolbarSnapToGroundButton = new System.Windows.Forms.ToolStripMenuItem();
this.ToolbarSnapToGridButton = new System.Windows.Forms.ToolStripMenuItem();
this.ToolbarSnapToGroundGridButton = new System.Windows.Forms.ToolStripMenuItem();
this.label26 = new System.Windows.Forms.Label();
this.SnapGridSizeUpDown = new System.Windows.Forms.NumericUpDown();
this.StatusStrip.SuspendLayout();
this.ToolsPanel.SuspendLayout();
this.ToolsTabControl.SuspendLayout();
@ -314,6 +314,7 @@ namespace CodeWalker
((System.ComponentModel.ISupportInitialize)(this.FieldOfViewTrackBar)).BeginInit();
this.tabPage14.SuspendLayout();
this.tabPage9.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.SnapGridSizeUpDown)).BeginInit();
((System.ComponentModel.ISupportInitialize)(this.BoundsRangeTrackBar)).BeginInit();
this.tabPage10.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.CloudParamTrackBar)).BeginInit();
@ -324,7 +325,6 @@ namespace CodeWalker
this.ToolsMenu.SuspendLayout();
this.Toolbar.SuspendLayout();
this.ToolbarPanel.SuspendLayout();
((System.ComponentModel.ISupportInitialize)(this.SnapGridSizeUpDown)).BeginInit();
this.SuspendLayout();
//
// StatusStrip
@ -1785,6 +1785,39 @@ namespace CodeWalker
this.tabPage9.Text = "Helpers";
this.tabPage9.UseVisualStyleBackColor = true;
//
// SnapGridSizeUpDown
//
this.SnapGridSizeUpDown.DecimalPlaces = 2;
this.SnapGridSizeUpDown.Location = new System.Drawing.Point(86, 291);
this.SnapGridSizeUpDown.Maximum = new decimal(new int[] {
1000,
0,
0,
0});
this.SnapGridSizeUpDown.Minimum = new decimal(new int[] {
1,
0,
0,
131072});
this.SnapGridSizeUpDown.Name = "SnapGridSizeUpDown";
this.SnapGridSizeUpDown.Size = new System.Drawing.Size(108, 20);
this.SnapGridSizeUpDown.TabIndex = 49;
this.SnapGridSizeUpDown.Value = new decimal(new int[] {
100,
0,
0,
131072});
this.SnapGridSizeUpDown.ValueChanged += new System.EventHandler(this.SnapGridSizeUpDown_ValueChanged);
//
// label26
//
this.label26.AutoSize = true;
this.label26.Location = new System.Drawing.Point(4, 293);
this.label26.Name = "label26";
this.label26.Size = new System.Drawing.Size(76, 13);
this.label26.TabIndex = 48;
this.label26.Text = "Snap grid size:";
//
// SkeletonsCheckBox
//
this.SkeletonsCheckBox.AutoSize = true;
@ -2641,7 +2674,7 @@ namespace CodeWalker
this.ToolbarCameraModeButton});
this.Toolbar.Location = new System.Drawing.Point(1, 0);
this.Toolbar.Name = "Toolbar";
this.Toolbar.Size = new System.Drawing.Size(554, 25);
this.Toolbar.Size = new System.Drawing.Size(585, 25);
this.Toolbar.TabIndex = 6;
this.Toolbar.Text = "toolStrip1";
//
@ -2897,7 +2930,7 @@ namespace CodeWalker
//
this.ToolbarSelectMloInstanceButton.Name = "ToolbarSelectMloInstanceButton";
this.ToolbarSelectMloInstanceButton.Size = new System.Drawing.Size(181, 22);
this.ToolbarSelectMloInstanceButton.Text = "Mlo Instance";
this.ToolbarSelectMloInstanceButton.Text = "Interior Instance";
this.ToolbarSelectMloInstanceButton.Click += new System.EventHandler(this.ToolbarSelectMloInstanceButton_Click);
//
// ToolbarSelectScenarioButton
@ -2971,7 +3004,7 @@ namespace CodeWalker
this.ToolbarObjectSpaceButton.CheckState = System.Windows.Forms.CheckState.Checked;
this.ToolbarObjectSpaceButton.Image = ((System.Drawing.Image)(resources.GetObject("ToolbarObjectSpaceButton.Image")));
this.ToolbarObjectSpaceButton.Name = "ToolbarObjectSpaceButton";
this.ToolbarObjectSpaceButton.Size = new System.Drawing.Size(152, 22);
this.ToolbarObjectSpaceButton.Size = new System.Drawing.Size(142, 22);
this.ToolbarObjectSpaceButton.Text = "Object space";
this.ToolbarObjectSpaceButton.Click += new System.EventHandler(this.ToolbarObjectSpaceButton_Click);
//
@ -2979,10 +3012,49 @@ namespace CodeWalker
//
this.ToolbarWorldSpaceButton.Image = ((System.Drawing.Image)(resources.GetObject("ToolbarWorldSpaceButton.Image")));
this.ToolbarWorldSpaceButton.Name = "ToolbarWorldSpaceButton";
this.ToolbarWorldSpaceButton.Size = new System.Drawing.Size(152, 22);
this.ToolbarWorldSpaceButton.Size = new System.Drawing.Size(142, 22);
this.ToolbarWorldSpaceButton.Text = "World space";
this.ToolbarWorldSpaceButton.Click += new System.EventHandler(this.ToolbarWorldSpaceButton_Click);
//
// ToolbarSnapButton
//
this.ToolbarSnapButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.ToolbarSnapButton.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.ToolbarSnapToGroundButton,
this.ToolbarSnapToGridButton,
this.ToolbarSnapToGroundGridButton});
this.ToolbarSnapButton.Image = ((System.Drawing.Image)(resources.GetObject("ToolbarSnapButton.Image")));
this.ToolbarSnapButton.ImageTransparentColor = System.Drawing.Color.Magenta;
this.ToolbarSnapButton.Name = "ToolbarSnapButton";
this.ToolbarSnapButton.Size = new System.Drawing.Size(32, 22);
this.ToolbarSnapButton.Text = "Snap to Ground";
this.ToolbarSnapButton.ToolTipText = "Snap to Ground";
this.ToolbarSnapButton.ButtonClick += new System.EventHandler(this.ToolbarSnapButton_ButtonClick);
//
// ToolbarSnapToGroundButton
//
this.ToolbarSnapToGroundButton.Image = ((System.Drawing.Image)(resources.GetObject("ToolbarSnapToGroundButton.Image")));
this.ToolbarSnapToGroundButton.Name = "ToolbarSnapToGroundButton";
this.ToolbarSnapToGroundButton.Size = new System.Drawing.Size(205, 22);
this.ToolbarSnapToGroundButton.Text = "Snap to Ground";
this.ToolbarSnapToGroundButton.Click += new System.EventHandler(this.ToolbarSnapToGroundButton_Click);
//
// ToolbarSnapToGridButton
//
this.ToolbarSnapToGridButton.Image = ((System.Drawing.Image)(resources.GetObject("ToolbarSnapToGridButton.Image")));
this.ToolbarSnapToGridButton.Name = "ToolbarSnapToGridButton";
this.ToolbarSnapToGridButton.Size = new System.Drawing.Size(205, 22);
this.ToolbarSnapToGridButton.Text = "Snap to Grid";
this.ToolbarSnapToGridButton.Click += new System.EventHandler(this.ToolbarSnapToGridButton_Click);
//
// ToolbarSnapToGroundGridButton
//
this.ToolbarSnapToGroundGridButton.Image = ((System.Drawing.Image)(resources.GetObject("ToolbarSnapToGroundGridButton.Image")));
this.ToolbarSnapToGroundGridButton.Name = "ToolbarSnapToGroundGridButton";
this.ToolbarSnapToGroundGridButton.Size = new System.Drawing.Size(205, 22);
this.ToolbarSnapToGroundGridButton.Text = "Snap to Grid and Ground";
this.ToolbarSnapToGroundGridButton.Click += new System.EventHandler(this.ToolbarSnapToGroundGridButton_Click);
//
// toolStripSeparator2
//
this.toolStripSeparator2.Name = "toolStripSeparator2";
@ -3166,78 +3238,6 @@ namespace CodeWalker
this.ToolbarPanel.TabIndex = 7;
this.ToolbarPanel.Visible = false;
//
// ToolbarSnapButton
//
this.ToolbarSnapButton.DisplayStyle = System.Windows.Forms.ToolStripItemDisplayStyle.Image;
this.ToolbarSnapButton.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
this.ToolbarSnapToGroundButton,
this.ToolbarSnapToGridButton,
this.ToolbarSnapToGroundGridButton});
this.ToolbarSnapButton.Image = ((System.Drawing.Image)(resources.GetObject("ToolbarSnapButton.Image")));
this.ToolbarSnapButton.ImageTransparentColor = System.Drawing.Color.Magenta;
this.ToolbarSnapButton.Name = "ToolbarSnapButton";
this.ToolbarSnapButton.Size = new System.Drawing.Size(32, 22);
this.ToolbarSnapButton.Text = "Snap to Ground";
this.ToolbarSnapButton.ToolTipText = "Snap to Ground";
this.ToolbarSnapButton.ButtonClick += new System.EventHandler(this.ToolbarSnapButton_ButtonClick);
//
// ToolbarSnapToGroundButton
//
this.ToolbarSnapToGroundButton.Image = ((System.Drawing.Image)(resources.GetObject("ToolbarSnapToGroundButton.Image")));
this.ToolbarSnapToGroundButton.Name = "ToolbarSnapToGroundButton";
this.ToolbarSnapToGroundButton.Size = new System.Drawing.Size(205, 22);
this.ToolbarSnapToGroundButton.Text = "Snap to Ground";
this.ToolbarSnapToGroundButton.Click += new System.EventHandler(this.ToolbarSnapToGroundButton_Click);
//
// ToolbarSnapToGridButton
//
this.ToolbarSnapToGridButton.Image = ((System.Drawing.Image)(resources.GetObject("ToolbarSnapToGridButton.Image")));
this.ToolbarSnapToGridButton.Name = "ToolbarSnapToGridButton";
this.ToolbarSnapToGridButton.Size = new System.Drawing.Size(205, 22);
this.ToolbarSnapToGridButton.Text = "Snap to Grid";
this.ToolbarSnapToGridButton.Click += new System.EventHandler(this.ToolbarSnapToGridButton_Click);
//
// ToolbarSnapToGroundGridButton
//
this.ToolbarSnapToGroundGridButton.Image = ((System.Drawing.Image)(resources.GetObject("ToolbarSnapToGroundGridButton.Image")));
this.ToolbarSnapToGroundGridButton.Name = "ToolbarSnapToGroundGridButton";
this.ToolbarSnapToGroundGridButton.Size = new System.Drawing.Size(205, 22);
this.ToolbarSnapToGroundGridButton.Text = "Snap to Grid and Ground";
this.ToolbarSnapToGroundGridButton.Click += new System.EventHandler(this.ToolbarSnapToGroundGridButton_Click);
//
// label26
//
this.label26.AutoSize = true;
this.label26.Location = new System.Drawing.Point(4, 293);
this.label26.Name = "label26";
this.label26.Size = new System.Drawing.Size(76, 13);
this.label26.TabIndex = 48;
this.label26.Text = "Snap grid size:";
//
// SnapGridSizeUpDown
//
this.SnapGridSizeUpDown.DecimalPlaces = 2;
this.SnapGridSizeUpDown.Location = new System.Drawing.Point(86, 291);
this.SnapGridSizeUpDown.Maximum = new decimal(new int[] {
1000,
0,
0,
0});
this.SnapGridSizeUpDown.Minimum = new decimal(new int[] {
1,
0,
0,
131072});
this.SnapGridSizeUpDown.Name = "SnapGridSizeUpDown";
this.SnapGridSizeUpDown.Size = new System.Drawing.Size(108, 20);
this.SnapGridSizeUpDown.TabIndex = 49;
this.SnapGridSizeUpDown.Value = new decimal(new int[] {
100,
0,
0,
131072});
this.SnapGridSizeUpDown.ValueChanged += new System.EventHandler(this.SnapGridSizeUpDown_ValueChanged);
//
// WorldForm
//
this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F);
@ -3303,6 +3303,7 @@ namespace CodeWalker
this.tabPage14.PerformLayout();
this.tabPage9.ResumeLayout(false);
this.tabPage9.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.SnapGridSizeUpDown)).EndInit();
((System.ComponentModel.ISupportInitialize)(this.BoundsRangeTrackBar)).EndInit();
this.tabPage10.ResumeLayout(false);
this.tabPage10.PerformLayout();
@ -3318,7 +3319,6 @@ namespace CodeWalker
this.Toolbar.PerformLayout();
this.ToolbarPanel.ResumeLayout(false);
this.ToolbarPanel.PerformLayout();
((System.ComponentModel.ISupportInitialize)(this.SnapGridSizeUpDown)).EndInit();
this.ResumeLayout(false);
this.PerformLayout();

View File

@ -1231,6 +1231,7 @@ namespace CodeWalker
const uint cgrn = 4278255360;// (uint)new Color4(0.0f, 1.0f, 0.0f, 1.0f).ToRgba();
const uint cblu = 4294901760;// (uint)new Color4(0.0f, 0.0f, 1.0f, 1.0f).ToRgba();
const uint caqu = 4294967040;// (uint)new Color4(0.0f, 1.0f, 1.0f, 1.0f).ToRgba();
if (MouseRayCollisionEnabled && MouseRayCollisionVisible)
{
@ -1353,6 +1354,58 @@ namespace CodeWalker
{
bbmin = selectionItem.AABB.Minimum;
bbmax = selectionItem.AABB.Maximum;
var mlo = selectionItem.MloEntityDef;
var mlop = mlo.Position;
var mloa = mlo.Archetype as MloArchetype;
if (mloa != null)
{
VertexTypePC p1 = new VertexTypePC();
VertexTypePC p2 = new VertexTypePC();
if (mloa.portals != null)
{
p1.Colour = caqu;
p2.Colour = caqu;
for (int ip = 0; ip < mloa.portals.Length; ip++)
{
var portal = mloa.portals[ip];
if (portal.Corners == null) continue;
for (int ic = 0; ic < portal.Corners.Length; ic++)
{
int il = ((ic==0)? portal.Corners.Length : ic) - 1;
p1.Position = mlop + mlo.Orientation.Multiply(portal.Corners[il].XYZ());
p2.Position = mlop + mlo.Orientation.Multiply(portal.Corners[ic].XYZ());
Renderer.SelectionLineVerts.Add(p1);
Renderer.SelectionLineVerts.Add(p2);
}
}
}
if (mloa.rooms != null)
{
MapBox wbox = new MapBox();
wbox.Scale = Vector3.One;
for (int ir = 0; ir < mloa.rooms.Length; ir++)
{
var room = mloa.rooms[ir];
wbox.CamRelPos = mlop - camera.Position;
wbox.BBMin = room._Data.bbMin;// + offset;
wbox.BBMax = room._Data.bbMax;// + offset;
wbox.Orientation = mlo.Orientation;
if ((ir == 0) || (room.RoomName == "limbo"))
{
bbmin = room._Data.bbMin;
bbmax = room._Data.bbMax;
//////Renderer.BoundingBoxes.Add(wbox);
}
else
{
wbox.BBMin = room.BBMin_CW; //hack method to use CW calculated room AABBs,
wbox.BBMax = room.BBMax_CW; //R* ones are right size, but wrong position??
Renderer.WhiteBoxes.Add(wbox);
}
}
}
}
}
if ((selectionItem.GrassBatch != null) || (selectionItem.ArchetypeExtension != null) || (selectionItem.EntityExtension != null) || (selectionItem.CollisionBounds != null))
{
@ -1394,7 +1447,6 @@ namespace CodeWalker
}
}
if (mode == BoundsShaderMode.Box)
{
MapBox box = new MapBox();
@ -2455,6 +2507,7 @@ namespace CodeWalker
for (int i = 0; i < ymap.MloEntities.Length; i++)
{
var ent = ymap.MloEntities[i];
if (SelectedItem.MloEntityDef == ent) continue;
MapBox mb = new MapBox();
mb.CamRelPos = ent.Position - camera.Position;
mb.BBMin = /*ent?.BBMin ??*/ new Vector3(-1.5f);

View File

@ -240,14 +240,6 @@ ufo
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB4SURBVDhP3ZC7DcAgDEQZKTMwHOvSIFriS7BlEB+HMic9
QJbvFThLUkpXzjkSpaeuzMPlEELx3jdsBauyCHBY6UWYPQI93KEljQD3jL6EGzN6x0bASyNYwkKU8Udm
gd6TMnIikDJyIqjVNz8T7FgKrAwFX6lVinM3aJ05lWDPRRcAAAAASUVORK5CYII=
</value>
</data>
<data name="ToolbarTransformSpaceButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB0SURBVDhP7ZNBCoAgEEXnSJ3BqxmetNpaMLhVv5DNRJS2
CxIeuvA9XSjtg5mHEILPxB6U7JyLxphmSkDK1o5x9dst87SUfTXwRsYsA+paT0BGDGsVOJ92hdz3Bz4f
wGPC48uu7w5IGd+gBlpRMgYCnRwyESUj3CsQkYNFDwAAAABJRU5ErkJggg==
</value>
</data>
<data name="ToolbarObjectSpaceButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@ -267,6 +259,51 @@ ufo
7bHCx/miCf7qYJ1jjjYYx3Fm0nfDXfJWzhjMzuBweJJvr++b5K1dOQN7hP9AH0H96EvM83zh7q+2zsH1
L1H0fS+TJHEX+ZsBXDRobS/oRorjWB5/aqSXVkZRJKuqQnxtJEJNXCvjTu9D9kGOmhEvW5kwJiVb43wI
WBXYx9R1nV75RuyHKrrnzCcGjE1u9ZyD4BugoZigQ9xrngAAAABJRU5ErkJggg==
</value>
</data>
<data name="ToolbarTransformSpaceButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB0SURBVDhP7ZNBCoAgEEXnSJ3BqxmetNpaMLhVv5DNRJS2
CxIeuvA9XSjtg5mHEILPxB6U7JyLxphmSkDK1o5x9dst87SUfTXwRsYsA+paT0BGDGsVOJ92hdz3Bz4f
wGPC48uu7w5IGd+gBlpRMgYCnRwyESUj3CsQkYNFDwAAAABJRU5ErkJggg==
</value>
</data>
<data name="ToolbarSnapToGroundButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADMSURBVDhPrZLBDcMgDEUzGxN0ilyZJ92DqXJoe4Cr
y3f8EXERUptaehVx/F8gzSIil1hKKWIMB8C0EA4hTCXToqCXVFbjOwElKSUF65zzzUbHhad4CYkxyr7v
KvHHIhQ0ybbd5fl4KVhDgns+SPSnDqzYMgQME/TsOO2d/EVQ17ozXmgD2/VHgMCGdY5h9psALwovDBLc
9GAYcwyzZ//FUZCgiS3btj8k/tqiR3Xn0w+pDp2e2IN+xZJWncAzDINTTQSAwRYGLfQbsrwBmeh5Q8G/
p8gAAAAASUVORK5CYII=
</value>
</data>
<data name="ToolbarSnapToGridButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAAAlwSFlzAAAO
wwAADsMBx2+oZAAAAH5JREFUOE+9kEEKwCAMBH2bL+hPfI/9ooe2B71aVpKS5iBB0i4MyCZZjcFdrbUu
IdsuDMUYB/8H1Fo3HQCPynOhsZTSU0pPAM7wpiG4hcFAzns/j2uAMzzZo3ntDHiYkTWNXwCztAJr+ROl
0IhU+UTzMEsHkG2XS4CE7K8Uwg0o2F4o9CrlEwAAAABJRU5ErkJggg==
</value>
</data>
<data name="ToolbarSnapToGroundGridButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABGdBTUEAALGPC/xhBQAAABl0RVh0U29m
dHdhcmUAQWRvYmUgSW1hZ2VSZWFkeXHJZTwAAADLSURBVDhPpZHRDcIwDEQzWxbqGEjZoOzRqfoBfLS/
Jnf1IWMKAmrpSYl7d3HSYmaHKOu6msNG2BOKPhVEtdZHiPbqfR0QQqy1Rn4OUMg0TQTrZVlOLt2vLnoJ
EcMw2DzPDMEke9AsYBrHs10vN4I1QqImwwDcFyMjQGaBHr5Bo8nEoYCnCQTGzVeI4oj6fIi+KHgoPBhC
4knCjTww9vxfbIUQNDEyiGIZ8t6tW/k0vC/AOpuiueNOLwVkUeylvju9FJCg8E1vM/2PlTv5UoervVTJ
uQAAAABJRU5ErkJggg==
</value>
</data>
<data name="ToolbarSnapButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACtSURBVDhPrZBBEsIgEAR5Gy/wFV55T/wHr+KgHuCKNsVY
ZI2JiU7VVIVlp7OL+1mllIr7cb8Ie++PQwQYITnnM24NWxoBgsQYm/l+gk699bMsRA4h1JTSPsg0Xert
em/mGwh3vW1Z7MvIABSWqXG3+iZHAEw1m4wD49oVANgVOL/VeSgeDAiX1mpWeKy9BIQiI+OxWQF77tG5
2Fc729BmeElf/3lNhORe+oecewDObEqX49RqCgAAAABJRU5ErkJggg==
</value>
</data>
<data name="ToolbarUndoButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@ -352,17 +389,6 @@ ufo
4BJN+IjGo5O8ZJndGVhKxpjWWts551aih0fre+0BLaVchRAezPB2NXSSV/gVwXGYPJiVUt6ns1ghCDjn
UQG86w3FToVgDcWCWS9Fvi/Ao0RVAcwUjwpyhzmf4n8BFApS5HZRwRuONGMbrIJ1JIN8O2QAAAAASUVO
RK5CYII=
</value>
</data>
<data name="ToolbarCameraModeButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEvSURBVDhP3dK/K0dRGMfxKxRJopCSEkLya/guUhQRmQwG
WfwIkYySgYUSKUKJlOK/MBoMFMofYLUIsfJ+f3NuF3+A8tRree5zP/fcc070f6oHT/jAPTqQj6WvXvCM
TZQgG3H58gFGcYVLtGIN15jBNDbwiGNUIg4pQx8GsQuHhrCDW8yjHyns4Q0DcCXpykM5bFzgHGPYxw1G
UIVMtMHfWUUj4nIg/KurGIYrSAZYOXDGlbhXcZlegUO8Yxzb+BlQAwNW0G0jVAYK0AwHtnCEOyQDZvGC
ObTbKIIvLMA9WIYDizhFMsDjfsAZptCA9JcdfoVBvryOSbgCe4HPTuCz+BQMKEUvJmCy96ET1ehCuAf2
5ZF+uwdZKEYtmuBGFSIXhtejBe5PHX7dxL+qKPoEppRHcXOtiDsAAAAASUVORK5CYII=
</value>
</data>
<data name="ToolbarCameraPerspectiveButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
@ -400,41 +426,15 @@ ufo
QdQiTqrAWNICd7gPnUj+xBKaU9dxfhTkjwV/FxU+AbsiGnc46OYIAAAAAElFTkSuQmCC
</value>
</data>
<data name="ToolbarSnapButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<data name="ToolbarCameraModeButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAACtSURBVDhPrZBBEsIgEAR5Gy/wFV55T/wHr+KgHuCKNsVY
ZI2JiU7VVIVlp7OL+1mllIr7cb8Ie++PQwQYITnnM24NWxoBgsQYm/l+gk699bMsRA4h1JTSPsg0Xert
em/mGwh3vW1Z7MvIABSWqXG3+iZHAEw1m4wD49oVANgVOL/VeSgeDAiX1mpWeKy9BIQiI+OxWQF77tG5
2Fc729BmeElf/3lNhORe+oecewDObEqX49RqCgAAAABJRU5ErkJggg==
</value>
</data>
<data name="ToolbarSnapToGroundButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAzElEQVQ4T62SwQ3DIAxFMxsT
dIpcmSfdg6lyaHuAq8t3/BFxEVKbWnoVcfxfIM0iIpdYSiliDAfAtBAOIUwl06Kgl1RW4zsBJSklBeuc
881Gx4WneAmJMcq+7yrxxyIUNMm23eX5eClYQ4J7Pkj0pw6s2DIEDBP07DjtnfxFUNe6M15oA9v1R4DA
hnWOYfabAC8KLwwS3PRgGHMMs2f/xVGQoIkt27Y/JP7aokd159MPqQ6dntiDfsWSVp3AMwyDU00EgMEW
Bi30G7K8AZnoeUPBv6fIAAAAAElFTkSuQmCC
</value>
</data>
<data name="ToolbarSnapToGridButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAB+SURBVDhPvZBBCsAgDAR9my/oT3yP/aKHtge9WlaSkuYg
QdIuDMgmWY3BXa21LiHbLgzFGAf/B9RaNx0Aj8pzobGU0lNKTwDO8KYhuIXBQM57P49rgDM82aN57Qx4
mJE1jV8As7QCa/kTpdCIVPlE8zBLB5Btl0uAhOyvFMINKNheKPQq5RMAAAAASUVORK5CYII=
</value>
</data>
<data name="ToolbarSnapToGroundGridButton.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
<value>
iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8
YQUAAAAZdEVYdFNvZnR3YXJlAEFkb2JlIEltYWdlUmVhZHlxyWU8AAAAy0lEQVQ4T6WR0Q3CMAxEM1sW
6hhI2aDs0an6AXy0vyZ39SFjCgJq6UmJe3dx0mJmhyjruprDRtgTij4VRLXWR4j26n0dEEKstUZ+DlDI
NE0E62VZTi7dry56CRHDMNg8zwzBJHvQLGAax7NdLzeCNUKiJsMA3BcjI0BmgR6+QaPJxKGApwkExs1X
iOKI+nyIvih4KDwYQuJJwo08MPb8X2yFEDQxMohiGfLerVv5NLwvwDqbornjTi8FZFHspb47vRSQoPBN
bzP9j5U7+VKHq71UybkAAAAASUVORK5CYII=
YQUAAAAJcEhZcwAADsMAAA7DAcdvqGQAAAEvSURBVDhP3dK/K0dRGMfxKxRJopCSEkLya/guUhQRmQwG
WfwIkYySgYUSKUKJlOK/MBoMFMofYLUIsfJ+f3NuF3+A8tRree5zP/fcc070f6oHT/jAPTqQj6WvXvCM
TZQgG3H58gFGcYVLtGIN15jBNDbwiGNUIg4pQx8GsQuHhrCDW8yjHyns4Q0DcCXpykM5bFzgHGPYxw1G
UIVMtMHfWUUj4nIg/KurGIYrSAZYOXDGlbhXcZlegUO8Yxzb+BlQAwNW0G0jVAYK0AwHtnCEOyQDZvGC
ObTbKIIvLMA9WIYDizhFMsDjfsAZptCA9JcdfoVBvryOSbgCe4HPTuCz+BQMKEUvJmCy96ET1ehCuAf2
5ZF+uwdZKEYtmuBGFSIXhtejBe5PHX7dxL+qKPoEppRHcXOtiDsAAAAASUVORK5CYII=
</value>
</data>
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">