Тема: Макрос. Многоульник с заданным значением сторон

Т.к. обычно командой _polygon пользуюсь для рисования шестиугольника, то кнопку прописал ^C^C_polygon;6;^C^C;

Re: Макрос. Многоульник с заданным значением сторон

Денис, но ты ведь экономишь всего один клик мыши, и для этого совсем неразумно держать лишнюю кнопку на экране. Общее правило для составления макросов такое: набираешь на клавиатуре нужную последовательность команд и опций, и сразу-же, после каждого нажатия на клавишу или кнопку мыши,  записываешь действие на бумагу. Enter это точка с запятой, у тебя правильно, а ручной ввод данных, в твоем случае - указание центра и радиуса, это наклонная обратная косая черта, вот такая \. Значит, их должно быть две. Так что попробуй опять, но лучше не в этой ветке, а или в основной, или Настройка меню и diesel. Ну а когда приличный и полезный макрос получится, давай его сюда.

Re: Макрос. Многоульник с заданным значением сторон

> Денис Флюстиков
IMHO.
Зачем там ^C^C в конце? Хватит и такого:
^C^C_polygon;6
Только зачем такой макрос и, соответственно, кнопка вообще? Первый раз указал, что надо 6 сторон, AutoCAD и запомнил.
Вообще-то, по названию темы можно предположить, что задается РАЗМЕР стороны шестиугольника. Вот это было бы поинтересней.

Re: Макрос. Многоульник с заданным значением сторон

При макросе ^C^C_polygon;6;^C^C; уже при первом запуске задано 6 сторон и в отличии от ^C^C_polygon;6 есть возможность перезадать это кол-во, а насчет темы, приношу извинения, задается только начальное кол-во сторон.

Re: Макрос. Многоульник с заданным значением сторон

Не удержался и слепил программку отрисовки правильного шестиугольника с заданием размера стороны:

;**************** pg6.lsp ******************************
;      Отрисовка правильного шестиугольника
;      с заданным размером стороны.
;
(defun C:PG6 ( / echo osm pp st)
(setq echo (getvar "CMDECHO"))
(setvar "CMDECHO" 0)
(setq osm (getvar "OSMODE"))
(setvar "OSMODE" 0)
(initget 7)
(setq pp (getpoint "\n Укажите центр шестиугольника: "))
(initget 7)
(setq st (getreal "\n Размер стороны шестиугольника: "))
(vl-cmdf "_polygon" "6" pp "_I" st)
(setvar "CMDECHO" echo)
(setvar "OSMODE" osm)
(princ)
)

Re: Макрос. Многоульник с заданным значением сторон

> Владимир Громов
Я бы заменил

(setq st (getreal "\n Размер стороны шестиугольника: "))

на

(setq st (getdist "\n Размер стороны шестиугольника: "))

Re: Макрос. Многоульник с заданным значением сторон

> kpblc
Можно и так.

Re: Макрос. Многоульник с заданным значением сторон

Чем хорош LISP-вариант, что в диалог можно заложить варианты выбора из стандартного ряда размеров "под ключ"

Re: Макрос. Многоульник с заданным значением сторон

> Денис Флюстиков
Да, только ориентация однозначна, хотя можно добавить, скажем, поворот на 30 градусов.

Re: Макрос. Многоульник с заданным значением сторон

Как вариант:

;|=============================================================================
*    Отрисовка многогранника
*    Параметры вызова:
*    edge-range    количество сторон
*    Примеры вызова:
(_mod-polygon 3)    ; отрисовка правильного 3-угольника
(_mod-polygon 10)    ; отрисовка правильного 10-угольника
=============================================================================|;
(defun _mod-polygon
       (edge-range / _cmdecho_ _osmode_ _nomutt_ edge_len pol_center msg adoc)
  (vl-load-com)
  (setq    adoc       (vla-get-activedocument (vlax-get-acad-object))
    _cmdecho_  (getvar "cmdecho")
    _nomutt_   (getvar "nomutt")
    _osmode_   (getvar "osmode")
    msg       (strcat "\nУкажите центр " (itoa edge-range) "-угольника : ")
    pol_center (getpoint msg)
    msg       (strcat "\nУкажите длину ребра " (itoa edge-range) "-угольника : ")
    edge_len   (getdist msg)
    ) ;_ end of setq
  (vla-startundomark adoc)
  (mapcar 'setvar
      (list "cmdecho" "nomutt" "osmode")
      (list 0 1 0)
      ) ;_ end of mapcar
  (command "_.polygon" edge-range pol_center "_I" edge_len)
  (mapcar 'setvar
      (list "cmdecho" "nomutt" "osmode")
      (list _cmdecho_ _nomutt_ _osmode_)
      ) ;_ end of mapcar
  (vla-endundomark adoc)
  ) ;_ end of defun

Без проверки.

Re: Макрос. Многоульник с заданным значением сторон

> kpblc
Тут досадная неточность. При построении в AutoCAD'е многоугольника надо задавать РАДИУС описанной/вписанной окружности, а не размер стороны. И только для шестиугольника размер стороны равен радиусу описанной окружности, поэтому и в запросе можно было написать "Размер стороны шестиугольника: ". Жаль.

Re: Макрос. Многоульник с заданным значением сторон

Ну да, верно... Тогда писать лисп/макрос на это дело в принципе бессмысленное занятие - всех вариантов не предусмотришь.

Re: Макрос. Многоульник с заданным значением сторон

Однако, что такое "многоульник" (см. название темы) так и осталось неизвестным...:-)

Re: Макрос. Многоульник с заданным значением сторон

> Денис Флюстиков
"Правильный" макрос. Я его уже прописал вместо штатной кнопки. Нет никакой лишней кнопки. И вообще не бывает лишних кнопок. Это "Vova". (автор "...и создание кнопок") :)))
И раздел, где помещен был этот макрос, изначально был правильный.

Re: Макрос. Многоульник с заданным значением сторон

> Владимир Громов
А LISP- программу можно было- бы написать.
В диалоге которой был- бы только один вопрос:
"Сн. - размер под ключ". И все. Удобная была- бы
программа для машиностроителей.