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

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

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

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

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

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

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

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


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


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


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


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,047


програмно
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,047


делов то
Код:
[Выделить все]
[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,047


это не 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,047


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