-
Notifications
You must be signed in to change notification settings - Fork 0
/
kPunto.cs
72 lines (68 loc) · 2.73 KB
/
kPunto.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
using Wew.Control;
using Wew.Media;
using CultInf = System.Globalization.CultureInfo;
namespace DirectPaint3D
{
public class kPunto : cDockControl
{ public struct PartePunto
{ public cModelo Parte;
public int Punto;
public Vector PosAbs;
}
Wew.cList<PartePunto> ml_ppPuntos;
uVector uvePos; cLabel lblCantSel; cContainer cntLayout;
// ** Ctor/dtor
public kPunto()
{ cStackPanel spnCli; uPropertyGroup grp; uPropertySubgroup sgr;
IsChildForm = false; Text = "Point"; Width = 373; Height = 463; HideOnClose = true; Dock = eDirection.Left; BackColor = eBrush.White;
spnCli = new cStackPanel() { Direction = eDirection.Bottom, RightMargin = 1, AutoSize = eAutoSize.Height};
grp = new uPropertyGroup() { Text = "Location"};
uvePos = new uVector() { Text = "Location"}; uvePos.ValueChanged += uvePos_ValueChanged;
grp.AddControl(uvePos);
sgr = new uPropertySubgroup() { Text = "Selected points"};
lblCantSel = new cLabel() { BorderStyle = eBorderStyle.Default, AutoSize = eAutoSize.None
, TextAlignment = eTextAlignment.Center, Width = 80};
sgr.AddControl(lblCantSel);
grp.AddControl(sgr);
spnCli.AddControl(grp);
cntLayout = new cContainer() { RightMargin = 0, AutoSize = eAutoSize.Height};
spnCli.AddControl(cntLayout);
AddControl(spnCli);
}
// ** Props
public Wew.cList<PartePunto> PuntosSel // Muestra los vals del primer punto sel
{ get { return ml_ppPuntos;}
set
{ PartePunto pp; Vector v; cControl ctl;
cntLayout.Controls.Clear();
if ((value?.Count).GetValueOrDefault() != 0) // Hay puntos
{ pp = value[0];
v = pp.Parte.getPositions(pp.Punto); uvePos.Value = v;
ctl = pp.Parte.EditorVert.Carga(pp.Parte, pp.Punto); ctl.LeftMargin = ctl.RightMargin = 0;
cntLayout.Controls.Add(ctl);
lblCantSel.Text = value.Count.ToString(CultInf.CurrentCulture);
} else // Sin puntos
{ uvePos.Value = Vector.Zero; lblCantSel.Text = "0";
}
ml_ppPuntos = value;
}
}
// ** Mets
public void Refresca() { PuntosSel = PuntosSel;}
public void AplicaPos(Vector vPos)
{ cModelo mdl = null; Vector vPosLocal = default(Vector);
foreach (PartePunto pp in ml_ppPuntos) // Aplicar a toda la sel
{ if (pp.Parte != mdl) // ** Cambio de parte: quitar world
{ mdl = pp.Parte; Matrix4x4 m44 = mdl.Matrix; vPosLocal = Vector.FromWorld(vPos, ref m44);
}
pp.Parte.ActualizaPunto(pp.Punto, vPosLocal);
}
mMod.MainWnd.Changed = true; Refresca();
}
private void uvePos_ValueChanged(object sender)
{ if ((ml_ppPuntos?.Count).GetValueOrDefault() == 0) return;
foreach (PartePunto pp in ml_ppPuntos) pp.Parte.ActualizaPunto(pp.Punto, uvePos.Value); // Aplicar a toda la sel
mMod.MainWnd.Changed = true;
}
}
}