Создал тему для всех кто увлекается программированием, ну и не только. И хотел бы сразу спросить может есть у кого готовые библеотеки для экспорта-импорта dxf, аналог примера - "2D / 3D DXF Import .NET 1". Говорю сразу - не собираюсь использовать в коммерч. целях или в распространении.
Сайт www.opendesign.com скачал с нее программку everydwg.exe полностью бесплатная и слышал вроде они, каждый год уточняют спецификацию dwg, чтоб все корректно конвертировалось. Как минус, нельзя предпросмотр осуществлять Как плюс, под wine в linux'e работает ::tell::
спасибо, но немного не то. Объясню чуть подробнее: Работаю в Visual Studio 2008, программа (мой проект) ведет гео расчет и строит (рисует) результат в элементе управления PictureBox. Так вот дабы не писать класс (в связи с трудоемкостью и большими времязатратами) по экспорту из PictureBox в файл формата dxf, хотелось бы позаимствовать у кого-нибудь Библиотеку экспорта.
Создание своего приложение конечно беспокоит душу каждого геодезиста, которое может делать все Что если сделать маленькое приложение на базе открытой программки QGIS, интерфейс у нее русский есть, приложения можно писать на питоне, и поддержка будет, если все толково сделать. Меня этот вопрос давно волновал. Quantum GIS - это гис приложение, под win и linux.
http://www.qgis.org/en/download/sources.html, сам только выкачал смотрел. Интерфейс QT, плагины питон, ядро на cpp. Наверное нет там поддержки .net . Open source его не особо жалует, это же привязка к платформе.
Реализовал процедуру расчета площади и периметра полигона: Код: ' Расчет площади Public Sub Ploshcad(ByVal X As Array, ByVal Y As Array, ByRef S As Double) Dim Xi As Double = 0 Dim XItog As Double = 0 Dim Yi As Double = 0 Dim YItog As Double = 0 Dim XCount As Int32 = X.Length Dim YCount As Int32 = Y.Length Dim Index As Int32 = 0 Dim Index2 As Int32 = 0 Dim P2X As Double = 0 Dim P2XItog As Double = 0 Dim P2Y As Double = 0 Dim P2YItog As Double = 0 ' Расчитываем разность координат X For i As Int32 = 0 To YCount - 1 ' Расчитываем Контроль Index = i Index2 = i If Index = 0 Then Index = YCount If Index2 = YCount - 1 Then Index2 = -1 Xi = Y(Index - 1) - Y(Index2 + 1) P2X = X(i) * Xi XItog += Xi P2XItog += P2X Next i ' Расчитываем разность координат Y For i As Int32 = 0 To XCount - 1 ' Расчитываем Контроль Index = i Index2 = i If Index = 0 Then Index = XCount If Index2 = XCount - 1 Then Index2 = -1 Yi = X(Index - 1) - X(Index2 + 1) P2Y = Y(i) * Yi YItog += Yi P2YItog += P2Y Next i If P2XItog < 0 Then P2XItog = P2XItog * (-1) If P2YItog < 0 Then P2YItog = P2YItog * (-1) ' Мой метод расчета площади S = (P2XItog + P2YItog) / 4 End Sub Public Sub Perimetr(ByVal X As Array, ByVal Y As Array, ByRef P As Double) Dim XCount As Int32 = X.Length Dim Distanc As Double = 0 Dim dX As Double = 0 Dim dY As Double = 0 Dim Index As Int32 = 0 Dim Index2 As Int32 = 0 For i As Int32 = 0 To XCount - 1 Index = i Index2 = i If Index2 = XCount - 1 Then Index2 = -1 dX = X(Index) - X(Index2 + 1) dY = Y(Index) - Y(Index2 + 1) Distanc = Math.Sqrt(dX ^ 2 + dY ^ 2) P += Distanc Next End Sub труда особого не составило. Сейчас мучаюсь с интерполированием горизонталей. Подскажите люди добрые, формулу для массива отметок: X(i), Y(i), Z(i).
P2XItog плохо читается, лучше: P2Xitog. (Добавление) И комментариев надо значительно больше. Желательно в начале описывать общую идею алгоритма.
Желательно отказываться от ByRef'ов в пользу использования Function'ов, которые явно возвращают вычисленное значение.
Я бы Yi назвал dXi, ибо по смыслу вы вычисляете разницу (дельту) Х. Не понятно, зачем введены переменные YItog и XItog, они не используются. Наверное, они служат для отладки? В чем преимущество вашего метода вычисления площади? Я бы вычислял её 1 раз, этого вполне достаточно. Вместо проверки отрицательности площади я бы просто вычислил её абсолютную величину.
да, надо убрать, ничем не отличается, хочу посмотреть как S будет себя "вести". а XItog, для контроля общей суммы нужна была..
С интерполированием задача не такая тривиальная. Между двумя точками съемки может проходить от нуля до нескольких горизонталей.
меня более интерполирование интересует уже есть в голове картина приблизительная: 1. Получаем массив X,Y.Z 2. Организовываем линейную триангуляцию 3. Линейные базисы используем для нахождения координаты X,Y горизонтали (метод логарифмической линейки) 4. по заданному шагу горизонтали строим "поллинии" 5. Сглаживаем полилинии. Ну и возможность изменение расположение треугольников триангуляции забыл. со 2-м пунктом пока проблемы.. Может этот метод вообще не целесообразно использовать? (Добавление) от нуля до бесконечности точнее сказать.
с Lips дело никогда не имел, посмотрел но код смотрел. Язык из семейства языков С, я изучаю сейчас C#, но в C# обязательное объявление переменных, а в Lips мозг сломать можно пока прочтешь и раздерешь код. Совсем не ясны функции (или команды): caddr, cdr, car, caar, и многое др. :(
Ознакомился с визуальным процессом интерполирования в стороннем программном продукте. Картинка для наглядности: как видно горизонталь проходит как Сплайн, разве она не должна проходить через эти точки: и просто сглаживаться?