public static bool Compute(LineSample first, LineSample second, out Vector3D closestFirst, out Vector3D closestSecond) { // It's really too bad. VRageMath.LineD implements this, but I believe // it only works on line segments. // Many thanks to http://geomalgorithms.com/a07-_distance.html :P var w0 = first.Point - second.Point; var a = Vector3D.Dot(first.Direction, first.Direction); var b = Vector3D.Dot(first.Direction, second.Direction); var c = Vector3D.Dot(second.Direction, second.Direction); var d = Vector3D.Dot(first.Direction, w0); var e = Vector3D.Dot(second.Direction, w0); var D = a * c - b * b; if (D > 0.0) { var sc = (b * e - c * d) / D; var tc = (a * e - b * d) / D; // Closest point on first line closestFirst = first.Point + sc * first.Direction; // Closest point on second line closestSecond = second.Point + tc * second.Direction; return(true); } // Parallel lines closestFirst = default(Vector3D); closestSecond = default(Vector3D); return(false); }
public static bool Compute(LineSample first, LineSample second, out Vector3D closestFirst, out Vector3D closestSecond) { // It's really too bad. VRageMath.LineD implements this, but I believe // it only works on line segments. // Many thanks to http://geomalgorithms.com/a07-_distance.html :P var w0 = first.Point - second.Point; var a = Vector3D.Dot(first.Direction, first.Direction); var b = Vector3D.Dot(first.Direction, second.Direction); var c = Vector3D.Dot(second.Direction, second.Direction); var d = Vector3D.Dot(first.Direction, w0); var e = Vector3D.Dot(second.Direction, w0); var D = a * c - b * b; if (D > 0.0) { var sc = (b * e - c * d) / D; var tc = (a * e - b * d) / D; // Closest point on first line closestFirst = first.Point + sc * first.Direction; // Closest point on second line closestSecond = second.Point + tc * second.Direction; return true; } // Parallel lines closestFirst = default(Vector3D); closestSecond = default(Vector3D); return false; }
public void RenderLine() { // arrange var map = LineSample.CreateMap(); const string fileName = "line.png"; // act var bitmap = new MapRenderer().RenderToBitmapStream(map.Viewport, map.Layers, map.BackColor); // aside File.WriteToGeneratedFolder(fileName, bitmap); // assert Assert.IsTrue(CompareBitmaps(File.ReadFromOriginalFolder(fileName), bitmap)); }
public void RenderLine() { // arrange using var map = LineSample.CreateMap(); var viewport = map.Extent !.Multiply(1.1).ToViewport(600); const string fileName = "line.png"; // act using var bitmap = new MapRenderer().RenderToBitmapStream(viewport, map.Layers, map.BackColor); // aside File.WriteToGeneratedTestImagesFolder(fileName, bitmap); // assert Assert.IsTrue(CompareBitmaps(File.ReadFromOriginalFolder(fileName), bitmap)); }
public void RenderLine() { // arrange var map = LineSample.CreateMap(); var viewport = new Viewport { Center = new Point(0, 0), Width = 600, Height = 400, Resolution = 63000 }; const string fileName = "line.png"; // act var bitmap = new MapRenderer().RenderToBitmapStream(viewport, map.Layers, map.BackColor); // aside File.WriteToGeneratedFolder(fileName, bitmap); // assert Assert.IsTrue(CompareBitmaps(File.ReadFromOriginalFolder(fileName), bitmap)); }
private static void Main(string[] args) { Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US"); //Paragraphs ParagraphSample.SimpleFormattedParagraphs(); ParagraphSample.ForceParagraphOnSinglePage(); ParagraphSample.ForceMultiParagraphsOnSinglePage(); ParagraphSample.TextActions(); ParagraphSample.Heading(); ////Document DocumentSample.AddCustomProperties(); DocumentSample.ReplaceText(); DocumentSample.ApplyTemplate(); DocumentSample.AppendDocument(); //Images ImageSample.AddPicture(); ImageSample.CopyPicture(); ImageSample.ModifyImage(); //Indentation/Direction/Margins MarginSample.SetDirection(); MarginSample.Indentation(); MarginSample.Margins(); //Header/Footers HeaderFooterSample.HeadersFooters(); //Tables TableSample.InsertRowAndImageTable(); TableSample.TextDirectionTable(); TableSample.CreateRowsFromTemplate(); TableSample.ColumnsWidth(); TableSample.MergeCells(); //Hyperlink HyperlinkSample.Hyperlinks(); //Section SectionSample.InsertSections(); //Lists ListSample.AddList(); //Equations EquationSample.InsertEquation(); //Bookmarks BookmarkSample.InsertBookmarks(); BookmarkSample.ReplaceText(); //Charts ChartSample.BarChart(); ChartSample.LineChart(); ChartSample.PieChart(); ChartSample.Chart3D(); //Tale of Content TableOfContentSample.InsertTableOfContent(); TableOfContentSample.InsertTableOfContentWithReference(); //Lines LineSample.InsertHorizontalLine(); //Protection ProtectionSample.AddPasswordProtection(); ProtectionSample.AddProtection(); //Parallel ParallelSample.DoParallelActions(); //Others MiscellaneousSample.CreateRecipe(); MiscellaneousSample.CompanyReport(); MiscellaneousSample.CreateInvoice(); Console.WriteLine("\nPress any key to exit."); Console.ReadKey(); }