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

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

Войти

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

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

  1. Philin

    Форумчанин

    Регистрация:
    1 фев 2008
    Сообщения:
    2.557
    Симпатии:
    2.084
    Адрес:
    Москва
    На предыдущее сообщение отвечу позже.

    Ну здесь всё понятно. Даже автокад (коммерческий продукт!!!) периодически переклинивает в таком случае.
    Поясняю ситуацию. Вы начертили полилинию у которой координаты 1,2 и 6 точек совпадают (а зачем Вам нужна такая странная полилиния?).
    Вот Ваша полилиния с каталогом координат её точек и примером того, что нарисует программа при попытке отрисовать отклонение:

    [​IMG]

    Фирма Autodesk (разработчик AutoCAD) не смогла решить эту проблему, либо поленилась её решать. Они предложили такой способ выхода из этой ситуации (работает ТОЛЬКО в новых версиях автокад, точно работает в версии 2012,2013,2014... с какой именно версии это решение было предложено впервые я не знаю, оно точно не работает в версии 2008). Так вот, автодеск предложила пользователям новую команду _OVERKILL . Введите эту команду, укажите ей свою полилинию, нажмите ОК и после этого попробуйте нарисовать отклонение с помощью AxeAndPointZ. Вот пример того, что нарисует программа после отработки этой команды на вашу полилинию (красная стрелка это старая стрелка, белая стрелка это стрелка после отработки overkill):

    [​IMG]

    Так программа вообще не изменяет толщины (веса) линий рамок. Толщина (вес) линий рамок зависит от настроек Вашего чертежа или автокад, стилей (созданных Вами) и т.п. Я не могу изменить то, что даже не делал ::smile24.gif::
    Не совсем пойму, как могут рамки толщиной "по умолчанию 0,25" быть ТОЛСТЫМИ. Потому что автокад начинает показывать на чертеже веса линий начиная с 0,3 и больше.
    Т.е. Вы или кто-то до вас изменил глобальные настройки автокад, либо создал чертёж с такими настройками что теперь веса линий показываются если они более 0,09.

    Подумайте о других пользователях программы. Не каждый принтер в состоянии напечатать линию с весом 0,09. В итоге у многих пользователей эти квадраты вообще не будут печататься на бумаге. Далеко не в каждом офисе стоит хороший принтер/плоттер с разрешением печати 1200dpi или фотопринтер с разрешением 1440dpi и более.

    Для себя можете ввести команду LWDEFAULT , указать ей величину 9 и автоматически все линии (которые имеют вес по умолчанию) станут 0,09. Только учитывайте, что это глобальная переменная автокад и действует она постоянно на все чертежи (даже после перезагрузки автокад эта переменная не изменит своего значения)
     
    #241
  2. Philin

    Форумчанин

    Регистрация:
    1 фев 2008
    Сообщения:
    2.557
    Симпатии:
    2.084
    Адрес:
    Москва
    Попробую ответить коротко :)

    Программа при работе с полилиниями изначально создавалась как программа для работы с ЗАМКНУТЫМИ полилиниями. Такие полилинии имеют реальную площадь, а не виртуальную (которую может посчитать автокад замкнув первую и последнюю точки полилинии).
    В алгоритме работы программы с полилиниями есть 2 режима:
    1 - режим работы с полилиниями состоящими из 2-5 точек (ускоренный - прямые углы, отсутствие дуг)
    2 - режим работы с полилиниями состоящими из 5 и более точек (медленный)

    Режим 1 предусмотрен для пилонов, колонн, прямых стен и предполагает что это ПРЯМОУГОЛЬНИК или КВАДРАТ (4-5 точек). Если полилиния имеет 3 точки, то программа автоматически замыкает эту полилинию и считает что это ТРЕУГОЛЬНИК.

    В одном из предыдущих примеров Вы показывали полилинию из 3 точек, при этом полилиния была с очень тупым углом. Ясное дело, что при такой конфигурации полилинии может получиться так, что на концах этой полилинии расстояние до линии замыкания треугольника будет МЕНЬШЕ чем расстояние до первой или второй линии полилинии (там получаются очень острые углы, если отклонение будет внутрь, то на острых углах растояние до третьей линии будет ближе чем до первой или второй). Решить проблему можно взорвав полилинию и отработав с каждой линией отдельно.

    В новом примере вы чертите полилинию из 4-х точек (программа считает что там ПРЯМОУГОЛЬНИК), и при этом замыкание последней точки на первую даёт очень острый угол (красная линия с фиолетовой). AxeAndPointZ не отработает правильно такую полилинию т.к. считает что углы там прямые или близкие к ним. Ну не бывает чертежей с такими острыми углами. Решить проблему можно одним из способов:
    - взорвать полилинию и отработать с её линейными участками по отдельности
    - продолжить полилинию и начертить ещё одну (пятую) точку в какую-то сторону (синяя линия)

    [​IMG]

    Вот так получится, если применить второй способ:
    [​IMG]

    Чем больше точек в полилинии, тем больше вероятность что программа начертит исполнительную правильно. Если вы чертите полилиниями полностью замкнутые фигуры, то вероятность ошибки стремится к нулю.

    При малом количестве точек в полилинии программа отработает правильно в случаях:
    - 3 точки, угол в точке 2 ПРЯМОЙ (равен или очень близок к 90 градусам)
    - 4-5 точек, углы во всех точках равны или очень близки к прямым
     
    #242
  3. Максим

    Форумчанин

    Регистрация:
    19 июл 2007
    Сообщения:
    1.557
    Симпатии:
    473
    Спасибо за разъяснения.
     
    #243
  4. Максим

    Форумчанин

    Регистрация:
    19 июл 2007
    Сообщения:
    1.557
    Симпатии:
    473
    Так кто ж говорит, что программа меняет веса линий? Вот и плохо, что не меняет :) Можно эту настройку впихнуть в форму запуска, где уже присутствует высота текста :) Да, субъективно мне кажутся рамки вокруг букв жирными, слишком жирными. А принтеров у меня 2: один чб 600 дпи лазерный, а другой - цв. не знаю, сколько дпи. Субъективно мне кажутся толстыми эти рамки, будь они напечатаны на любом из них. И я много печатал на других устройствах, и всегда, если это должны быть тонкие линии, например, оси или размеры, я менял толщину с поумолчанию 25 на не толще 13.
     
    #244
  5. Philin

    Форумчанин

    Регистрация:
    1 фев 2008
    Сообщения:
    2.557
    Симпатии:
    2.084
    Адрес:
    Москва
    Не считаю это разумным. Если настройки автокад по умолчанию, то проблемы никакой нет. Если же автокад перенастроен вручную, либо введены какие-то стили на чертеже, то тот кто это сделал сможет и вернуть всё как было или сделать как ему угодно.
    Стараюсь в программе делать минимум кнопок и максимум отдачи. А то так недолго и Windows написать (это у него сто вариантов как получить один и тот же результат :) ).
    Для Вас оптимально будет пользоваться командой LWDEFAULT. Она действует только на тот автокад в котором вы её ввели. На сам чертёж она не действует, при передаче кому-то у него будет по умолчанию 0,25 (если у того человека в автокаде не изменена эта переменная на что-то иное).

    А насчёт принтеров и печати может возникнуть проблема. Пример из жизни. У меня дома и на работе абсолютно одинаковые принтеры. Дома Windows XP и драйверы принтера стоят родные. На работе Windows7 x64 и драйверы принтера стоят стандартные от Microsoft. Так вот дома принтер печатает чертежи практически с любыми весами линий, а на работе печатает линии только с весом 0,15 и более (если вес менее, то вообще ничего не печатает).

    Можно теоретически рассчитать вес минимальной линии, которую сможет напечатать принтер.
    Пример: максимальное разрешение принтера 600dpi (Dot Per Inch = точек на дюйм). 1 дюйм = 25,4мм. Автокад по умолчанию работает в системе единиц СИ, по умолчанию у него стоит 0,25мм толщина линий.
    Высчитываем минимальную линию, которую теоретически может напечатать принтер 25,4 / 600 = 0,042мм или 0,085мм для разрешения 300dpi
    По факту дело обстоит не совсем так. На принтере указывается не его реально возможная точность печати, а размер минимальной точки, которую он может отобразить на высококачественной бумаге. Для реальных условий это число надо увеличивать как минимум вдвое. Итого имеем для принтера 300dpi минимальную линию не тоньше ~0,17мм, а для принтера с разрешением 600dpi не менее ~0,085мм.
    Есть ещё различные ухищрения в драйверах принтера, но это тема отдельного разговора :)
     
    #245
  6. Philin

    Форумчанин

    Регистрация:
    1 фев 2008
    Сообщения:
    2.557
    Симпатии:
    2.084
    Адрес:
    Москва
    Новая версия программы aCAD2TXT ver.Beta5

    Добавлено:
    - возможность восстановления файлов координат по данным из ранее созданных программой слоёв
    - восстановленные файлы координат имеют такое же имя как имя чертежа, но с добавлением "_REC". Два файла: SDR (для флешек Sokkia), TXT (текстовый каталог координат через запятую).
    - каталог координат в восстановленные файлы записывается в обратном порядке. Т.е. если в изначально созданном файле координат точки шли с T1 по T15, то в файле REC точки будут идти от T15 до T1. Это касается только нумерации точек, координаты точек будут совпадать в обоих случаях.
    - программа не производит проверку на наличие уже существующего файла восстановленных координат. Если запустить программу повторно, то она просто добавит каталог координат к уже существующему файлу.
    - не имеет значения то, что данные на созданных программой слоях были передвинуты или как-то изменены. Восстановленные файлы координат будут идентичны первоначальным. В восстановленные файлы координат не попадут удалённые точки (программе не хватит информации для их восстановления).

    [​IMG]

    Окно программы выглядит вот так:

    [​IMG]

    PS Программа удалена в связи с выходом новой версии.
    PPS Восстановление файлов координат возможно только если они были созданы версией программы Beta4 или более новой.
     
    #246
  7. GPS_5700

    Форумчанин

    Регистрация:
    5 июл 2010
    Сообщения:
    266
    Симпатии:
    23
    Адрес:
    г.Иваново, Vector2004@bk.ru
    Уважаемый Philin, у меня размеры проставляются только в одном направлении (а хочется в двух), что ни так делаю, подскажите.
     

    Вложения:

    #247
  8. Philin

    Форумчанин

    Регистрация:
    1 фев 2008
    Сообщения:
    2.557
    Симпатии:
    2.084
    Адрес:
    Москва
    Программа предусматривалась для черчения отклонений от линии/дуги (грани конструкции), а не от углов конструкции. У Вас поллининия. Программа находит ближайшую линию полилинии (или её продолжение, на скрине это красные линии) к точке и рисует стрелку с отклонением от этой линии.
    В принципе можно сделать программой и то, что Вы хотите. Расчленяете полилинию на отрезки (соотв. командой автокад) и обрабатываете свои точки уже от этих отрезков. В итоге получите зелёные стрелки.

    [​IMG]

    Т.е. в Вашем случе надо либо снимать по две точки (на расстоянии 5-15 сантиметров от угла) на каждом ребре сооружения (в данном случае вместо 4 точек съёмки получим 8), либо чертить чертёж линиями, а не полилиниями.
     
    #248
  9. GPS_5700

    Форумчанин

    Регистрация:
    5 июл 2010
    Сообщения:
    266
    Симпатии:
    23
    Адрес:
    г.Иваново, Vector2004@bk.ru
    Ну это совсем другое дело. А я, глупая голова, все ни как понять ни мог принципа работы, уж инструкцию и так и этак перечитывал, а оказалось все просто. Премного вам благодарен за подробный ответ.
     
    #249
  10. Philin

    Форумчанин

    Регистрация:
    1 фев 2008
    Сообщения:
    2.557
    Симпатии:
    2.084
    Адрес:
    Москва
    Новая версия программы aCAD2TXT ver.Beta6 (программа создания файлов (SDR и TXT) каталогов координат полилиний с отступом или прочих примитивов автокад без отступа)

    Добавлено:
    - создание каталога координат без отступа следующих объектов: полилинии, линии, точки, окружности, дуги, центр дуги/окружности.
    - координируются точки по дугам и окружностям через заданный интервал по дуге. Программа разбивает дуги/окружности на равные промежутки не превышающие указанный пользователем интервал.
    - центры радиусов окружностей и дуг при именовании получают дополнительный префикс R
    - все точки по дуге и окружности получают к названию дополнительный префикс R
    - максимально допустимое количество точек в базе около 20000, делать больше не вижу смысла т.к. среднестатистический прибор не может загрузить в себя каталог координат более 7-10 тысяч точек.

    Примечание:
    - дуговые участки полилинии в текущей версии программы не обрабатываются, программа координирует только точки начала и конца дуги.
    - ОБРАТИТЕ ВНИМАНИЕ! Если, при отрисовке полилиний с отступом, программа работала в двумерном пространстве (константа H=0.000), то при работе без отступа, все точки трёхмерны (H= текущей высоте крайней точки линии или высоте точки).
    - программа автоматически удаляет все дубли смежных точек, но дублем считается точка полностью совпадающая по трём координатам (X,Y,H) с уже внесённой в базу точкой. Автокад имеет точность до 8 знаков после запятой, точки примыкания кривых к линиям практически никогда не будут равны по координатам, поэтому программа часто не считает эти точки дублями.

    Окно программы:
    [​IMG]

    Пример работы программы в режиме без отступа от конструкций:
    [​IMG]

    Пример работы программы с отступом от полилиний:
    [​IMG]

    PS Программа удалена в связи с выходом новой версии.
     
    #250
  11. Юрий Иванович

    Форумчанин

    Регистрация:
    31 окт 2012
    Сообщения:
    60
    Симпатии:
    12
    Philin, здравствуйте.
    На ноутбуке Windows 7 64x, AutoCad 2010. установил модуль VBA для данной конфигурации. остальные действия выполнил согласно инструкции. при нажатии на иконку AxeAndPointZ выходит следующая ошибка:"Команда: -vbarun
    Имя макроса:
    Команда: AxeAndPointZ.dvb!AxeAndPointZ.StartProgram Неизвестная команда
    "AXEANDPOINTZ.DVB!AXEANDPOINTZ.STARTPROGRAM". Для вызова справки нажмите F1."
    В чем может быть проблема?
     
    #251
  12. Philin

    Форумчанин

    Регистрация:
    1 фев 2008
    Сообщения:
    2.557
    Симпатии:
    2.084
    Адрес:
    Москва
    Здравствуйте.

    Ответ был дан ранее, вот ССЫЛКА, в следующем после неё сообщении ответ с решением проблемы.
    Причина ошибки - неверно прописан скрипт запуска программы, там либо где-то нет пробела, либо символ перевода строки вместо пробела (он не отображается, но автокад такой скрипт не запустит).

    Либо введите вручную полный скрипт по образцу из инструкции, либо установите панель инструментов из файла адаптации (тогда не надо будет прописывать кнопки вручную, а достаточно будет загрузить файл адаптации через меню адаптации автокад и все кнопки появятся уже правильно прописанные и без ошибок). Файл адаптации можно скачать вместе с новым пакетом программ.

    Только что вышел новый пакет всех программ, кроме самих программ в нём содержится и файл адаптации для автокад 2007-2014.

    Вышел новый пакет №6 программ. Скачать его можно ЗДЕСЬ. В пакет вошли все программы последних версий.
     
    #252
  13. Юрий Иванович

    Форумчанин

    Регистрация:
    31 окт 2012
    Сообщения:
    60
    Симпатии:
    12
    Philin, спасибо за программу. Все заработало проблема оказалась аналогичная.
     
    #253
  14. Philin

    Форумчанин

    Регистрация:
    1 фев 2008
    Сообщения:
    2.557
    Симпатии:
    2.084
    Адрес:
    Москва
    Очередная версия aCAD2TXT ver.Beta7

    Изменения:
    - При запуске программы в некоторых версиях Win7 или Win8 32бит, а чаще в 64бит, система защиты Windows запрещала работу программы не давая ей возможность увидеть файл активного чертежа AutoCAD. При этом появлялось сообщение с ошибкой 5. Исправлено путём перехода программы в режим обхода системы защиты Windows и антивируса.

    PS Программа удалена в связи с выходом новой версии.
     
    #254
  15. rome047

    Форумчанин

    Регистрация:
    27 июл 2011
    Сообщения:
    76
    Симпатии:
    6
    Адрес:
    Россия г.Калининград
    Philin, aCAD2TXT, где созданный файл искать?
     
    #255
  16. Philin

    Форумчанин

    Регистрация:
    1 фев 2008
    Сообщения:
    2.557
    Симпатии:
    2.084
    Адрес:
    Москва
    Если программа запустилась в нормальном режиме, то файлы находятся в папке с открытым активным чертежом, тем чертежом для которого она файлы и создала (это в инструкции написано).
    Если программа запустилась в режиме обхода системы защиты Windows и антивируса, то файлы можно найти в корне диска C: (это пишет программа при переходе в этот режим)
     
    #256
  17. rome047

    Форумчанин

    Регистрация:
    27 июл 2011
    Сообщения:
    76
    Симпатии:
    6
    Адрес:
    Россия г.Калининград
    Нашёл, спасибо.
    --- Сообщения объединены, 8 авг 2013, Оригинальное время сообщения: 8 авг 2013 ---
    Philin, А не хотите сделать чтобы необходимые элементы: 1. можно было выбрать. 2. Что прямую, что дугу, можно было бы сделать определённым шагом (например: точка Начало прямой, далее точки через 10м... , точка конец прямой. точка Начало дуги, далее точки через 5м.... , точка конец дуги. ?
     
    #257
  18. Philin

    Форумчанин

    Регистрация:
    1 фев 2008
    Сообщения:
    2.557
    Симпатии:
    2.084
    Адрес:
    Москва
    Каким образом? Если будет подробное описание, то может быть сделаю.


    С дугами и так всё работает как описано: центр дуги, начало дуги, конец дуги, точки с указанным шагом по дуге. Если разбивается дуга, то отступ первой точки считается от начала дуги. Если разбивается окружность, то отступ первой точки считается от точки лежащей на луче от центра радиуса на восток.

    Разбить программой прямые на части не считаю правильным. Вдруг Вам надо одну прямую разметить через 5 метров, вторую через 10 метров, третью через 0,3 метра... Тогда проще на слое для разбивки разметить свои прямые точками с помощью команды автокад РАЗМЕТИТЬ. Таким образом получите точки разметки линий именно с тем шагом, который Вам нужен. А программа просто возъмёт уже готовые точки и создаст каталог их координат.
     
    #258
  19. rome047

    Форумчанин

    Регистрация:
    27 июл 2011
    Сообщения:
    76
    Симпатии:
    6
    Адрес:
    Россия г.Калининград
    Мы же вводим не точное значение?, а не более (500 по умолчанию) (или у меня старая версия?), короче при таких установках у меня окружность разбивает на 497

    Для этого и появляется необходимость выбора объектов.(сначала выбираем необходимые объекты для деления по 3 м, второй раз по 5 м (чтобы добавлялись в тот же файл)

    И расскажите про то, как созданные мной точки закинуть в каталог?
     
    #259
  20. Philin

    Форумчанин

    Регистрация:
    1 фев 2008
    Сообщения:
    2.557
    Симпатии:
    2.084
    Адрес:
    Москва
    Ну да :) Мы вводим значение, программа делит окружность или дугу с таким расчётом, чтобы длины дуг между точками не превышали указанную длину и при этом были все одинаковыми. Если у Вас получилось что программа разбила дугу через 497мм, то это значит что это ближайшее к 500мм значение уложений целых длин дуг в эту дугу. Если бы в эту дугу укладывались равные дуги с длиной 500мм, то программа бы её так и разбила.
    Это же программа делает для разбивки. Можно было бы сделать просто тупое разложение на указанные длины отрезков, но представьте ситуацию, когда у вас получится конечный домер 10мм от последней точки разбивки дуги до конца дуги, а из конечной точки дуги идёт прямая. У вас практически сольются две точки (последняя точка разбивки дуги, конец дуги и начало прямой), но по факту там будет сдвиг на 10мм и если случайно начать выносить на местности прямую от такой точки дуги к дальнему концу линии, то... вы вынесите не ту прямую линию.


    Вот оно что... тут нам поднасрала (это ближайшее не матерное слово по данному поводу) фирма Autodesk (разработчик AutoCAD). В общем, она сделала следующее - выбор объектов автокад и всё что связано с выделениями и выборами в автокад НЕ РАБОТАЕТ или ГЛЮЧИТ в программах написанных на VBA. При этом всё это отлично работает на LISP и в ARX. У меня есть подозрение, что это сделано намеренно для того чтобы программы VBA не могли конкурировать с LISP и ARX программами.
    Так что... Стандартными средствами вы это сделаете быстрее и более предсказуемо (в пределах логики работы функции автокад РАЗМЕТИТЬ).

    Программа создаёт каталог координат всех объектов которые находятся на указанном Вами слое чертежа.
    Т.о., если все требуемые для выноса: полилинии, точки, линии, дуги, окружности... находятся на одном слое, то вы получите каталог всех этих объектов в одном файле координат.

    Если каталог уже существует, то можно:
    - начертить наши дополнительные точки на отдельном слое
    - открыть файл существующего каталога, посмотреть номер ПОСЛЕДНЕЙ точки
    - запустить программу для создания каталога координат начиная с номера на 1 больше чем ПОСЛЕДНИЙ номер в предыдущем каталоге
    - указать слой с нашими новыми точками
    - получим второй файл координат
    - совмещаем первый и второй файл координат
    - получаем конечный файл координат со старыми и новыми точками

    Если мы потеряли старый файл каталога координат точек, то можно:
    - начертить наши дополнительные точки на отдельном слое
    - запустит программу
    - восстановить из слоя старый каталог координат
    - открыть восстановленный (с индексом REC) файл каталога координат, посмотреть номер ПЕРВОЙ точки
    - запустить программу для создания каталога координат начиная с номера на 1 больше чем ПЕРВЫЙ номер в восстановленном каталоге
    - указать слой с нашими новыми точками
    - получим второй файл координат
    - совмещаем первый и второй файл координат
    - получаем конечный файл координат со старыми и новыми точками
     
    #260

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

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