Как «копировать параллельно», используя ArcObjects, к которому относится пространство имен ESRI «копировать параллельно»? - PullRequest
1 голос
/ 26 марта 2012

Я очень новичок в ArcObjects. Может ли кто-нибудь помочь мне найти пространство имен для «Копировать параллель», которое находится под Редактором в ArcGIS Desktop 10? Я буду очень признателен, если вы предоставите пример того, как использовать его в Visual Studio 2010.

1 Ответ

3 голосов
/ 27 марта 2012

если вы на самом деле просто пытаетесь выполнить команду «Копировать параллель ...» ... вы можете сделать это следующим образом

        IDocument d = ArcMap.Document as IDocument;
        IUID ud = new UIDClass();
        ud.Value = "esriEditor.CopyParallelCommand"; 
        ICommandItem c = d.CommandBars.Find(ud);
        c.Execute(); 

Если вы пытаетесь программно дублировать параллель копирования, единственное, что я обнаружил, - это использование IConstructCurve3 для имитации операции. Этот метод, похоже, имеет почти одинаковые параметры.

        //Get the selection
        UID uid = new UIDClass();
        uid.Value = "esriEditor.Editor";

        IEditor editor;
        editor = (IEditor)ArcMap.Application.FindExtensionByCLSID(uid);

        //Get Selection
        IEnumFeature enumfeature = editor.EditSelection;
        IFeature f = enumfeature.Next();

        //For adding new features
        IFeatureClass fc = f.Class as IFeatureClass;

        //Start an operation for undo/redo
        editor.StartOperation();
        while (f != null)
        {

            //Interface to do a "copy parallel"
            IConstructCurve3 construct = new PolylineClass();

            //Rounded, Mitered, etc
            object offset = esriConstructOffsetEnum.esriConstructOffsetRounded;

            IPolyline source = f.Shape as IPolyline; 

            //Method call (0.001 or -0.001 determines left/right)
            construct.ConstructOffset(source, 0.001, ref offset);

            //Storing output shape
            IFeature newFeature = fc.CreateFeature();
            newFeature.Shape = (IGeometry)construct;

            newFeature.Store();


            f = enumfeature.Next(); 
        }

        editor.StopOperation("Copy Parallel");

        //refresh
        ArcMap.Document.ActiveView.Refresh();

Я только взломал соответствующую часть с помощью IConstructCurve3, убедитесь, что вы выполняете свои проверки и, если хотите, скопируйте атрибут исходного объекта поверх.

Если у вас VS2010, этот код запустится, если вы просто создадите надстройку для кнопки с помощью шаблона проекта надстройки ESRI ArcMap с кнопкой. Затем скопируйте и вставьте код в событие OnClick (). (конечно, не забудьте установить необходимые ссылки esri)

...