عبادة مالك
08-05-2010, 03:59 PM
..السلام عليكم :
سؤالي :
- ما هي الآلية البرمجية التي يقوم عليها برنامج arcinfo  ونفس الشي بالنسبة oracle spatial  وذلك عندما نقوم برسم قوس بواسطة 
اداة الرسم sketch tool  واختيار end point arc tool  التي ترسم قوس بواسطة نقطتين فقط :نقطة بداية ونقطة نهاية ...
اي انه لدينا 2vertices  فقط ..فهل آلية رسم القوس ضمن برنامج arcinfo  له 3 بارامترات  :
1- نقطة بداية 
2- نقطة نهاية 
3- curve  اي درجة وجهة الانحناء ...
ونفس الشي بالنسبة للدائرة ....
وهكذا ايضا لوحظ في oracle spatial  ..
---
لكن عندما نقوم بتصدير هذا القوس او الدائرة الى شيب فايل ومن ثم اضافة هذا الشيب فايل لواجهة عمل arcmap  نلاحظ ان القوس مؤلف من مئات ال vertex  ....وايضا عندما نفتح القوس بواسطة الاوتوكاد نجده ايضا مؤلف من مئات ال vertex  ...
..............
فهل لتخزين قوس ضمن قاعدة البيانات يحتاج الى الثلاث بارامترات انفة الذكر ....ام انه لحفظ القوس فان هنالك تلك المئات من vertex  المتقاربة مع بعضها البعض والتي شكلت القوس ...
فأيهما صحيح برمجيا .......
.................
مثال لزيادة التوضيح ...عندما صدرنا الاقواس الى برامج gps  بدت الاقواس بطريقة ذات اضلاع غير متناسقة ...مما نفهم ان برنامج arcinfo  له طريقته الخاصة في تخزين القوس ...فربما هي طريقة ظاهرية فقط حيث ظاهريا نملك tow vertices  ..أما واقعيا فان القوس هو مئات ال vertex  المشكلة للقوس ...
..........
أرجوا التوضيح والمشاركة والمناقشة ...
بهجت يوسف الجعافرة
08-05-2010, 04:30 PM
السلام عليكم
هناك طرق لاضافة ادوات رسم جديدة
عن طريق
customize ----> advance edit tools ----> Command 
او
customize ----> editor----> Command
ام لغات البرمجة 
visual basic
c++
ام اللغات في arcgis
ArcObjects
python
http://www.python.org/doc/newstyle.html
ام بالنسبة الى الدائرة
مركز الدائرة ونصف القطر هو امر مشترك
وكل برنامج بظهر الدائرة باسلوبه الخاص
نجد جمال
08-05-2010, 11:02 PM
اولا هناك طرق مختلفة لرسم المنحنايات وتختلف في نوع وعدد البراميتر حسب المنهجية المستخدم في الرسم فمثلا لو تم استخدام:
Vb.net for windows Application:
this example do that:
Imports System
Imports System.Windows.Forms
Imports System.Drawing
Imports System.Drawing.Drawing2D
Public Class MainClass
  Shared Sub Main()
     Dim form1 As Form1 = new Form1
     Application.Run(form1)
  End Sub
  
End Class
Public Class Form1
  Inherits System.Windows.Forms.Form
#Region " Windows Form Designer generated code "
  Public Sub New()
    MyBase.New()
    'This call is required by the Windows Form Designer.
    InitializeComponent()
    'Add any initialization after the InitializeComponent() call
  End Sub
  'Form overrides dispose to clean up the component list.
  Protected Overloads Overrides Sub Dispose(ByVal disposing As Boolean)
    If disposing Then
      If Not (components Is Nothing) Then
        components.Dispose()
      End If
    End If
    MyBase.Dispose(disposing)
  End Sub
  'Required by the Windows Form Designer
  Private components As System.ComponentModel.IContainer
  'NOTE: The following procedure is required by the Windows Form Designer
  'It can be modified using the Windows Form Designer.  
  'Do not modify it using the code editor.
  <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
    '
    'Form1
    '
    Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13)
    Me.ClientSize = New System.Drawing.Size(504, 629)
    Me.Name = "Form1"
    Me.StartPosition = System.Windows.Forms.FormStartPosition.CenterScree n
    Me.Text = "Form1"
  End Sub
