elima.ru
Мертвечина
Форум Вопросы по программе AutoCAD › Процедуры на AutoLISP
elima
администратор
05.08.05 - 20:29
Одномерный горизонтальный массив harray:
(DEFUN C:HARRAY()
(setvar "CMDECHO" 0)
(SETQ ss (SSGET))
(SETQ c (GETINT "
Количество элементов: "))
(SETQ d (GETREAL "
Дистанция между элементами?: "))
(COMMAND "array" ss "" "r" 1 c d )
(setvar "CMDECHO" 1)
(princ)
)
elima
администратор
07.08.05 - 12:50
Одномерный вертикальный массив varray:
(DEFUN C:VARRAY()
(setvar "CMDECHO" 0)
(SETQ ss (SSGET))
(SETQ r (GETINT "
Количество элементов: "))
(SETQ d (GETREAL "
Дистанция между элементами?: "))
(COMMAND "array" ss "" "r" r 1 d )
(setvar "CMDECHO" 1)
(princ)
)
elima
администратор
03.09.05 - 17:17
Фигурная скобка:
(DEFUN C:FIGU()
(setq os (getvar "osmode"))
(SETQ p1 (GETPOINT "Начальная точка ... "))
(SETQ p7  (GETPOINT "Конечная точка... "))
(setvar "CMDECHO" 0)
(SETVAR "OSMODE" 0)
(SETQ a1 (ANGLE p1 p7))
(SETQ f1 (ANGTOS a1 0 6))
(SETQ DIST (DISTANCE p1 p7))
(SETQ a2 (– a1 1.570769))
(SETQ f2 (ANGTOS a2 0 6))
(SETQ a3 (+ a1 1.570769))
(SETQ f3 (ANGTOS a3 0 6))
(SETQ a4 (– a1 0.785398))
(SETQ a5 (+ a1 0.785398))
(SETQ p2 (POLAR p1 a4 (* 0.0707106 DIST)))
(SETQ p3 (POLAR p2 a1 (* 0.4 DIST)))
(SETQ p4 (POLAR p3 a4 (* 0.0707106 DIST)))
(SETQ p5 (POLAR p4 a5 (* 0.0707106 DIST)))
(SETQ p6 (POLAR p5 a1 (* 0.4 DIST)))
(COMMAND "PLINE" p1 "A" "D" f2 p2 "L" p3 "A" "D" f1 p4 "D" f3 p5 "L" p6 "A" "D" f1 p7 "")
(SETVAR "OSMODE" os)
(setvar "CMDECHO" 1)
(princ)
)
elima
администратор
02.11.05 - 18:45
Быстрое рисование квадрата:
(defun c:QADRO(/ pt1 x y a x1 y1 pt2)
(setq pt1 (getpoint "
Ткни куда тебе надо: "))
(setq x (car pt1))
(setq y (cadr pt1))
(setq a (getdist "
Сторона квадрата?: "))
(setq x1 (+ x a))
(setq y1 (+ y a))
(setq pt2 (list x1 y1))
(command "rectang" pt1 pt2)
(princ)
)
elima
администратор
05.11.05 - 19:47
Копирование объектов путём поворота относительно указаной точки на указаный угол:
(DEFUN C:CR (/ SS PT AN)
 (SETQ ss (SSGET))
 (SETQ pt (GETPOINT "
Точка вращеня?: "))
 (SETQ an (GETREAL "
Угол вращения?: "))
   (COMMAND "copy" ss "" pt pt )
   (COMMAND "rotate" ss "" pt an )
 (princ)
)
elima
администратор
09.11.05 - 07:28
Масштабирование нескольких выбранных окружностей относительно их центра:
(DEFUN C:SCLCIRCL (/ SS EN ED AS)
 (SETQ FAC (GETREAL "
Enter scale factor for circles : "))
 (PRINC "Select circles for scale")
 (SETQ SS (SSGET))
 (WHILE (>(SSLENGTH SS) 0)
   (PROGN
   (SETQ EN (SSNAME SS 0))
   (SETQ ED (ENTGET EN))
   (SETQ AS (CDR (ASSOC '0 ED)))
   (SETQ PT1 (CDR (ASSOC '10 ED)))
   (IF (= AS "CIRCLE")
   (COMMAND "SCALE" EN "" PT1 FAC)
   )
   (PRIN1)
   (SSDEL EN SS)
 ))
 (PRIN1)
)
SLADE
посетитель
10.08.08 - 00:21
Доброго времени суток, с праздником – С ДНЕМ СТРОИТЕЛЯ!
Помнится мне , давным давно был у вас лисп – эмитация работы в Акаде!
Но сейчас не могу его найди.
??
gokors
посетитель
21.05.13 - 19:14
Со страницы скачал grass.lsp (очень нужно). Однако "неладно что-то в королевстве датском..."
Ниже – отчёт (тестировал в AutoCAD 2012 Portable-версия, в которой никаких глюков замечено не было):

AutoCAD 2012 -> Сервис -> Приложения  -> grass.LSP  -> Загрузить  -> grass.LSP успешно загружено -> Закрыть

Далее список команд из AutoCAD:

Команда: _appload grass.LSP успешно загружено.
Команда: GRASS
Start point of grass: 2,2
End point of grass: 2,19
Approximate height of grass :
Enter density factor, number from 1 to 6 <3>:
Неизвестная команда "LINE". Для вызова справки нажмите F1.
Неизвестная команда "GRASS". Для вызова справки нажмите F1.
Неизвестная команда "LINE". Для вызова справки нажмите F1.
Неизвестная команда "GRASS". Для вызова справки нажмите F1.
................... Многократное повторение 2-х последних строчек...........    

Киты, акулы и гуру ACAD, какие мысли по этому поводу?
Посейте разумное и доброе, отпишитесь...
elima
администратор
21.05.13 - 20:17
Это очень старый lisp (1994 г). Он вызывает системную команду "LINE".
Так как у вас русифицированный AutoCAD, вам нужно отредактировать файл: вместо "LINE" сделать "_LINE".
Потом снова сделать _appload.

Желаю удачи!
gokors
посетитель
27.05.13 - 14:29
elima,
я знал о необходимости ввода знака "_" в русских версиях ACAD перед командой на английском, но не допёр в данном случае. После внесения изменений в lisp трава нормально нарисовалась, БОЛЬШОЕ СПАСИБО за науку и потраченное время.

Но честно говоря, ожидал от grass.LSP немного большего. Задача – показать фактуру травы на чертеже надгробия (зелёный цвет). Плоскость можно застелить подходящей фотографией, а вот на холме (на котором стела) при аппроксимации поверхности кусочками неизбежно будут видны стыки (как изогнуть изображение в ACAD пока никто не придумал).

Короче, как в фильме Э.Рязанова: будем искать коня с крыльями...
gokors
посетитель
27.05.13 - 15:48
Вдогонку к предыдущему посту (отредактировать не удаётся):
Применить материалы и рендер нельзя, т.к. заказчику требуется видеоролик с облётом.
elima
администратор
27.05.13 - 19:22
1. Что касается "grass.lsp" – опрометчиво ждать трёхмерных возможностей от старинной процедуры :-)

2. Невозможность редактировать рядовым пользователям свои собственные сообщения – для меня новость. Буду разбираться...
Utan
посетитель
12.06.13 - 02:11
elima,
помогите, пожалуйста.

Нужен такой lisp:

напечатать (в чертеже) текстом высотой h длину каждого из нескольких  выбранных вручную отрезков  в x  мм выше середины каждого выбранного отрезка.

Самостоятельная попытка написания закончилась полным провалом...

Спасибо.
elima
администратор
12.06.13 - 17:39
Это нетривиальная задача... :-)
К сожалению я не располагаю временем для подобных занятий...
Utan
посетитель
16.06.13 - 21:58
elima,
извините, не предполагал, что задача, которую я не смог самостоятельно осилить, настолько сложна...

Зря я пытался отнять Ваше время. Оказывается, нужно было лучше искать – а именно, с использованием бусурманского аглицкого наречия.
Гугл тут же всё понял и переправил меня на какой-то импортный сайт.
Там обнаружилась программа,  которая делает почти то, что мне необходимо (определяет длину выделенных линий и добавляет эту длину вместе с порядковым номером линии к уже существующему тексту). Длина, как у них принято, в футах и дюймах.
С футами, дюймами, существующим текстом и номерами линий я разделался достаточно просто, но дальше  не хватило знаний. Например, нигде в Интернете (!) не смог найти списка аргументов для vla-addMText .
Вроде бы так: vla-addMText  <точка вставки> <высота текста> <сам текст>, но почти наверняка это не полный перечень...

В итоге получил практически то, что хотел.
Не смог 1) изменить привязку итогового Mtext`а  вместо Top left на Top center, Bottom center или Middle center и 2) изменить координату Y точки  вставки Mtex. Это приходится изменять уже в чертеже. Так что задачу можно считать решённой.

Подскажите, пожалуйста, существует ли в природе справочник, где можно было бы найти возможно более полное описание функций – например, упомянутой vla-addMText со всеми возможными для неё аргументами.

(Это, конечно, просьба не только к elima, но ко всем посетителям сайта.)

И вот ссылка на сайт с программой – вдруг кому пригодится :    http://www.cadtutor.net/forum/showthread.php?56723-Lisp-routine-to-measure-line-and-add-length-to-existing-text