개정판 702651f1
Fix: CircleControl에서 AxisLock이 설정되어 있으면 혹은 Shift Key를 누르면 크기를 정비율로 수정되도록 수정
Change-Id: Id98c151724ffc492e20bbe960f8e46e8ab48b6e1
MarkupToPDF/Controls/Shape/CircleControl.cs | ||
---|---|---|
489 | 489 |
{ |
490 | 490 |
newPointSet.Add(_pt); |
491 | 491 |
} |
492 |
var ReverseP = (i + newPointSet.Count() / 2) % newPointSet.Count(); |
|
493 |
var PreviousP = (i + (newPointSet.Count() - 1)) % newPointSet.Count(); |
|
494 |
var NextP = (i + 1) % newPointSet.Count(); |
|
495 |
var distance = MathSet.DistanceTo(newPointSet[ReverseP], newPointSet[i]); |
|
496 |
var PreviousV = MathSet.GetNormVectorBetween(newPointSet[ReverseP], newPointSet[PreviousP]); |
|
497 |
var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, newPointSet[i].X - newPointSet[ReverseP].X, |
|
498 |
newPointSet[i].Y - newPointSet[ReverseP].Y); |
|
499 |
newPointSet[PreviousP] = new Point(newPointSet[ReverseP].X + PreviousV.X * l, newPointSet[ReverseP].Y |
|
500 |
+ PreviousV.Y * l); |
|
501 |
|
|
502 |
var NextV = MathSet.GetNormVectorBetween(newPointSet[ReverseP], newPointSet[NextP]); |
|
503 |
l = MathSet.DotProduct(NextV.X, NextV.Y, newPointSet[i].X - newPointSet[ReverseP].X, newPointSet[i].Y |
|
504 |
- newPointSet[ReverseP].Y); |
|
505 |
newPointSet[NextP] = new Point(newPointSet[ReverseP].X + NextV.X * l, newPointSet[ReverseP].Y + NextV.Y * l); |
|
506 |
|
|
507 |
path.PointSet = newPointSet; |
|
492 |
var OppositeP = (i + newPointSet.Count / 2) % newPointSet.Count; |
|
493 |
var PreviousP = (i + (newPointSet.Count - 1)) % newPointSet.Count; |
|
494 |
var NextP = (i + 1) % newPointSet.Count; |
|
495 |
if (bAxisLocked) |
|
496 |
{ |
|
497 |
double _dx = path.PointSet[i].X - path.PointSet[OppositeP].X; |
|
498 |
double _dy = path.PointSet[i].Y - path.PointSet[OppositeP].Y; |
|
499 |
double distance = Math.Max(Math.Abs(_dx), Math.Abs(_dy)); |
|
500 |
|
|
501 |
var PreviousV = path.PointSet[PreviousP] - path.PointSet[OppositeP]; |
|
502 |
PreviousV.Normalize(); |
|
503 |
path.PointSet[PreviousP] = path.PointSet[OppositeP] + PreviousV * distance; |
|
504 |
|
|
505 |
var NextV = path.PointSet[NextP] - path.PointSet[OppositeP]; |
|
506 |
NextV.Normalize(); |
|
507 |
path.PointSet[NextP] = path.PointSet[OppositeP] + NextV * distance; |
|
508 |
|
|
509 |
path.PointSet[i] = path.PointSet[OppositeP] + PreviousV * distance + NextV * distance; |
|
510 |
} |
|
511 |
else |
|
512 |
{ |
|
513 |
var PreviousV = MathSet.GetNormVectorBetween(newPointSet[OppositeP], newPointSet[PreviousP]); |
|
514 |
var l = MathSet.DotProduct(PreviousV.X, PreviousV.Y, newPointSet[i].X - newPointSet[OppositeP].X, |
|
515 |
newPointSet[i].Y - newPointSet[OppositeP].Y); |
|
516 |
newPointSet[PreviousP] = new Point(newPointSet[OppositeP].X + PreviousV.X * l, newPointSet[OppositeP].Y |
|
517 |
+ PreviousV.Y * l); |
|
518 |
|
|
519 |
var NextV = MathSet.GetNormVectorBetween(newPointSet[OppositeP], newPointSet[NextP]); |
|
520 |
l = MathSet.DotProduct(NextV.X, NextV.Y, newPointSet[i].X - newPointSet[OppositeP].X, newPointSet[i].Y |
|
521 |
- newPointSet[OppositeP].Y); |
|
522 |
newPointSet[NextP] = new Point(newPointSet[OppositeP].X + NextV.X * l, newPointSet[OppositeP].Y + NextV.Y * l); |
|
523 |
|
|
524 |
path.PointSet = newPointSet; |
|
525 |
} |
|
526 |
|
|
508 | 527 |
this.UpdateControl(); |
509 | 528 |
} |
510 | 529 |
|
내보내기 Unified diff