Полезные программы от Philin (строительство). VBA

Тема в разделе "Autodesk", создана пользователем Philin, 20 ноя 2010.

  1. sklimkim

    sklimkim Форумчанин

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

    Gaus Форумчанин

    На Civil 3D 2014 работает?
     
  3. Philin

    Philin Форумчанин

    Что именно?
    Программы для исполнительных должны все работать, кроме COM2aCAD.
    Программа черчения горизонталей не проверялась на работоспособность в сивил, но вы сами можете ответить на свой вопрос. Должно работать, если сивил в состоянии понимать и чертить следующие 4 примитива автокад - точка(point), 2D полилиния (2D Polyline... не путать с примитивом автокад, который чертится по кнопке или команде Polyline - такая полилиния автокад называется LWPolyline (лёгкая полилиния)), 3D полилиния (3D Polyline), однострочный текст (Text).

    PS В автокад есть как минимум три типа полилинии:
    1. LWPolyline (лёгкая плоская полилиния)
    2. 2DPolyline (лёгкая плоская полилиния с дополнительными свойствами)
    3. 3DPolyline (трёхмерная полилиния)
    Примитив автокад LWPolyline можно автоматически привести к типу 2DPolyline (достаточно изменить некоторые расширенные свойства полилинии, например добавить свойство сглаживания к полилинии). Примитив автокад 2DPolyline нельзя перевести в другой тип полилинии, во всяком случае я не знаю как это можно сделать (даже если убрать из полилинии дополнительные свойства, то полилиния всё равно останется 2DPolyline). Ну и 3DPolyline, она также, как и предыдущая не может быть переведена в другой тип полилинии.

    PPS Функции GorUnion и GorBreak работают только с 2DPolyline, другие полилинии они не считают правильными.
     
    Последнее редактирование: 29 ноя 2013
  4. Philin

    Philin Форумчанин

    Не планируется такой возможности в программе. А перекрасить горизонтали вручную по правилам позволяет "быстрый выбор" автокад в течение секунд.

    Программа создана для решения прикладных задач, а не для топографии.

    Вот пример, задача - определить величину перепада высот между двумя произвольными точками:
    (Слева мой вариант, красные горизонтали всегда через метр. Справа по правилам топографии)
    [​IMG]
    --- Сообщения объединены, 1 дек 2013, Оригинальное время сообщения: 1 дек 2013 ---
    Вижу, но врядли что сделаю.

    Программа не лучшим образом строит горизонтали вблизи периметра съёмки. Программа не рассчитана на черчение горизонталей внутри узких траншей, канав и пр. Программа чувствительна к качеству материала съёмки (чем лучше упорядочены точки съёмки, тем лучше программа начертит горизонтали). А на показанном примере сложились два нехороших варианта - траншея близко к краю периметра съёмки.
    Две дополнительные функции как раз и были сделаны для того чтобы можно было исправлять вручную огрехи в каких-то местах съёмки.

    Точки интерполяции программа чертит. Я с их помощью (+функции) вручную построил правильно ту канаву в течение 2 минут. Как решать эту задачу математически я прекрасно представляю, но на её решение потребуется 1,5 месяца чистого (если бросить работу и с утра до вечера только этим и заниматься) времени. Не считаю разумным тратить 1,5 месяца на разработку, потом несколько месяцев на отладку, когда проблема решается вручную в течение минут.

    PS Программа не является полноценной заменой коммерческих программ. Она создана для того чтобы помочь тем кто чертит вручную. Ускоряет черчение во много раз, но к каждой вычерченной ей съёмке надо подходить с умом, а не готовиться к тому, что она начертит идеальную съёмку за секунду и вам останется только распечатать её.
     
    Последнее редактирование: 3 дек 2013
  5. Палыч

    Палыч Форумчанин

    ,
    Такая задача и не ставилась.Просто я обращал внимание на то что горизоньали проходят там где нет интерполяции.Чего их туда несет?

    Так бывает, какбы нам и не хотелось.::biggrin24.gif::
    --- Сообщения объединены, 2 дек 2013, Оригинальное время сообщения: 2 дек 2013 ---
    А есть такие программы? Примеры знаете?::biggrin24.gif::
     
  6. Philin

    Philin Форумчанин

    Ещё раз подумал... Может быть и сделаю. Как отдельную опцию, которая по умолчанию выключена. Только такая возможность не планировалась изначально в программе, а значит с нуля такое сделать не получится, можно только покрасить горизонтали синим и красным, а потом их перекрасить в коричневые с утолщением. Проблема только в одном - сколько времени потратит автокад на такую вроде бы простую операцию? :)

    Выше приводил пример скорости работы программы (тест вполне объективный, железо одно, тестовый файл один, разница только в версии автокад). Только не упомянул один факт. VBA в среднем работает в 20 раз быстрее автокад (в редких случаях 1:1, в других случаях VBA быстрее автокад в 700 раз, но в среднем где-то 20 крат разница). Съёмку состоящую из 2000 точек VBA обрабатывает за 0,5 секунды (только автокад её потом чертит полминуты). Программа в конце показывает время затраченное на расчёты + время черчения автокад. Можем посчитать производительность черчения самого автокад... 2004 автокад 3,3сек на съёмку, из них 0,4 сек на работу программы VBA, итого 3,3-0,4=2,9 сек. затратил на черчение автокад. Автокад 2014 x64 24,0 сек на съёмку, из них 0,4 сек на рассчёты VBA программой, итого 24-0,4=23,6 сек. затратил на черчение автокад.
    Из этого можем примерно узнать насколько автокад замедлился на 2D черчении за 10 лет 23,6/2,9 = 8,1 раз, т.е. автокад 2014 медленнее автокад 2004 при 2D черчении настолько, что даже слепой это не может не заметить. Поэтому не знаю насколько замедлится работа программы при перекраске горизонталей, потому что по факту это время добавится к тому, которое сейчас есть.

    Имеется ввиду пересечение рёбер треугольников на которых нет точек?
    Я ранее писал, но не акцентировал на этом внимание. Треугольники чертятся только для того чтобы вручную было удобнее чертить горизонтали (чисто для наглядности, больше ни для чего). Сама программа при обработке вообще их не учитывает, она работает напрямую с точками. Например, если программе для горизонталей задан предел расстояния между соседними точками 20метров, она находит такие соседние точки, но если точки при этом пересекают рёбра/грани треугольников, то горизонталь будет вычерчена сквозь эти рёбра (даже если там нет точек). Работает она с точками, а не с плоскостями. С плоскостями слишком всё просто :) не стал я заморачиваться, а то за месяц напишу ещё программу-конкурента Civil :) Там с плоскостями задача легко решается на уровне математики школьных знаний (скучно и не интересно).
     
    Последнее редактирование: 2 дек 2013
  7. Палыч

    Палыч Форумчанин

    Да.

    Понятно.

    Да?

    По своему развлекаетесь?::biggrin24.gif::
    А мне кажется не все так просто. Два разных человека на одной и той же территории отрисуют горизонтали по разному - похоже -но по разному. А чтоб машина нарисовала = это труд не одного месяца. Такие монстры,как Кредо Цивил и пр. годами рещают сию задачу и до сих пор не АЙС.
    Вы сами себе поставили задачу и сами ее решаете. Чтоб мы не задавали вам глупых вопросов суть данной прогаммы.-КАРАНДАШ-АВТОМАТИЧЕСКИЙ КАРАНДАШ-АВТОМАТ.?
     
  8. Philin

    Philin Форумчанин

    Именно так :)

    Да. Просто захотелось решить простую задачу сложным способом :) С самого начала ведь писал -
    Они сами себя загнали в эти рамки тем, что с самого начала стали решать задачу так, как это предлагали математики 100-200 лет назад (не потому что это оптимальное решение, а потому что для решения задачи другим методом нет полноценной математической базы и надо её прорабатывать с нуля). Сильно сомневаюсь, что качество горизонталей значительно отличается между первой версией и текущей версией коммерческой программы.

    В каком-то смысле так. На простых участках программа сама справляется неплохо, а на сложных она подсказывает как это примерно должно выглядеть.
    Ну и основной из задач была максимально возможная скорость. Эта задача решена, практически любую съёмку программа обрабатывает менее чем за секунду, то что после этого современный автокад чертит полминуты (горизонтали по 2000 точкам съёмки) это уже проблемы автокад. Старый автокад это делает мгновенно, даже глазом не успеваешь моргнуть.

    Пока мне просто интересна эта тема, но не настолько чтобы заниматься ей постоянно. Если бы был бОльший интерес, то я бы написал это всё с нуля (1-3 месяца работы) и качество черчения самих горизонталей не отличалось бы от современного коммерческого продукта.
     
    Последнее редактирование: 4 дек 2013
    Qvinto и subineie нравится это.
  9. Прошу прощения.. я попыталась установить в свой 12 автокад Горизонтали методом загрузки в панели инструментов acad2009.cui.. после чего нажатие на кнопки программы ничего не дает, кроме:
    Команда: _-vbarun
    Команда: Gorizontali.dvb!Gorizontali.StartProgram Неизвестная команда
    "DVB!GORIZONTALI.STARTPROGRAM". Для вызова справки нажмите F1. - в командной строке и вот принтскрин..

    не судите строго, пожалуйста, я ничего не понимаю в программировании*)
     

    Вложения:

  10. Philin

    Philin Форумчанин

    На скрине же видно. Автокад пишет, что надо скачать и установить VBA Enabler т.к. VBA не включен в пакет установки автокад с версии автокад 2010 и более новых.
    Ссылка есть, надо перейти по ссылке, скачать VBA Enabler для своей версии автокад, а потом установить.

    И, программу VBA с её иконкой надо поместить в папку Support автокад. Иначе автокад её не увидит.
     
    subineie нравится это.
  11. Палыч

    Палыч Форумчанин

    К программе Горизонтали - на ряду с функциями "разорвать", "соединить" добавить такую- штриховка поверхности.Для наглядности отображения рельефа когда поверхность построена в 3Д. Ьак, для развликухи.::biggrin24.gif::
     
  12. Philin

    Philin Форумчанин

    Есть мааааленькая проблема :) Автокад не умеет штриховать 3D поверхности.
    Внешне, в виде сверху, всё ок:
    [​IMG]

    А в 3D виде просто 2D бред:
    [​IMG]

    Может я чего-то не знаю. Попробуйте заштриховать треугольники поверхности. Если получится, то опишите как это сделали.

    Вообще-то есть одна фнкция. Не помню название, а искать лень. Но она работает только начиная с версии 2008 или 2009 автокад. Т.е. если я её применю, то программа лишится совместимости с автокад старше 2008-2009. Да и выглядит всё после её применения очень паршиво. Если крутить в 3D такую закрашенную поверхность, то ничего не понятно, закраска мешает разглядеть поверхность.

    В общем, слабо понимаю зачем нужна мешающая наглядности фишка программы. Всё равно все будут её отключать. Shift + зажать центральную кнопку мыши + двигать мышь... И построенная треугольниками поверхность очень легко читается с любого ракурса. Всё равно использовать это можно только для наглядности, но чертить горизонтали в таком режиме нельзя т.к. автокад не предусмотрен для черчения 2D полилиний в любом виде кроме вида сверху.

    PS Я впал в другую крайность :) Хочу найти время и создать макет программы, которая работает с плоскостями. Думаю за 2-3 часа можно написать такой макет, который будет обрабатывать (горизонтали) поверхность любой сложности. Выкладывать макет в интернет не собираюсь, пусть мегамонсты получают деньги за свои горизонтали.

    PPS Я это всё к тому, что если нет такой функции, совместимой с автокад 2000-2014, то придётся это делать на VBA. За VBA я спокоен, десятки тысяч 3D линий ему посчитать это миллисекунды. Я боюсь за автокад, он же умом тронется столько начертить... боюсь, что в акад 2014 на это потребуется десятки минут, вы состаритесь, пока он это начертит.
     
    Последнее редактирование: 6 дек 2013
  13. Палыч

    Палыч Форумчанин

    У "мегамонстров" это называется визуализация.

    Ваше право.Жаль, что мы этого не увидим
     
  14. Philin

    Philin Форумчанин

    Увидеть можно. Как минимум на картинке :)
    Пришёл сейчас с работы, решил посмотреть как оно работает в реале. Засёк время, написал функцию, которая работает с плоскостями поверхностей. На написание функции затрачено 48 минут времени. Я не программист, а балуюсь иногда всякой фигнёй.
    Функция, используя знания математики средней школы, тупо считает сечения поверхности горизонтальными плоскостями с указанным шагом сечения (это и есть горизонтали) и выводит на экран посчитанное безобразие. Вот Ваш пример после её обработки:
    [​IMG]

    Лень было её объединять с функцией GorUnion (это гораздо дольше, чем воспользоваться готовой GorUnion вручную) и за 5 минут тыкания в экран мышкой получил нормальные горизонтали:
    [​IMG]

    Пересекать грани поверхности она физически не может т.к. считает именно по граням поверхности. Ошибиться в построении тоже не может (в природе есть штук 5 редких случаев участков поверхности, которые неоднозначно рассчитываются математически).

    Пример с поверхностью:
    [​IMG]

    И неужели до сих пор ни один человек не создал бесплатного аналога такой программы? Она примитивна до безобразия. Обработка данных исполнительной съёмки в строительстве на порядок сложнее, а таких бесплатных программ несколько штук.

    PS По ходу дела понял, что эта функция также может быть применена для:
    • мгновенного автоматического черчения объекта фасадной съёмки
    • мгновенного автоматического черчения объекта из данных 3D сканера
    • если её дублировать, то может рассчитать объём тела между двух произвольных поверхностей (включая случаи взаимного частичного или полного пересечения поверхностей)
     
    Последнее редактирование: 7 дек 2013
  15. borik

    borik Форумчанин

    ::wink24.gif::
    Так ведь под падающий яблок вовремя голову подставить - это не так-то и просто ...
     
  16. Philin

    Philin Форумчанин

    Встроил её в программу Gorizontali.
    Записал видео как оно работает (для того чтобы можно было увидеть работу функции, пришлось её значительно деоптимизировать, заставить чертить гигантскую съёмку с шагом горизонталей 10см и заставить автокад чертить линии во время работы функции... это замедлило скорость работы функции раз в 100 и теперь можно хоть что-то увидеть). Ей вообще всё равно какое качество съёмки и сложность поверхности. В видео показаны ещё две поверхности, съёмка по которым выполнена некачественно, но достаточно сложные и функция с ними справилась достойно.



    Оформлю и выпущу следующую скучную программу Gorizontali (только горизонтали всё равно будут синие и красные). А для души оставлю для себя свой вариант.
     
    Последнее редактирование: 8 дек 2013
  17. Robkiy

    Robkiy Форумчанин

    Philin, а будут ли в итоге линии соединены между собой или так и останутся отдельными отрезками между рёбрами треугольников ?

    Оффтоп
    а по времени работы функций - думаю в обще париться не стоит ибо э то капля в море между ручным построением и с помощью вашего творения (исходя из этого соображения по поводу скорости функции переживаете только вы сами )
     
  18. Philin

    Philin Форумчанин

    Конечно будут, не только соединены, но и сглажены. Смысла в отрезках нет никакого.

    Может быть и так, но вы это заметите если поверхность съёмки будет состоять из гигантского количества вершин. Лучше сразу озаботиться оптимизацией кода, чем потом на серьёзной съёмке ждать полчаса окончания работы программы.

    Считайте это моим бзиком :) Создаю программы автоматы и полуавтоматы, но основным требованием предъявляю к ним именно скорость работы.
     
  19. Палыч

    Палыч Форумчанин

    Вот!Хорошо! Осталось только доработать съемку 3Д откосами и все.

    Получается что нет.

    Так времена такие- все решают уже доли секунд::biggrin24.gif::::biggrin24.gif::::biggrin24.gif::
     
  20. Philin

    Philin Форумчанин

    Смотря где :)
    Показал как-то одному геодезисту на стройке свои программы. Он заинтересовался, установил. Через месяц спрашиваю - "Ну как, всё нравится в программах?". И получаю ответ - "Всё нравится, но я ими не пользуюсь." Начал у него выяснять что же не так...::blink.gif:: и в конце-концов добился ответа - "я получаю зарплату за то, что ЦЕЛЫЙ ДЕНЬ сижу и черчу исполнительные. А с твоими программами я их черчу за 5 минут... И что я буду делать всё остальное время?"
     
    Юр нравится это.
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление
  1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie.
    Скрыть объявление