Скрипт для запуска файла AutoLISP - PullRequest
1 голос
/ 05 мая 2019

Я хочу нарисовать около 1000 фигур двух окружностей с касательными, используя этот файл lisp , который рисует одну фигуру за раз.

Я написал скрипт для рисования всех фигур (см. Ниже).), однако он ожидает после первого аргумента следующего аргумента, хотя он есть в скрипте.

Не могли бы вы подсказать мне, как исправить мой скрипт или как отредактировать файл lisp, чтобы я мог нарисовать всефигуры без интерактивного ввода?

Вот мой текущий сценарий:

ctan
0,0,0
5
0,10,0
10

1 Ответ

1 голос
/ 05 мая 2019

Проблема в том, что оценка функции Script и AutoLISP происходит в одном и том же потоке процессора, и поэтому при оценке функции AutoLISP из файла Script, функция AutoLISP отвлекает внимание от Script и остаток файла сценария будет оценен после функция AutoLISP завершила свою оценку.

Для решения этой проблемы я бы предложил определить отдельную функцию AutoLISP, которая принимает четыре аргумента, соответствующиек центрам и радиусам каждого круга, и который строит 2D LWPolyline так же, как и в моем круговых касательных приложения.

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

Такая функция может быть:

(defun ctan ( c1 r1 c2 r2 / d1 d2 a1 a2 zv )
    (if (< (abs (setq d1 (- r1 r2))) (setq d2 (distance c1 c2)))
        (progn
            (setq a1 (atan (sqrt (- (* d2 d2) (* d1 d1))) d1)
                  a2 (angle c1 c2)
                  zv (trans '(0.0 0.0 1.0) 1 0 t)
            )
            (entmake
                (list
                   '(000 . "LWPOLYLINE")
                   '(100 . "AcDbEntity")
                   '(100 . "AcDbPolyline")
                   '(090 . 04)
                   '(070 . 01)
                    (cons 010 (trans (polar c1 (+ a1 a2) r1) 1 zv))
                    (cons 042 (/ (sin (/ (- pi a1) 2.0)) (cos (/ (- pi a1) 2.0))))
                    (cons 010 (trans (polar c1 (- a2 a1) r1) 1 zv))
                    (cons 010 (trans (polar c2 (- a2 a1) r2) 1 zv))
                    (cons 042 (/ (sin (/ a1 2.0)) (cos (/ a1 2.0))))
                    (cons 010 (trans (polar c2 (+ a1 a2) r2) 1 zv))
                    (cons 210 zv)
                )
            )
        )
    )
)

Который, при загрузке, вы могли бы вызвать из вашегоСкрипт или другая программа AutoLISP, использующая:

(ctan '(0 0 0) 5 '(0 10 0) 10)
...