|
||
| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
16.12.2003, 16:07 | #1 | |
инженер
Одесса-Мама
Регистрация: 30.08.2003
Сообщений: 172
|
||
Просмотров: 10646
|
|
||||
AutoCAD/AutoLISP Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133
|
|
|||
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
Ну вот, я тут кое что написал. Не стал "прикручивать" к BOUNDARY, он вставлает площадь, в любые замкнутые примитивы и в т. ч. в BOUNDARY. Сначала вводиться масштаб (надеюсь понятно почему), потом надо щелкать по замкнутым объектам. После каждого щелчка, на кончике курсора появляеться текст с площадью, который можно вставить в удобное место. Текущий масштаб, сохраняеться весь сеанс работы, он указан в треугольных скобках и его можно пропустить нажатием [Enter]. Выход по [Esc]. Если что не устраивает, поправим. Имейте ввиду, что я сильно долго, этот ЛИСП не тестировал (ну минут 15).
Код:
|
|||
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
С Mx2.
Код:
|
|||
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
Ну, для того чтобы все соответствовало, сначала запрашиваеться масштаб. Если нужно чтобы масштаб по умолчанию, всегда был 0.001, найдите строку (if (not scal)(setq scal 1)) и поменяйте 1 на 0.001. Пардон, это я не додумал, потом конечно сделаю чтобы была 1000. Убирать, масштаб вообще, не вижу смысла. Ведь не все у нас например получаю от 1 архитектурной фирмы, чертежи строго 1:100 и такие же им должен возвращать, со своими сетями.
Высота текста текущая или если не установлена, то по умолчанию, содержиться в системной переменной TEXTSIZE. Если есть надобность, то можно сделать чтобы для расстановки этих лейблов, параметры текста были иными (высота, ширина, цвет и т. д.), они будут включаться только при работе программы и сохраняться на весь сеанс работы с чертежом. Подумайте, как вы хотите, время есть до вечера, потому что уезжаю я. |
|||
|
||||
подождите масштаб 1:100 это у вас значит что если у вас расстояние 6м тов каде реально рисуете 6см? или это имеется ввиду вывод на печать?
я лично рисую 1:1 а масштаб задаю в пространстве листа!
__________________
vinum |
||||
|
||||
Архитектор Регистрация: 14.10.2003
Израиль
Сообщений: 365
|
Дмитрий, что Вы вцепились в душу? Есть ведь вопрос поважнее:
Как измерять прощади не только замкнумых полилиний, но и просто ограниченного пространства, указывая внутреннюю точку. Т.е. чтоб команда работала как HATCH или BPOLY, а ещё лучше, чтобы вызывалось окно, подобное HATCH или BPOLY для возможности выбора метода селекции и вообще для общей унификации и "индовзапрелости озимых" Пишу и сам дивлюсь собственной наглости :roll: |
|||
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
Забежал тут домой с объекта, читаю, жду когда жрачка согреется.
>Dima. Вы Дима, безусловно чертите правильно. Но есть "товарищи", которые, нам совсем не товарищи, которые чертят в масштабе. А в определенных случаях, например в геодезических чертежах, чертят именно в метрах. И масштаб, я считаю, все таки надо оставить. Выставим его по умолчанию 1000 и будем пропускать нажатием [Enter]. Вы кстати не сказали мне ничего по поводу текста. Надо ли вводить какие либо настройки. Можно сделать так. В начале программы будет вылезать Scale<1:1000>/Height<250.0>/Width<1.0>/Color<By Layer> or [Enter] to Continue. В треугольных скобках, наиболее удобные зачения по умолчанию, которые можно поменять или перейти к "маркировке" нажатием [Enter]. Или это лишние навороты? >Grinzaid А как насчет BOUNDARY, она ведь именно так и работает. Можно создать BOUNDARY, померять площадь, BOUNDARY "убить" (если не нужна). Думаю что тело функции меряющей площадь надо оформить в одну программу, запрос масштаба (и возможно других параметров) в другую, а создание BOUNDARY и его удаление в третью. И сделать так: ЗАПРОСИТЬ ПАРАМЕТРЫ ЛЕЙБЛА (1 раз)>ВЫЗВАТЬ "BOUNDARY" CО ВСЕМИ СОПУТСТВУЮЩИМИ ПАРАМЕТРАМИ (наиболее предпочтительные параметры по умолчанию, изменить их или продолжить Enter) > ИЗМЕРИТЬ ПЛОЩАДЬ И ВСТАВИТЬ ЛЕЙБЛ> УДАЛИТЬ "BOUNDARY" (ЕСЛИ НУЖНО) >ВЕРНУТЬСЯ К ПАРАМЕТРАМ "BOUNDARY". Таким образом мы получим две функции, одна попроще и быстрее, другую мение помедленней но более функциональную. Я конечно, мало соображаю в архитектурном деле, только чертежи ваши своими системами безопасности засоряю. Программирую из "любви к исскуству", так уж подскажите если что не так. Вы Влад, по моему сами неплохо программируете. Бывал я в вашем Тель-Авиве, в командировке на 10 дней, жил в маленькой гостинице напротив отеля "Opera". Понял что хлебушек в Израиле очень тяжело достаеться... А еще кредитами всякими, "на иглу" конкретно сажают. Наверное чтобы в Штаты не сбежали? Однако остыло все... |
|||
|
||||
Проектировщик ВК. LISP-любитель. Регистрация: 15.12.2003
Москва
Сообщений: 1,189
|
Могу предложить на суд свою прогу, именно с BOUNDARY, текст с значением площади она не вставляет, ну да это не трудно сделать. Выдает сообщение со значением площади и периметра в единицах акада и в метрах при масштабе 1:1, т.е. в 1 ед.=1мм. Работает с замкнутыми площадями образованными любыми примитивами кроме SPLINE. (это надо еще доработать). За один сеанс можно указать несколько точек в разных контурах и в конце получить их сумму площадей и периметров. Код получился довольно громоздкий, поэтому сдесь размещать не буду, найдете сдесь http://www.apelsi.narod.ru/lisp.html
|
|||
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
>Apelsinov
Превосходный ЛИСП! Я тоже вчера эксперементировал с BOUNDARY, но чтобы добиться подобных результатов, надо еще работать. Единственное, исправьте ошибочку. У вас усть функция MODES, она в 4-й строке вызываеться как _MODES, соответственно выскакивает ошибка. >Dima Я дорабатываю. Будет 3 режима. Выбор замкнутых объектов, выбор "фиктивно" замкнутых объектов (с Boundary), выбор по точкам. Также будет суммирование. С масштабом, я напортачил :? ... Вот вам пока, рабочая функция для замкнутых объектов. Мастаб 1:1 для чертежа 1:1 в миллиметрах, есть настройка высоты шрифта. Код:
|
|||
|
||||
Архитектор Регистрация: 14.10.2003
Израиль
Сообщений: 365
|
Я себе такую простую штуку накалякал, и она работает:
Код:
|
|||
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
А ведь точно! Пробовал я на реальном чертеже, а там домик 11-ти этажный, и по крайней мере два этажа в вид попадали. Надо попробовать делать ZOOM при выполнении этой функции. На нарисованном в чистом файле прямоугольнике, все быстро. Надо еще "апельсиновый" код, повнимательней посмотреть, у него на том же чертеже "притормаживает", ну только самую малость и защита от сбоев вся написана.
|
|||
|
||||
Архитектор Регистрация: 14.10.2003
Израиль
Сообщений: 365
|
Чуть доработал. Но как объединить обе функции в одну команду, чтобы лишь однажды задать определения, а потом только заверять заданные значкния в <>? А ещё лучше для изменения запрашивать подфункцию:
Pick an insertion point of string [Drawing units/Necessary units]: Я - начинающий в AuloLISP, и пока до такого грамотного построения не дошёл. Подскажите, а? :roll: Код:
|
|||
|
||||
AutoCAD/AutoLISP Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133
|
(defun c:ar1 (/ cl cm scl ht1 pt1 ar ht lb lay)
(setq cl (getvar "clayer")) (setq cm (getvar "cmdecho")) (setvar "cmdecho" 1) (setq scl (getvar "dimscale")) (setq ht1 (rtos (* 0.125 scl) 2 2)) (command "area" "o" pause) (setq ar (getvar "area")) (setq lay (tblsearch "layer" "label$")) (if (= lay nil) (command "-layer" "m" "label$" "") ) (setvar "clayer" "label$") (setq lb (tblsearch "style" "label$")) (if (= lb nil) (command"-style" "label$" "romans" "" "" "" "" "" "") ) (setq ht (getstring (strcat "Text Hight: <" ht1 ">") )) (if (= ht "")(setq ht ht1)) (setq pt1 (getpoint"\nLabel Insertion Point")) (command "text" pt1 ht "" (rtos ar 2 2)) (setvar "clayer" cl) (setvar "cmdecho" cm) (princ) ) |
|||