/// <summary> /// Transform /// </summary> public override void TransformBy(LitMath.Matrix3 transform) { LitMath.Vector2 pnt = _center + new LitMath.Vector2(_radius, 0); _center = transform * _center; _radius = (transform * pnt - _center).length; }
/// <summary> /// Transform /// </summary> public override void TransformBy(LitMath.Matrix3 transform) { for (int i = 0; i < this.NumberOfVertices; ++i) { _vertices[i] = transform * _vertices[i]; } }
/// <summary> /// Transform /// </summary> public override void TransformBy(LitMath.Matrix3 transform) { LitMath.Vector2 refPnt = _basePoint + _direction; _basePoint = transform * _basePoint; refPnt = transform * refPnt; _direction = (refPnt - _basePoint).normalized; }
/// <summary> /// Transform /// </summary> public override void TransformBy(LitMath.Matrix3 transform) { LitMath.Vector2 spnt = transform * this.startPoint; LitMath.Vector2 epnt = transform * this.endPoint; LitMath.Vector2 mpnt = transform * this.middlePoint; _center = transform * _center; _radius = (spnt - _center).length; double sAngle = LitMath.Vector2.SignedAngleInRadian( new LitMath.Vector2(1, 0), spnt - _center); double eAngle = LitMath.Vector2.SignedAngleInRadian( new LitMath.Vector2(1, 0), epnt - _center); if (LitMath.Vector2.SignedAngle(spnt - _center, mpnt - _center) >= 0) { this.startAngle = sAngle; this.endAngle = eAngle; } else { this.startAngle = eAngle; this.endAngle = sAngle; } }
/// <summary> /// Transform /// </summary> public override void TransformBy(LitMath.Matrix3 transform) { LitMath.Vector2 pntX = _center + new LitMath.Vector2(_radiusX, 0); LitMath.Vector2 pntY = _center + new LitMath.Vector2(0, _radiusY); _center = transform * _center; _radiusX = (transform * pntX - _center).length; _radiusY = (transform * pntY - _center).length; }
/// <summary> /// 刷新结果图元 /// </summary> private void UpdateResultEntities() { LitMath.Matrix3 mirrorMatrix = MathUtils.MirrorMatrix( new LitMath.Line2(_mirrorLine.startPoint, _mirrorLine.endPoint)); _resultEntities.Clear(); foreach (Entity entity in _entities) { Entity copy = entity.Clone() as Entity; copy.TransformBy(mirrorMatrix); _resultEntities.Add(copy); } }
/// <summary> /// 镜像矩阵 /// </summary> internal static LitMath.Matrix3 MirrorMatrix(LitMath.Line2 mirrorLine) { LitMath.Vector2 lineDir = mirrorLine.direction; LitMath.Matrix3 matPos1 = LitMath.Matrix3.Translate(-mirrorLine.startPoint); double rotAngle = LitMath.Vector2.SignedAngle(lineDir, new LitMath.Vector2(1, 0)); LitMath.Matrix3 matRot1 = LitMath.Matrix3.Rotate(rotAngle); LitMath.Matrix3 mirrorMatX = new LitMath.Matrix3( 1, 0, 0, 0, -1, 0, 0, 0, 1); LitMath.Matrix3 matRot2 = LitMath.Matrix3.Rotate(-rotAngle); LitMath.Matrix3 matPos2 = LitMath.Matrix3.Translate(mirrorLine.startPoint); return(matPos2 * matRot2 * mirrorMatX * matRot1 * matPos1); }
/// <summary> /// Transform /// 前提: 变换不改变图元整体形状 /// </summary> public abstract void TransformBy(LitMath.Matrix3 transform);
/// <summary> /// Transform /// </summary> public override void TransformBy(LitMath.Matrix3 transform) { _position = transform * _position; }
/// <summary> /// Transform /// </summary> public override void TransformBy(LitMath.Matrix3 transform) { _startPoint = transform * _startPoint; _endPoint = transform * _endPoint; }
/// <summary> /// Transform /// </summary> public override void TransformBy(LitMath.Matrix3 transform) { }