#End Region
  Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
  End Sub
  Protected Overrides Sub OnPaint(ByVal e As PaintEventArgs)
    Dim R1 As New Rectangle(10, 10, 40, 40)
    e.Graphics.SmoothingMode = SmoothingMode.HighQuality
    'Use first rect to bound arc 
    e.Graphics.ResetTransform()
    e.Graphics.TranslateTransform(200.0F, 50.0F)
    e.Graphics.DrawArc(Pens.DarkBlue, R1, 40, 160)
  End Sub
End Class
/////////////////////////////////////////////////////////////////////////////////
وهذا المثال الكامل لرسم الارك باستخدام ثلاثة نقاط for ArcInfo:
ArcINFO::::::::::::::::::::::::::
Private Sub UIToolControl1_MouseDown(ByVal button As Long, ByVal shift As Long, ByVal X As Long, ByVal Y As Long)
    
    Dim pMxDoc As IMxDocument
    Set pMxDoc = ThisDocument
    
    Dim pMap As IMap
    Set pMap = pMxDoc.FocusMap
    Dim pEnumFeat As IEnumFeature
    Set pEnumFeat = pMap.FeatureSelection
    
    pEnumFeat.Reset
    Dim pFeat As IFeature
    Set pFeat = pEnumFeat.Next
    
    Do Until pFeat Is Nothing
    
        Dim pFeatClass As IFeatureClass
        Set pFeatClass = pFeat.Class
        
        If pFeatClass.ShapeType = esriGeometryPolyline Then
    	     Dim pSegColl As ISegmentCollection
             Set pSegColl = pFeat.Shape
             MsgBox pSegColl.SegmentCount, vbOKOnly, "SEGMENT"
             Dim pSegment As ISegment
             Set pSegment = pSegColl.Segment(0)
            
             Dim pFrmPoint As IPoint
             Dim pToPoint As IPoint
             
            
             Set pFrmPoint = pSegment.FromPoint
             	     
	     Dim pMidPoint As IPoint
             Set pMidPoint = pFrmPoint
             
             Dim pTargetFeatClass As IFeatureClass
             Set pTargetFeatClass = pFeatClass
        End If
	If pFeatClass.ShapeType = esriGeometryPolygon Then
           
            Set pSegColl = pFeat.Shape
            
            'I get here the last segment of the polygon(square)
	    Set pSegment = pSegColl.Segment(3)
            
            Set pFrmPoint = pSegment.FromPoint
            Set pToPoint = pSegment.ToPoint
                   
        End If
	Set pFeat = pEnumFeat.Next
        
    Loop
    Dim pCircularFeat As IFeature
    Set pCircularFeat = New Feature
    Set pCircularFeat = pTargetFeatClass.CreateFeature
    Dim pSeg As ISegment
    Dim pZaware As IZAware
    Set pSeg = CreateCArcThreePoint(pFrmPoint, pMidPoint, pToPoint)
    Set pSegColl = New Polyline
    Set pZaware = pSegColl
    pZaware.ZAware = True
    pSegColl.AddSegment pSeg
    
    Set pCircularFeat.Shape = pSegColl
    pCircularFeat.Store
End Sub
Public Function CreateCArcThreePoint(FromPoint As IPoint, MidPoint As IPoint, ToPoint As IPoint) As ICircularArc
   Dim ConstCArc As IConstructCircularArc
   Set CreateCArcThreePoint = New CircularArc
   Set ConstCArc = CreateCArcThreePoint
   ConstCArc.ConstructThreePoints FromPoint, MidPoint, ToPoint, True
   
End Function
Powered by vBulletin® Version 4.1.11 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.