| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Вертикальные решения на базе AutoCAD > Создать "результирующую" поверхность по двум исходным Civil 3d

Создать "результирующую" поверхность по двум исходным Civil 3d

Ответ
Поиск в этой теме
Непрочитано 14.05.2018, 23:49 #1
Создать "результирующую" поверхность по двум исходным Civil 3d
Нюк
 
ЖД
 
Регистрация: 18.04.2013
Сообщений: 200

В общем нужно решить такую задачу - есть две пересекающиеся поверхности, по ним надо создать результирующую - только врехнюю часть или только нижнюю (как на прилагаемом эскизе)
возможно ли такое реализовать в Civile?

Tin для объемов не подходит - нужны абсолютные отметки и дальнейшее сравнение этой поверхности с другими.

Миниатюры
Нажмите на изображение для увеличения
Название: IMG_2348 - копия.jpg
Просмотров: 93
Размер:	60.1 Кб
ID:	202225  

Просмотров: 5852
 
Непрочитано 15.05.2018, 01:35
#2
Константин Д


 
Регистрация: 29.05.2014
Сообщений: 295


А чем "определение"->"редактировать"->"вставить поверхность" в определении новой не устраивает?
Константин Д вне форума  
 
Непрочитано 15.05.2018, 11:31
#3
trir


 
Регистрация: 18.12.2010
Сообщений: 5,057


1. Построить поверхность объёмов
2. Получить по ней нулевую линию
3. Использовать её как маску для исходных поверхностей и нарезать на кусочки
4. Объеденить

как то так
trir вне форума  
 
Автор темы   Непрочитано 15.05.2018, 11:34
#4
Нюк

ЖД
 
Регистрация: 18.04.2013
Сообщений: 200


Вот тут описана технология с экспортом точек в эксель, постобработкой и вставкой.
Наверное так сделаю.
Кусочков очень много.

Может еще есть у кого варианты?
Нюк вне форума  
 
Непрочитано 15.05.2018, 11:53
#5
trir


 
Регистрация: 18.12.2010
Сообщений: 5,057


програмно
1. Построить поверхность объёмов
2. Присвоить её min/max отметки исходных поверхностей
trir вне форума  
 
Непрочитано 15.05.2018, 12:08
#6
dorogi-dorogi

Проектирование дорог
 
Регистрация: 01.03.2012
Сообщений: 600


Как уже написали, вставить одну поверхность в другую.
dorogi-dorogi вне форума  
 
Автор темы   Непрочитано 15.05.2018, 12:11
#7
Нюк

ЖД
 
Регистрация: 18.04.2013
Сообщений: 200


Цитата:
Сообщение от dorogi-dorogi Посмотреть сообщение
Как уже написали, вставить одну поверхность в другую.
У меня получается просто, что одна поверхность замещает другую в пределах границ. Но нужный результат не достигается
Нюк вне форума  
 
Непрочитано 15.05.2018, 15:10
#8
dorogi-dorogi

Проектирование дорог
 
Регистрация: 01.03.2012
Сообщений: 600


тогда в два шага:
вытаскиваете линии пересечения поверхностей, в одну из поверхностей вставляете как границы, потом вставляете
dorogi-dorogi вне форума  
 
Автор темы   Непрочитано 16.05.2018, 13:02
1 | #9
Нюк

ЖД
 
Регистрация: 18.04.2013
Сообщений: 200


Результат достигнут на основании статьи Игоря Рогачева

Метод довольно быстрый удобный. В случае изменения какой-либо из поверхности построение результирующей занимает минут 20-30 + минут 10-20 на картограмму, итого на приведение всего в соответствие около часа.
Методика хорошо расписана в статье.

Краткий алгоритм:
- создаем единый контур для обоих поверхностей
- создаем группу точек по 1 поверхности, строим точки по сетке с нужным нам шагом
- создаем группу точек по 2 поверхности, строим точки по сетке с идентичными настройками (начальная точка и шаг должны соответствовать, чтобы точки легли на одни и те же координаты)
- экспортируем точки в текстовый файл, далее в эксель и проводим необходимые манипуляции (выбираем наименьшее или суммируем или еще чего-нибудь)
- получаем координаты результирующие и импортируем их в civil для новой поверхности.

