أكثر

ارسم خطًا في طريقة عرض التخطيط باستخدام ArcObjects


أحاول رسم خط في عرض التخطيط على ArcMap باستخدام C # و ArcObjects. أنا أعمل على هذه العينة. لكن لدي بعض المشاكل.

1.) هذا الرمز لرسم خط في عرض البيانات ولكني بحاجة لرسم خط في عرض التخطيط (في إطار المربع). أريد أن أرى خصائص عنصر السطر عندما حددت البند الخاص بي.

2.) عند النقر فوق هذا الخط في ArcMap ، يصبح غير مرئي ... لماذا يحدث هذا؟

هذا هو نموذج التعليمات البرمجية:

تجاوز محمي باطل OnClick () {// رسم نقطة متعددة الخطوط p1 = new PointClass () ؛ p1.X = 10 ؛ p1.Y = 10 ؛ IPoint p2 = new PointClass () ؛ p2.X = 20 ؛ p2.Y = 20 ؛ IPoint p3 = new PointClass () ؛ p3.X = 35 ؛ p3.Y = 15 ؛ IPoint p4 = new PointClass () ؛ p4.X = 40 ؛ ص 4 ص = 17 ؛ IPoint p5 = new PointClass () ؛ p5.x = 50 ؛ p5.Y = 19 ؛ IPoint p6 = new PointClass () ؛ p6.x = 60 ؛ p6.Y = 18 ؛ متعدد الخطوط IPolyline = جديد PolylineClass () ؛ IPointCollection pointColl = متعدد الخطوط مثل IPointCollection ؛ pointColl.AddPoint (p1) ؛ pointColl.AddPoint (p2) ؛ pointColl.AddPoint (p3) ؛ pointColl.AddPoint (p4) ؛ pointColl.AddPoint (p5) ؛ pointColl.AddPoint (ص 6) ؛ IMxDocument mxdoc = ArcMap.Application.Document كـ IMxDocument ؛ IActiveView activeView = mxdoc.ActiveView ؛ IScreenDisplay screenDisp = activeView.ScreenDisplay ؛ short screenCache = Convert.ToInt16 (esriScreenCache.esriNoScreenCache) ؛ screenDisp.StartDrawing (screenDisp.hDC ، screenCache) ؛ IRgbColor color = new RgbColorClass () ؛ اللون الأحمر = 0 ؛ اللون.أزرق = 0 ؛ اللون الأخضر = 0 ؛ ISimpleLineSymbol simpleLineSymbol = جديد SimpleLineSymbolClass () ؛ simpleLineSymbol.Color = اللون ؛ SimpleLineSymbol.Width = 1 ؛ screenDisp.SetSymbol (simpleLineSymbol as ISymbol) ؛ screenDisp.DrawPolyline (متعدد الخطوط) ؛ screenDisp.FinishDrawing () ، }

سبب فشل هذا الرمز هو أنك تكتب إلى ذاكرة التخزين المؤقت للشاشة ، والتي تحصل عليها من ملفعرض نشطويمكن أن يكون هذاخريطةأوتخطيط الصفحة؛ عليك أن تكون أكثر صراحة.

بمجرد أن يكون هناك أي نوع من تحديث الشاشة ، تفقد الرسم الذي رسمته. إذا كنت تريد أن تستمر الرسومات ، فعليك أن تكون كذلك التخزين في حاوية رسومات PageLayout. يوضح لك رمز VBA التالي كيفية القيام بذلك باستخدام نقاط المثال الخاصة بك.

رسم خط فرعي عام () 'إنشاء شكل متعدد الخطوط خافت p1 كمجموعة IPoint p1 = نقطة جديدة p1.X = 10 p1.Y = 10 خافت p2 كمجموعة IPoint p2 = نقطة جديدة p2.X = 20 p2.Y = 20 خافت p3 As تعيين IPoint p3 = نقطة جديدة p3.X = 30 p3.Y = 15 خافت p4 مثل تعيين IPoint p4 = نقطة جديدة p4.X = 40 p4.Y = 15 خافت p5 كمجموعة IPoint p5 = نقطة جديدة p5.X = 50 p5 .Y = 19 خافت p6 كمجموعة IPoint p6 = نقطة جديدة p6.X = 60 p6.Y = 18 خافت p خط بولي كخط IPolyline عيّن pPolyline = خافت متعدد الخطوط جديد pPointColl كـ IPointCollection Set pPointColl = pPolyline pPointColl.AddPoint p1 pPointColl.AddPoint p2 pPointColl. AddPoint p3 pPointColl.AddPoint p4 pPointColl.AddPoint p5 pPointColl.AddPoint p6 'قم بإنشاء لون خافت pColour As IRgbColor Set pColour = New RgbColor With pColour .Red = 0. Blue = 0 .Green = 0 End With' إنشاء رمز خط Dimbol pSimpleLineSym كما ISimpleLineSymbol Set pSimpleLineSymbol = New SimpleLineSymbol مع pSimpleLineSymbol .Width = 1 .Style = esriSLSSolid .Color = pColour End With 'إنشاء عنصر خط ، هذا هو الرسم الذي ث تتم إضافة سوء إلى الحاوية Dim pElement As IElement Set pElement = New LineElement pElement.Geometry = pPolyline Dim pLineElement كـ ILineElement Set pLineElement = pElement pLineElement.Symbol = pSimpleLineSymbol 'احصل على MXD Dim pMXD كمقبض IMxD هذا على pMXD تخطيط الصفحة Dim pPageLayout As IPageLayout Set pPageLayout = pMXD.PageLayout 'احصل على حاوية الرسومات الخاصة بـ PAGELAYOUT Dim pGraphicsContainer As IGraphicsContainer Set pGraphicsContainer = pPageLayout' إضافة عنصر وتحديث pGraphicsContainer.AddElementActive pEctive، 0 DimElementActive pEctive تحديث End Sub

ملاحظة: يتم تفسير الإحداثيات على أنها إحداثيات صفحة ، وليست جغرافية ، لذا فإن الخط الذي يتم إنشاؤه أكبر بكثير من صفحتك.


هذا هو رمز c # للحل الخاص بك:

تجاوز محمي باطل OnClick () {// إنشاء نقطة متعددة الخطوط p1 = new PointClass () ؛ p1.X = 10 ؛ p1.Y = 10 ؛ IPoint p2 = new PointClass () ؛ p2.X = 20 ؛ p2.Y = 20 ؛ IPoint p3 = new PointClass () ؛ p3.X = 35 ؛ p3.Y = 15 ؛ IPoint p4 = new PointClass () ؛ p4.X = 40 ؛ ص 4 ص = 17 ؛ IPoint p5 = new PointClass () ؛ p5.x = 50 ؛ p5.Y = 19 ؛ IPoint p6 = new PointClass () ؛ p6.x = 60 ؛ p6.Y = 18 ؛ متعدد الخطوط IPolyline = جديد PolylineClass () ؛ IPointCollection pointColl = متعدد الخطوط مثل IPointCollection ؛ pointColl.AddPoint (p1) ؛ pointColl.AddPoint (p2) ؛ pointColl.AddPoint (p3) ؛ pointColl.AddPoint (p4) ؛ pointColl.AddPoint (p5) ؛ pointColl.AddPoint (ص 6) ؛ // إنشاء لون IRgbColor color = new RgbColorClass () ؛ اللون الأحمر = 0 ؛ اللون.أزرق = 0 ؛ اللون الأخضر = 0 ؛ // إنشاء رمز خط ISimpleLineSymbol simpleLineSymbol = new SimpleLineSymbolClass () ؛ simpleLineSymbol.Color = اللون ؛ SimpleLineSymbol.Width = 1 ؛ // إنشاء عنصر سطر ، هذا هو الرسم الذي سيتم إضافته إلى حاوية IElement element = new LineElement () ؛ element.Geometry = متعدد الخطوط ؛ عنصر سطر العنصر ؛ lineElement = عنصر كـ ILineElement ؛ lineElement.Symbol = simpleLineSymbol ؛ // احصل على Mxd IMxDocument mxdoc = ArcMap.Application.Document as IMxDocument ؛ // احصل على المقبض على تخطيط الصفحة IPageLayout pageLayout = new PageLayout ()؛ pageLayout = mxdoc.PageLayout ؛ // احصل على حاوية الرسومات الخاصة بـ PageLayout IGraphicsContainer graphicsContainer = pageLayout as IGraphicsContainer؛ // إضافة عنصر تحديث الرسوماتContainer.AddElement (عنصر ، 0) ؛ IActiveView activeView = pageLayout مثل IActiveView ؛ activeView.Refresh () ، }


شاهد الفيديو: 1-9 طريقة رسم الشوارع من نوع خط ومساحة باستخدام Buffer الأداة ArcGIS ArcMap (شهر اكتوبر 2021).