# Draw curve line issue

**URL:** <https://community.thinkgeo.com/t/draw-curve-line-issue/2488>\
**Category:** WinForms\
**Created:** [December 8, 2014, 4:39am UTC](https://community.thinkgeo.com/t/draw-curve-line-issue/2488 "2014-12-08T04:39:54Z")\
**Posts on this page:** 16\
**Page:** 1

<div class="post-metadata">

**Author:** ![Goral](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/g/4491bb/32.png) [@Goral](https://community.thinkgeo.com/u/Goral)\
**Post date:** [December 8, 2014, 4:39am UTC](https://community.thinkgeo.com/t/draw-curve-line-issue/2488/1 "2014-12-08T04:39:54Z")

</div>

Hi,  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;I&nbsp;want&nbsp;to&nbsp;draw&nbsp;curve&nbsp;line.&nbsp;I&nbsp;have&nbsp;from&nbsp;-to&nbsp;point,&nbsp;radius&nbsp;in&nbsp;Nautical&nbsp;mile,&nbsp;center&nbsp;point.&nbsp;I&nbsp;have&nbsp;tried&nbsp;with&nbsp;draw&nbsp;arc&nbsp;sample&nbsp;but&nbsp;it&nbsp;did&nbsp;not&nbsp;work&nbsp;for&nbsp;me.&nbsp;Please&nbsp;suggest&nbsp;how&nbsp;to&nbsp;draw&nbsp;curve&nbsp;line&nbsp;using&nbsp;all&nbsp;these&nbsp;parameters.  
  
  
  
Thanks,  
  
Goral  
  
&nbsp;&nbsp;&nbsp;&nbsp;

---

<div class="post-metadata">

**Author:** ![Ethan](https://community.thinkgeo.com/user_avatar/community.thinkgeo.com/ethan/32/19964_2.png) [@Ethan](https://community.thinkgeo.com/u/Ethan)\
**Post date:** [December 10, 2014, 2:41am UTC](https://community.thinkgeo.com/t/draw-curve-line-issue/2488/2 "2014-12-10T02:41:56Z")

</div>

Hi&nbsp;Goral,&nbsp;  
&nbsp;&nbsp;  
&nbsp;I&nbsp;think&nbsp;that’s&nbsp;a&nbsp;little&nbsp;complex.&nbsp;&nbsp;  
&nbsp;&nbsp;  
&nbsp;1.&nbsp;The&nbsp;hard&nbsp;part&nbsp;is,&nbsp;you&nbsp;should&nbsp;want&nbsp;to&nbsp;calculate&nbsp;a&nbsp;circle&nbsp;based&nbsp;on&nbsp;your&nbsp;parameters.&nbsp;  
&nbsp;&nbsp;  
&nbsp;2.&nbsp;Then&nbsp;you&nbsp;need&nbsp;to&nbsp;know&nbsp;the&nbsp;start&nbsp;point&nbsp;of&nbsp;the&nbsp;curve&nbsp;and&nbsp;the&nbsp;end&nbsp;point&nbsp;of&nbsp;it.&nbsp;  
&nbsp;&nbsp;  
&nbsp;3.&nbsp;Loop&nbsp;the&nbsp;outer&nbsp;ring&nbsp;(it’s&nbsp;a&nbsp;line&nbsp;end&nbsp;to&nbsp;end),&nbsp;find&nbsp;your&nbsp;start&nbsp;point&nbsp;and&nbsp;end&nbsp;point,&nbsp;then&nbsp;you&nbsp;can&nbsp;get&nbsp;all&nbsp;vertexes&nbsp;for&nbsp;your&nbsp;curve.&nbsp;Or&nbsp;you&nbsp;can&nbsp;try&nbsp;our&nbsp;GetLineOnALine&nbsp;function&nbsp;on&nbsp;the&nbsp;LineShape&nbsp;class.&nbsp;  
&nbsp;&nbsp;  
&nbsp;Wish&nbsp;that’s&nbsp;helpful.&nbsp;  
&nbsp;&nbsp;  
&nbsp;Regards,&nbsp;  
&nbsp;&nbsp;  
&nbsp;Don

---

<div class="post-metadata">

**Author:** ![Goral](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/g/4491bb/32.png) [@Goral](https://community.thinkgeo.com/u/Goral)\
**Post date:** [December 12, 2014, 5:54am UTC](https://community.thinkgeo.com/t/draw-curve-line-issue/2488/3 "2014-12-12T05:54:23Z")

</div>

Hi,  
  
  
  
&nbsp;&nbsp;&nbsp;Thanks&nbsp;for&nbsp;reply.&nbsp;Can&nbsp;you&nbsp;please&nbsp;explain&nbsp;GetLineOnLine&nbsp;function&nbsp;in&nbsp;detail&nbsp;or&nbsp;provide&nbsp;some&nbsp;example?  
  
  
  
Thanks&nbsp;&&nbsp;Regards,  
  
Goral

---

<div class="post-metadata">

**Author:** ![Johnny](https://community.thinkgeo.com/user_avatar/community.thinkgeo.com/johnny/32/19044_2.png) [@Johnny](https://community.thinkgeo.com/u/Johnny)\
**Post date:** [December 13, 2014, 7:12am UTC](https://community.thinkgeo.com/t/draw-curve-line-issue/2488/4 "2014-12-13T07:12:18Z")

</div>

Hi&nbsp;Goral,  
  
  
  
I&nbsp;think&nbsp;you&nbsp;can&nbsp;create&nbsp;a&nbsp;custom&nbsp;CurvedLineShape&nbsp;which&nbsp;can&nbsp;save&nbsp;to/load&nbsp;from&nbsp;a&nbsp;WKT.&nbsp;Here&nbsp;is&nbsp;a&nbsp;simple&nbsp;example&nbsp;how&nbsp;to&nbsp;do&nbsp;it&nbsp;by&nbsp;creating&nbsp;a&nbsp;new&nbsp;shape&nbsp;from&nbsp;BaseShape.&nbsp;It&nbsp;should&nbsp;work&nbsp;for&nbsp;you.  
  
  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;The&nbsp;CurvedLineShape&nbsp;Class  
&nbsp;&nbsp;&nbsp;&nbsp;class&nbsp;CurvedLineShape&nbsp;:&nbsp;BaseShape  
&nbsp;&nbsp;&nbsp;&nbsp;{  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;PointShape&nbsp;centerPoint;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;PointShape&nbsp;startPoint;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;double&nbsp;angle;  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;CurvedLineShape()  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;:&nbsp;this(new&nbsp;PointShape(0,&nbsp;0),&nbsp;new&nbsp;PointShape(0,&nbsp;0),&nbsp;0)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{&nbsp;}  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;CurvedLineShape(PointShape&nbsp;centerPoint,&nbsp;PointShape&nbsp;startPoint,&nbsp;int&nbsp;angle)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.centerPoint&nbsp;=&nbsp;centerPoint;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.startPoint&nbsp;=&nbsp;startPoint;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.angle&nbsp;=&nbsp;angle;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;CurvedLineShape(string&nbsp;wellKnownText)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(wellKnownText&nbsp;==&nbsp;null&nbsp;||&nbsp;!wellKnownText.StartsWith("CurvedLineShape"))  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;throw&nbsp;new&nbsp;ArgumentException("The&nbsp;wellKnownText&nbsp;is&nbsp;not&nbsp;supported");  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LoadFromCustomWellKnownData(wellKnownText);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;override&nbsp;string&nbsp;GetWellKnownTextCore()  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LineShape&nbsp;line&nbsp;=&nbsp;new&nbsp;LineShape();  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line.Vertices.Add(new&nbsp;Vertex(startPoint));  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;radius&nbsp;=&nbsp;Math.Sqrt(Math.Pow(startPoint.X&nbsp;-&nbsp;centerPoint.X,&nbsp;2)&nbsp;+&nbsp;Math.Pow(startPoint.Y&nbsp;-&nbsp;centerPoint.Y,&nbsp;2));  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;startAngle&nbsp;=&nbsp;Math.Asin(startPoint.Y&nbsp;/&nbsp;radius);  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;1;&nbsp;i&nbsp;\<=&nbsp;angle;&nbsp;i++)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;x&nbsp;=&nbsp;Math.Cos(Math.PI&nbsp;/&nbsp;180&nbsp;\*&nbsp;i&nbsp;+&nbsp;startAngle)&nbsp;\*&nbsp;radius&nbsp;+&nbsp;centerPoint.X;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;y&nbsp;=&nbsp;Math.Sin(Math.PI&nbsp;/&nbsp;180&nbsp;\*&nbsp;i&nbsp;+&nbsp;startAngle)&nbsp;\*&nbsp;radius&nbsp;+&nbsp;centerPoint.Y;  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;line.Vertices.Add(new&nbsp;Vertex(x,&nbsp;y));  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;line.GetWellKnownText();  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;string&nbsp;GetCustomWellKnownText()  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;StringBuilder&nbsp;sb&nbsp;=&nbsp;new&nbsp;StringBuilder();  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append("CurvedLineShape(");  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(centerPoint.X&nbsp;+&nbsp;"&nbsp;"&nbsp;+&nbsp;centerPoint.Y);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(",");  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(startPoint.X&nbsp;+&nbsp;"&nbsp;"&nbsp;+&nbsp;startPoint.Y);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(",");  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(angle);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sb.Append(")");  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;sb.ToString();  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;void&nbsp;LoadFromCustomWellKnownData(string&nbsp;wellKnownText)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string&nbsp;wkt&nbsp;=&nbsp;wellKnownText.Replace("CurvedLineShape(",&nbsp;"");  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;wkt&nbsp;=&nbsp;wkt.Remove(wkt.Length&nbsp;-&nbsp;1);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string[]&nbsp;wkts&nbsp;=&nbsp;wkt.Split(‘,’);  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;string[]&nbsp;data&nbsp;=&nbsp;wkts[0].Split(’&nbsp;‘);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.centerPoint&nbsp;=&nbsp;new&nbsp;PointShape(Double.Parse(data[0]),&nbsp;Double.Parse(data[1]));  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;data&nbsp;=&nbsp;wkts[1].Split(’&nbsp;');  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.startPoint&nbsp;=&nbsp;new&nbsp;PointShape(Double.Parse(data[0]),&nbsp;Double.Parse(data[1]));  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;this.angle&nbsp;=&nbsp;Double.Parse(wkts[2]);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;protected&nbsp;override&nbsp;void&nbsp;LoadFromWellKnownDataCore(string&nbsp;wellKnownText)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
&nbsp;&nbsp;&nbsp;&nbsp;}  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//&nbsp;The&nbsp;references.&nbsp;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;private&nbsp;void&nbsp;WpfMap\_Loaded(object&nbsp;sender,&nbsp;RoutedEventArgs&nbsp;e)  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;{  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;InMemoryFeatureLayer&nbsp;inm&nbsp;=&nbsp;new&nbsp;InMemoryFeatureLayer();  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inm.InternalFeatures.Add(new&nbsp;CurvedLineShape("CurvedLineShape(0&nbsp;0,10&nbsp;10,&nbsp;90)").GetFeature());  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inm.ZoomLevelSet.ZoomLevel01.DefaultLineStyle&nbsp;=&nbsp;LineStyles.Canal1;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;inm.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel&nbsp;=&nbsp;ApplyUntilZoomLevel.Level20;  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;LayerOverlay&nbsp;overlay&nbsp;=&nbsp;new&nbsp;LayerOverlay();  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;overlay.Layers.Add(inm);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map1.MapUnit&nbsp;=&nbsp;GeographyUnit.DecimalDegree;  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map1.CurrentExtent&nbsp;=&nbsp;new&nbsp;RectangleShape(-155.733,&nbsp;95.60,&nbsp;104.42,&nbsp;-81.9);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map1.Overlays.Add(overlay);  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Map1.Refresh();  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}  
  
  
Here&nbsp;is&nbsp;what&nbsp;looks&nbsp;like:

 ![](https://community.thinkgeo.com/uploads/default/original/2X/4/487df466f8a24a4d3d711a8d1c161ba48e4015d1.png)  
  
  
  
Thanks,  
  
Johnny

---

<div class="post-metadata">

**Author:** ![Goral](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/g/4491bb/32.png) [@Goral](https://community.thinkgeo.com/u/Goral)\
**Post date:** [December 14, 2014, 11:34pm UTC](https://community.thinkgeo.com/t/draw-curve-line-issue/2488/5 "2014-12-14T23:34:14Z")

</div>

Hi,  
  
&nbsp;&nbsp;  
  
&nbsp;&nbsp;&nbsp;&nbsp;Given&nbsp;curveline&nbsp;shape&nbsp;example&nbsp;throw&nbsp;below&nbsp;error.  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Error :&nbsp;‘test.CurvedLineShape’&nbsp;does&nbsp;not&nbsp;implement&nbsp;inherited&nbsp;abstract&nbsp;member&nbsp;'ThinkGeo.MapSuite.Core.BaseShape.GetWellKnownTextCore(ThinkGeo.MapSuite.Core.RingOrder)  
  
  
  
&nbsp;  
  
&nbsp;&nbsp;&nbsp;Please&nbsp;throw&nbsp;light&nbsp;on&nbsp;problem.  
  
  
  
  
  
Thanks,  
  
Goral

---

<div class="post-metadata">

**Author:** ![Johnny](https://community.thinkgeo.com/user_avatar/community.thinkgeo.com/johnny/32/19044_2.png) [@Johnny](https://community.thinkgeo.com/u/Johnny)\
**Post date:** [December 16, 2014, 12:09am UTC](https://community.thinkgeo.com/t/draw-curve-line-issue/2488/6 "2014-12-16T00:09:01Z")

</div>

Hi&nbsp;Goral,  
  
  
  
Please&nbsp;change&nbsp;the&nbsp;method&nbsp;in&nbsp;attached&nbsp;code&nbsp;shown&nbsp;as&nbsp;following:  
  
  
  
&nbsp;&nbsp;protected&nbsp;override&nbsp;string&nbsp;GetWellKnownTextCore()  
  
  
  
to&nbsp;  
  
&nbsp;protected&nbsp;abstract&nbsp;string&nbsp;GetWellKnownTextCore(RingOrder&nbsp;outerRingOrder)  
  
  
  
instead,&nbsp;because&nbsp;the&nbsp;code&nbsp;I&nbsp;pasted&nbsp;before&nbsp;is&nbsp;based&nbsp;on&nbsp;the&nbsp;old&nbsp;version.  
  
  
  
Thanks,  
  
Johnny

---

<div class="post-metadata">

**Author:** ![Goral](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/g/4491bb/32.png) [@Goral](https://community.thinkgeo.com/u/Goral)\
**Post date:** [December 16, 2014, 3:52am UTC](https://community.thinkgeo.com/t/draw-curve-line-issue/2488/7 "2014-12-16T03:52:31Z")

</div>

Hi,  
  
  
  
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Thanks&nbsp;for&nbsp;reply.&nbsp;I&nbsp;have&nbsp;tried&nbsp;to&nbsp;change&nbsp;accordingly&nbsp;but&nbsp;it&nbsp;is&nbsp;throwing&nbsp;some&nbsp;other&nbsp;errors.&nbsp;Is&nbsp;it&nbsp;issue&nbsp;of&nbsp;version?&nbsp;  
  
  
  
Thanks,  
  
Goral

---

<div class="post-metadata">

**Author:** ![Ethan](https://community.thinkgeo.com/user_avatar/community.thinkgeo.com/ethan/32/19964_2.png) [@Ethan](https://community.thinkgeo.com/u/Ethan)\
**Post date:** [December 17, 2014, 1:14am UTC](https://community.thinkgeo.com/t/draw-curve-line-issue/2488/8 "2014-12-17T01:14:22Z")

</div>

Hi&nbsp;Goral,&nbsp;  
&nbsp;&nbsp;  
&nbsp;This&nbsp;code&nbsp;as&nbsp;below&nbsp;should&nbsp;works&nbsp;for&nbsp;the&nbsp;latest&nbsp;version.&nbsp;  
&nbsp;&nbsp;  
&nbsp;` // The CurvedLineShape Class        class CurvedLineShape : BaseShape        {            private PointShape centerPoint;            private PointShape startPoint;            private double angle;            public CurvedLineShape()                : this(new PointShape(0, 0), new PointShape(0, 0), 0)            { }            public CurvedLineShape(PointShape centerPoint, PointShape startPoint, int angle)            {                this.centerPoint = centerPoint;                this.startPoint = startPoint;                this.angle = angle;            }            public CurvedLineShape(string wellKnownText)            {                if (wellKnownText == null || !wellKnownText.StartsWith(“CurvedLineShape”))                {                    throw new ArgumentException(“The wellKnownText is not supported”);                }                LoadFromCustomWellKnownData(wellKnownText);            }            protected override string GetWellKnownTextCore(RingOrder outerRingOrder)            {                LineShape line = new LineShape();                line.Vertices.Add(new Vertex(startPoint));                double radius = Math.Sqrt(Math.Pow(startPoint.X - centerPoint.X, 2) + Math.Pow(startPoint.Y - centerPoint.Y, 2));                double startAngle = Math.Asin(startPoint.Y / radius);                for (int i = 1; i <= angle; i++)                {                    double x = Math.Cos(Math.PI / 180 * i + startAngle) * radius + centerPoint.X;                    double y = Math.Sin(Math.PI / 180 * i + startAngle) * radius + centerPoint.Y;                    line.Vertices.Add(new Vertex(x, y));                }                return line.GetWellKnownText();            }            public string GetCustomWellKnownText()            {                StringBuilder sb = new StringBuilder();                sb.Append(“CurvedLineShape(”);                sb.Append(centerPoint.X + " " + centerPoint.Y);                sb.Append(",");                sb.Append(startPoint.X + " " + startPoint.Y);                sb.Append(",");                sb.Append(angle);                sb.Append(")");                return sb.ToString();            }            public void LoadFromCustomWellKnownData(string wellKnownText)            {                string wkt = wellKnownText.Replace(“CurvedLineShape(”, “”);                wkt = wkt.Remove(wkt.Length - 1);                string[] wkts = wkt.Split(’,’);                string[] data = wkts[0].Split(’ ‘);                this.centerPoint = new PointShape(Double.Parse(data[0]), Double.Parse(data[1]));                data = wkts[1].Split(’ ');                this.startPoint = new PointShape(Double.Parse(data[0]), Double.Parse(data[1]));                this.angle = Double.Parse(wkts[2]);            }            protected override void LoadFromWellKnownDataCore(string wellKnownText)            {            }        }        private void DisplayMap_Load(object sender, EventArgs e)        {            InMemoryFeatureLayer inm = new InMemoryFeatureLayer();            CurvedLineShape lineShape = new CurvedLineShape(“CurvedLineShape(0 0,10 10, 90)”);            string wktString = lineShape.GetWellKnownText();            BaseShape tmpBaseShape = BaseShape.CreateShapeFromWellKnownData(wktString);            Feature f = new Feature(tmpBaseShape);            inm.InternalFeatures.Add(f);            inm.ZoomLevelSet.ZoomLevel01.DefaultLineStyle = LineStyles.Canal1;            inm.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;            LayerOverlay overlay = new LayerOverlay();            overlay.Layers.Add(inm);            winformsMap1.MapUnit = GeographyUnit.DecimalDegree;            winformsMap1.CurrentExtent = new RectangleShape(-155.733, 95.60, 104.42, -81.9);            winformsMap1.Overlays.Add(overlay);            winformsMap1.Refresh();        }`&nbsp;  
&nbsp;&nbsp;  
&nbsp;Regards,&nbsp;  
&nbsp;&nbsp;  
&nbsp;Don

---

<div class="post-metadata">

**Author:** ![Goral](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/g/4491bb/32.png) [@Goral](https://community.thinkgeo.com/u/Goral)\
**Post date:** [December 18, 2014, 11:28pm UTC](https://community.thinkgeo.com/t/draw-curve-line-issue/2488/9 "2014-12-18T23:28:08Z")

</div>

Hi,  
  
  
  
&nbsp;&nbsp;&nbsp;Thanks&nbsp;for&nbsp;reply.&nbsp;I&nbsp;have&nbsp;implemented&nbsp;new&nbsp;code&nbsp;suggested&nbsp;in&nbsp;previous&nbsp;reply.&nbsp;It&nbsp;is&nbsp;also&nbsp;giving&nbsp;below&nbsp;error.  
  
  
  
&nbsp;&nbsp;&nbsp;Error ‘test.CurvedLineShape’&nbsp;does&nbsp;not&nbsp;implement&nbsp;inherited&nbsp;abstract&nbsp;member&nbsp;‘ThinkGeo.MapSuite.Core.BaseShape.GetWellKnownTextCore()’   
  
  
  
Thanks,  
  
Goral

---

<div class="post-metadata">

**Author:** ![Ethan](https://community.thinkgeo.com/user_avatar/community.thinkgeo.com/ethan/32/19964_2.png) [@Ethan](https://community.thinkgeo.com/u/Ethan)\
**Post date:** [December 22, 2014, 2:50am UTC](https://community.thinkgeo.com/t/draw-curve-line-issue/2488/10 "2014-12-22T02:50:19Z")

</div>

Hi&nbsp;Goral,&nbsp;  
&nbsp;&nbsp;  
&nbsp;What’s&nbsp;the&nbsp;version&nbsp;you&nbsp;are&nbsp;using?&nbsp;  
&nbsp;&nbsp;  
&nbsp;I&nbsp;am&nbsp;test&nbsp;with&nbsp;the&nbsp;latest&nbsp;version&nbsp;and&nbsp;it&nbsp;works&nbsp;well.&nbsp;  
&nbsp;&nbsp;  
&nbsp;Could&nbsp;you&nbsp;please&nbsp;download&nbsp;the&nbsp;latest&nbsp;version&nbsp;for&nbsp;test?&nbsp;  
&nbsp;&nbsp;  
&nbsp;Regards,&nbsp;  
&nbsp;&nbsp;  
&nbsp;Don

---

<div class="post-metadata">

**Author:** ![Goral](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/g/4491bb/32.png) [@Goral](https://community.thinkgeo.com/u/Goral)\
**Post date:** [December 23, 2014, 10:53pm UTC](https://community.thinkgeo.com/t/draw-curve-line-issue/2488/11 "2014-12-23T22:53:15Z")

</div>

Hi,  
  
  
  
&nbsp;&nbsp;&nbsp;Thanks&nbsp;for&nbsp;reply.&nbsp;Ya&nbsp;given&nbsp;code&nbsp;is&nbsp;&nbsp;working&nbsp;with&nbsp;version&nbsp;8.&nbsp;If&nbsp;as&nbsp;per&nbsp;my&nbsp;requirement&nbsp;I&nbsp;am&nbsp;changing&nbsp;angle&nbsp;and&nbsp;latlon&nbsp;point&nbsp;for&nbsp;some&nbsp;angle&nbsp;and&nbsp;some&nbsp;point&nbsp;its&nbsp;not&nbsp;working.&nbsp;I&nbsp;think&nbsp;need&nbsp;to&nbsp;change&nbsp;some&nbsp;logic&nbsp;in&nbsp;the&nbsp;code.  
  
  
  
Thanks,  
  
Goral

---

<div class="post-metadata">

**Author:** ![Ethan](https://community.thinkgeo.com/user_avatar/community.thinkgeo.com/ethan/32/19964_2.png) [@Ethan](https://community.thinkgeo.com/u/Ethan)\
**Post date:** [December 24, 2014, 12:48am UTC](https://community.thinkgeo.com/t/draw-curve-line-issue/2488/12 "2014-12-24T00:48:09Z")

</div>

Hi&nbsp;Goral,&nbsp;  
&nbsp;&nbsp;  
&nbsp;Do&nbsp;you&nbsp;meant&nbsp;when&nbsp;you&nbsp;set&nbsp;different&nbsp;centerPoint,&nbsp;startPoint&nbsp;and&nbsp;angle&nbsp;this&nbsp;code&nbsp;cannot&nbsp;draw&nbsp;correct&nbsp;new&nbsp;curve&nbsp;or&nbsp;you&nbsp;think&nbsp;the&nbsp;three&nbsp;parameters&nbsp;is&nbsp;not&nbsp;so&nbsp;well&nbsp;for&nbsp;your&nbsp;requirement?&nbsp;  
&nbsp;&nbsp;  
&nbsp;Regards,&nbsp;  
&nbsp;&nbsp;  
&nbsp;Don&nbsp;  
&nbsp;&nbsp;

---

<div class="post-metadata">

**Author:** ![Goral](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/g/4491bb/32.png) [@Goral](https://community.thinkgeo.com/u/Goral)\
**Post date:** [December 24, 2014, 1:15am UTC](https://community.thinkgeo.com/t/draw-curve-line-issue/2488/13 "2014-12-24T01:15:45Z")

</div>

HI,  
  
  
  
&nbsp;&nbsp;Thanks&nbsp;for&nbsp;reply.&nbsp;Ya&nbsp;I&nbsp;am&nbsp;finding&nbsp;workaround&nbsp;for&nbsp;my&nbsp;requirement.&nbsp;For&nbsp;that&nbsp;I&nbsp;have&nbsp;tried&nbsp;to&nbsp;input&nbsp;different&nbsp;lat&nbsp;long&nbsp;point&nbsp;with&nbsp;different&nbsp;angles.&nbsp;In&nbsp;that&nbsp;it&nbsp;draws&nbsp;for&nbsp;some&nbsp;combination.&nbsp;When&nbsp;I&nbsp;debug&nbsp;and&nbsp;checked&nbsp;I&nbsp;found&nbsp;for&nbsp;some&nbsp;combination&nbsp;function&nbsp;is&nbsp;not&nbsp;able&nbsp;to&nbsp;find&nbsp;startangle&nbsp;and&nbsp;its&nbsp;returning&nbsp;Nan&nbsp;is&nbsp;vertices.  
  
  
  
Thanks,  
  
Goral

---

<div class="post-metadata">

**Author:** ![Ethan](https://community.thinkgeo.com/user_avatar/community.thinkgeo.com/ethan/32/19964_2.png) [@Ethan](https://community.thinkgeo.com/u/Ethan)\
**Post date:** [December 25, 2014, 12:27am UTC](https://community.thinkgeo.com/t/draw-curve-line-issue/2488/14 "2014-12-25T00:27:56Z")

</div>

Hi&nbsp;Goral,&nbsp;  
&nbsp;&nbsp;  
&nbsp;The&nbsp;mainly&nbsp;logic&nbsp;is&nbsp;in&nbsp;the&nbsp;function&nbsp;GetWellKnownTextCore&nbsp;as&nbsp;below:&nbsp;  
&nbsp;&nbsp;  
&nbsp;double&nbsp;radius&nbsp;=&nbsp;Math.Sqrt(Math.Pow(startPoint.X&nbsp;-&nbsp;centerPoint.X,&nbsp;2)&nbsp;+&nbsp;Math.Pow(startPoint.Y&nbsp;-&nbsp;centerPoint.Y,&nbsp;2));&nbsp;  
&nbsp;double&nbsp;startAngle&nbsp;=&nbsp;Math.Asin(startPoint.Y&nbsp;/&nbsp;radius);&nbsp;  
&nbsp;&nbsp;  
&nbsp;So&nbsp;I&nbsp;think&nbsp;if&nbsp;you&nbsp;met&nbsp;some&nbsp;special&nbsp;scenario&nbsp;cannot&nbsp;be&nbsp;handled&nbsp;correct,&nbsp;you&nbsp;can&nbsp;add&nbsp;new&nbsp;logic&nbsp;here&nbsp;for&nbsp;handle&nbsp;them.&nbsp;  
&nbsp;&nbsp;  
&nbsp;Regards,&nbsp;  
&nbsp;&nbsp;  
&nbsp;Don

---

<div class="post-metadata">

**Author:** ![Goral](https://community.thinkgeo.com/letter_avatar_proxy/v4/letter/g/4491bb/32.png) [@Goral](https://community.thinkgeo.com/u/Goral)\
**Post date:** [December 25, 2014, 5:34am UTC](https://community.thinkgeo.com/t/draw-curve-line-issue/2488/15 "2014-12-25T05:34:12Z")

</div>

Hi,  
  
  
  
&nbsp;&nbsp;&nbsp;Thanks&nbsp;for&nbsp;reply.&nbsp;Ok&nbsp;it&nbsp;will&nbsp;helpful.  
  
  
  
Thanks,  
  
Goral

---

<div class="post-metadata">

**Author:** ![Ethan](https://community.thinkgeo.com/user_avatar/community.thinkgeo.com/ethan/32/19964_2.png) [@Ethan](https://community.thinkgeo.com/u/Ethan)\
**Post date:** [December 25, 2014, 7:13pm UTC](https://community.thinkgeo.com/t/draw-curve-line-issue/2488/16 "2014-12-25T19:13:43Z")

</div>

Hi&nbsp;Goral,&nbsp;  
&nbsp;&nbsp;  
&nbsp;I&nbsp;am&nbsp;glad&nbsp;to&nbsp;hear&nbsp;that’s&nbsp;helpful&nbsp;for&nbsp;you.&nbsp;  
&nbsp;&nbsp;  
&nbsp;Regards,&nbsp;  
&nbsp;&nbsp;  
&nbsp;Don