От себя добавлю, что точки в эксель лучше копировать точки со всеми тремя координатами и сравнить X Y точек обеих групп, потому что у меня во второй поверхности где-то закралась лишняя точка, и все точки "съехали". Результат был бы неправильный.
Нюк вне форума  
 
Непрочитано 17.05.2018, 14:42
#10
trir


 
Регистрация: 18.12.2010
Сообщений: 5,057


делов то
Код:
[Выделить все]
[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);
                TinSurface surf1 = (TinSurface)tr.GetObject(surfid1, OpenMode.ForRead);
                TinSurface surf2 = (TinSurface)tr.GetObject(surfid2, OpenMode.ForRead);
                TinSurface surf3 = (TinSurface)surf1.Clone();
                acBlkTblRec.AppendEntity(surf3);
                tr.AddNewlyCreatedDBObject(surf3, true);
                surf3.PasteSurface(surfid2);
                Double h;
                List<Point3d> wList = new List<Point3d>();
                foreach (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)
                {
                    TinSurfaceVertex v = surf3.FindVertexAtXY(p.X, p.Y);
                    surf3.SetVertexElevation(v, p.Z);
                }
                tr.Commit();
            }
trir вне форума  
 
Автор темы   Непрочитано 17.05.2018, 14:51
#11
Нюк

ЖД
 
Регистрация: 18.04.2013
Сообщений: 200


Слабо понимаю lisp, но по общим командам вижу что код делает тот же алгоритм что я описывал.

Подскажите с чего начать изучение lisp для решения подобных задач?
Нюк вне форума  
 
Непрочитано 17.05.2018, 14:52
#12
trir


 
Регистрация: 18.12.2010
Сообщений: 5,057


это не lisp
trir вне форума  
 
Автор темы   Непрочитано 17.05.2018, 14:57
#13
Нюк

ЖД
 
Регистрация: 18.04.2013
Сообщений: 200


А что это? VBA?
Хотя максимум что я знаю о lisp или vba - что это "фичи" для реализации различных алгоритмов))).

Подскажите - куда смотреть, что изучать чтобы решать подобного рода задачи?
Нюк вне форума  
 
Непрочитано 17.05.2018, 15:08
#14
trir


 
Регистрация: 18.12.2010
Сообщений: 5,057


https://download.microsoft.com/docum...n/c_sharp2.pdf
trir вне форума  
 
Непрочитано 13.02.2021, 01:26 Оптимальное решение
#15
NewNeo


 
Регистрация: 21.06.2013
Сообщений: 9


А не проще вычесть из нулевой поверхности одну из тех, которые надо сложить. Получить поверхность с отрицательными значениями высот, а потом из другой вычесть эту отрицательную поверхность - как раз получится сумма)
NewNeo вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Вертикальные решения на базе AutoCAD > Создать "результирующую" поверхность по двум исходным Civil 3d

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AutoCad Civil 3D 15. Как создать линию по азимуту? ШАЮ Вертикальные решения на базе AutoCAD 21 24.08.2016 17:28
Как создать шаблон проектных горизонталей для генплана в Civil 3D Татьана Вертикальные решения на базе AutoCAD 10 06.04.2016 14:30
Civil 3d 2015. Метка поверхности "поперечный уклон" (двухточечный). Как создать смещённое положение? Nick Z Вертикальные решения на базе AutoCAD 1 17.12.2015 08:17
При профилировании в Autocad Civil 3D 2016 проектная поверхность "перескакивает" через существующую Aleksejs88 Вертикальные решения на базе AutoCAD 9 02.12.2015 09:09
Как соединить существующую поверхность и поверхность коридора в Civil 3D 2012 chiper.shriper Вертикальные решения на базе AutoCAD 5 05.06.2014 22:32