Добро пожаловать!

Войдите или зарегистрируйтесь сейчас!

Войти

Совмещение поверхностей

Тема в разделе "Civil 3D", создана пользователем Evgen Erith, 21 ноя 2018.

  1. Evgen Erith

    Регистрация:
    21 ноя 2018
    Сообщения:
    6
    Симпатии:
    0
    Всем привет. Назрел такой вопрос. Перекопал весь интеренет, с том числе и этот форум, но ответа не нашел.
    Дано: Есть две поверхности А и Б (красный и синий профиль их для наглядности нарисовал на рисунке 1). В некоторых местах они пересекаются по высоте.
    Надо совместить эти две поверхности и чтобы получить две новые поверхности В и Г (желтый и зеленый профиль на рисунке 2). Поверхность В должна быть из наивысших точек двух поверхностей. Вторая соответственно из наинизших.
    Если просто вставлять - не помогает: новая заменяет новую. Можно конечно мимнимумдистанциямеждуповерхностями - потом - создать обрезанную и потом вставить в исходную но, когда один такой островок- не вопрос. А вот когда их сотня - тогда столько поверхностей не наделаешься. Как по мне элементарная операция для программы и мне не верится что нет такой команды по совмещению поверхностей. Помогите найти.)
    Всем заранее спасибо за помощь
     

    Вложения:

    • а и б.png
      а и б.png
      Размер файла:
      34 КБ
      Просмотров:
      10
    • в и г.png
      в и г.png
      Размер файла:
      178,3 КБ
      Просмотров:
      11
    #1
  2. trir

    Форумчанин

    Регистрация:
    25 ноя 2014
    Сообщения:
    3.253
    Симпатии:
    931
    Адрес:
    gnomtrir@mail.ru
    только программно, через поверхность объёмов
     
    #2
    X-Y-H нравится это.
  3. Evgen Erith

    Регистрация:
    21 ноя 2018
    Сообщения:
    6
    Симпатии:
    0
    А не могли бы подробнее объяснить?
     
    #3
  4. trir

    Форумчанин

    Регистрация:
    25 ноя 2014
    Сообщения:
    3.253
    Симпатии:
    931
    Адрес:
    gnomtrir@mail.ru
    как то так
    Код:
            [CommandMethod("test2")]
            public void test2()
            {
                CivilDocument cdoc = Autodesk.Civil.ApplicationServices.CivilApplication.ActiveDocument;
                AppServ.Document adoc = AppServ.Application.DocumentManager.MdiActiveDocument;
                Editor ed = adoc.Editor;
                ObjectId surfid1 = cdoc.GetSurfaceIds()[0];
                ObjectId surfid2 = cdoc.GetSurfaceIds()[1];
                using (Transaction tr = adoc.Database.TransactionManager.StartTransaction())
                {
                    BlockTable acBlkTbl = (BlockTable)tr.GetObject(adoc.Database.BlockTableId, OpenMode.ForRead);
                    BlockTableRecord acBlkTblRec = acBlkTblRec = (BlockTableRecord)tr.GetObject(acBlkTbl[BlockTableRecord.ModelSpace], OpenMode.ForWrite);
                    CivilDB.TinSurface surf1 = (CivilDB.TinSurface)tr.GetObject(surfid1, OpenMode.ForRead);
                    CivilDB.TinSurface surf2 = (CivilDB.TinSurface)tr.GetObject(surfid2, OpenMode.ForRead);
                    CivilDB.TinSurface surf3 = (CivilDB.TinSurface)surf1.Clone();
                    acBlkTblRec.AppendEntity(surf3);
                    tr.AddNewlyCreatedDBObject(surf3, true);
                    surf3.PasteSurface(surfid2);
                    Double h;
                    List<Point3d> wList = new List<Point3d>();
                    foreach (CivilDB.TinSurfaceVertex v in surf3.Vertices)
                    {
                        ed.WriteMessage(string.Format("point {0},{1},{2}\n", v.Location.X, v.Location.Y, v.Location.Z));
                        try
                        {
                            h = Math.Min(surf1.FindElevationAtXY(v.Location.X, v.Location.Y),
                                         surf2.FindElevationAtXY(v.Location.X, v.Location.Y));
                            if (h < v.Location.Z) wList.Add(new Point3d(v.Location.X, v.Location.Y, h));
                        }
                        catch (PointNotOnEntityException e)
                        {
                            ed.WriteMessage(e.Message);
                        }
                    }
                    foreach (Point3d p in wList)
                    {
                        CivilDB.TinSurfaceVertex v = surf3.FindVertexAtXY(p.X, p.Y);
                        surf3.SetVertexElevation(v, p.Z);
                    }
                    tr.Commit();
                }
            }
     
    #4
  5. Evgen Erith

    Регистрация:
    21 ноя 2018
    Сообщения:
    6
    Симпатии:
    0
    Простите за, возможно, глупый вопрос - но куда этот код вставить?
     
    #5
  6. trir

    Форумчанин

    Регистрация:
    25 ноя 2014
    Сообщения:
    3.253
    Симпатии:
    931
    Адрес:
    gnomtrir@mail.ru
  7. Evgen Erith

    Регистрация:
    21 ноя 2018
    Сообщения:
    6
    Симпатии:
    0
    Спасибо за помощь. К сожалению нет ни ресурсов ни времени, чтобы устанавливать большие дополнительные комплексы. Да и не располагаю я знаниями чтобы создавать новые библиотеки с нуля по Вашим ссылкам. Надеялся что есть готовые команды или скрипты от производителя. Но все равно спасибо
     
    #7
  8. Evgen Erith

    Регистрация:
    21 ноя 2018
    Сообщения:
    6
    Симпатии:
    0
    trir,
    не могу я наладить нормальную работу microsoft visual studio. Не могли бы Вы помочь мне еще, и скомпилить эту библиотеку?
    Спасибо.
     
    #8
  9. trir

    Форумчанин

    Регистрация:
    25 ноя 2014
    Сообщения:
    3.253
    Симпатии:
    931
    Адрес:
    gnomtrir@mail.ru
    1. Какая версия Civil?
    2. Там надо много доделывать для нормальной работы - это просто proof of concept

    в чём проблема?
     
    #9
  10. Evgen Erith

    Регистрация:
    21 ноя 2018
    Сообщения:
    6
    Симпатии:
    0
    1. 2019
    2. Я понял. Задача не по мне.
    3. Да проблем масса. Все началось с того что я поставил Вижуал студио но дальше этого не продвинулся, даже не смог прикрепить дополнительные библиотеки. Поэтому и понял что нет ни способностей, ни времени, ни технической возможности. Буду импровизировать по ходу работы. Я даже не думал что Civil 3d не имеет такой простой операции. Думал, что просто я об этом ничего не знаю
     
    #10
  11. FOXXX591

    Форумчанин

    Регистрация:
    19 окт 2012
    Сообщения:
    3.271
    Симпатии:
    2.574
    Адрес:
    г.Смоленск
    Операция не простая, там много всяких условностей. Да и прога заточена под проектирование в основном.
     
    #11

Поделиться этой страницей

  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление