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

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

Войти

Внесение Y в текст (помогите дописать)

Тема в разделе "Autodesk", создана пользователем a.gonchy, 25 авг 2020.

  1. a.gonchy

    Регистрация:
    6 окт 2017
    Сообщения:
    12
    Симпатии:
    0
    Доброго времени! Попытался вот написать простенький лисп, который будет брать координату Y в указанном месте, рисовать штрих (как на примере) и выносить текстом эту координату (опять же, как в примере); штрихи она у меня рисует, а вот как теперь координату в текст впихнуть — не понимаю; и ещё хорошо бы, чтобы она зацикливалась, пока не прервёшь (т.е. точки можно ставить сколько угодно раз без выбора нижние/верхние, а как прервал, так снова выбираешь). Если кто-то сможет дополнить, буду благодарен.


    Код:
    (defun c:СТЕННИВ () ;начало меню выбора
    (initget 1 "Верхние Нижние")
    (setq var (getkword "Расставить нивелировки [Верхние/Нижние]: ")) 
    (cond
    ((= var "Верхние" ) (c:Get_verh_grid))
    ((= var "Нижние" ) (c:Get_niz_grid))
    )) ;конец меню выбора
     
    (defun c:Get_verh_grid (/ p1 p2 y) ;выбрал верхние
    (setq p1 (getpoint "\nВыберите точку: "))
    (setq p2 (polar p1 (/ pi 2) 0.074))
    (setq osm (getvar "osmode")) ;запоминает пользовательскую привязку
    (setvar "osmode" 0) ;выключает привязку
    (command "_line" p1 p2 "") ;рисует линию
    (setvar "osmode" osm) ;включает привязку обратно
    )
     
    (defun c:Get_niz_grid (/ p1 p2 y) ;выбрал нижние
    (setq p1 (getpoint "\nВыберите точку: "))
    (setq p2 (polar p1 (-(/ pi 2)) 0.074))
    (setq osm (getvar "osmode")) ;запоминает пользовательскую привязку
    (setvar "osmode" 0) ;выключает привязку
    (command "_line" p1 p2 "") ;рисует линию
    (setvar "osmode" osm) ;включает привязку обратно
    )
     

    Вложения:

    #1
  2. 1958

    Форумчанин

    Регистрация:
    21 авг 2013
    Сообщения:
    639
    Симпатии:
    699
    Адрес:
    СССР, город хлебный
    Пробуй
     

    Вложения:

    • st.LSP
      Размер файла:
      1,1 КБ
      Просмотров:
      2
    #2
    a.gonchy нравится это.
  3. a.gonchy

    Регистрация:
    6 окт 2017
    Сообщения:
    12
    Симпатии:
    0
    Большое спасибо! Не могли бы вы закомментировать ключевые строки? Интересует место, где он из полученной "р1" вынимает координату Y (как я понял, это будет "cadr p1"?) и то место где он создаёт текст. Структуру хочу оставить свою (потому что смогу её потом редактировать, т.к. придётся менять длину штриха, расстояние от текста до штриха, высоту текста и т.д. в зависимости от каждого нового ТЗ, а использовать готовый продукт не разобравшись — потом аукнется).
     
    #3
  4. 1958

    Форумчанин

    Регистрация:
    21 авг 2013
    Сообщения:
    639
    Симпатии:
    699
    Адрес:
    СССР, город хлебный
    Кстати, завершение операции - нажатие [enter] или клик правой клавишей мышки.
    Файл с комментариями:
     

    Вложения:

    • st.LSP
      Размер файла:
      1,5 КБ
      Просмотров:
      3
    #4
    a.gonchy нравится это.
  5. a.gonchy

    Регистрация:
    6 окт 2017
    Сообщения:
    12
    Симпатии:
    0
    Выручаете! Последняя пара вопросов, если не затруднит; авось, кому-то ещё пригодится:
    1. Насколько я понял, команда cadr обрезает первую переменную списка и выдаёт вторую переменную за первую, в таком случае, командой car я получу координату x, а командой caadr — координату высоты, правильно?
    2. Как кодом заставить команду зацикливаться на себе до отмены? Я додумался только до примитивного "c:имя команды" в конце строки выполнения, таким образом она после завершения сама себя опять запускает. Есть способ проще?
    3. Я так и не понял строку "dy (* 0.05 v) f 2", что она делает? Можно ли её разобрать подробнее?
    4. И последний; после команды entmakex у вас в коде список, где каждый cons отвечает за что-то своё, если ли какая-то сводная таблица, например, cons 40 — это размер шрифта, почему так, не понятно :)
     
    #5
  6. 1958

    Форумчанин

    Регистрация:
    21 авг 2013
    Сообщения:
    639
    Симпатии:
    699
    Адрес:
    СССР, город хлебный
    1. car - извлечение первого элемента списка; cadr - второго; cdr - список без первого элемента; caaar (caddr) - третий элемент; last - последний. Если нужно выбрать Z из списка координат точки pt (x y z) - setq z (last pt)
    2. Я использовал (while (setq p1 (getpoint "\nВыберите точку: ")) - цикл. Пока выбирается (отмечается) точка (команда getpoint), операция продолжается. Как только происходит пустой ввод (нажали enter или правую клавишу мышки), цикл завершается.
    3. dy - это смещение точки вставки текста по оси Y, чтобы текст не накладывался (прилипал) к штриху. f - это параметр точки привязки текста (выравнивание) (влево-верх, вправо-верх, ...)
    4. entmakex (создать) - в его теле прописываются все условия для создания текста (в данном случае). cons - это и есть параметры (условия), которые содержат коды dxf, в частности (cons 10 ...) - это координаты вставки (код dxf = 10); (cons 40 0.13) - размер шрифта (код dxf = 40), 0.13 - это размер.
    Поищите в инете учебник Николай Полещук, Петр Лоскутов "AutoLISP и Visual LISP в среде AutoCAD", там всё подробно и наглядно объяснено. Учите матчасть и будет вам счастье.
     
    #6
    MaxKal, a.gonchy и Qvinto нравится это.

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

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