| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Autolisp считывания переменных в новом файле

Autolisp считывания переменных в новом файле

Ответ
Поиск в этой теме
Непрочитано 18.07.2015, 09:34 #1
Autolisp считывания переменных в новом файле
DENBASS2004
 
Регистрация: 24.06.2009
Сообщений: 94

Почему после того как я загоняю переменную через vl-propagate, при открытие нового файла он ее воспринимает, но в формулу не подставляет?

Прописываю необходимые данные, и необходимые данные вычисляю по формуле.

(setq D (getint "\n Введите диаметр колонны D >: "))
(vl-propagate 'D)
(setq S1 (getint "\n Введите основную толщину металла S1 >: "))
(vl-propagate 'S1)
(setq Rn (/ D 2))
(vl-propagate 'Rn)

открывая новый документ (print) их выводит, но если я их в новом файле загоняю в формулу он их не вычисляет

(setq tm1 (list (- 0 (- Rn 10)) (- 0 S1)))
(print tm1) nil

Подскажите что не так?
Просмотров: 3517
 
Непрочитано 18.07.2015, 15:38
#2
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


НЕ подтверждаю, Автокад 2014(рус):
Чертеж1
Код:
[Выделить все]
Команда: 'VLIDE
 Введите диаметр колонны D >: 400
 Введите основную толщину металла S1 >: 20
Команда:
Команда: !d
400
Команда: !s1
20
Команда: !rn
200
Чертеж2
Код:
[Выделить все]
Команда: !d
400
Команда: !rn
200
Команда: !st
nil
Команда: !s1
20
Команда: (setq tm1 (list (- 0 (- Rn 10)) (- 0 S1)))
(-190 -20)
Чертеж3
Код:
[Выделить все]
Команда: (setq tm1 (list (- 0 (- Rn 10)) (- 0 S1)))
(-190 -20)
Какая-то у тебя описка.
Делал всё копируя твой текст.
М.б. какая-то переменная отвечает за это пространство?
Я эту возможность не использовал, поэтому широкой практики применения не имею.
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 19.07.2015, 18:55
#3
DENBASS2004


 
Регистрация: 24.06.2009
Сообщений: 94


Цитата:
Сообщение от Alan Посмотреть сообщение
Какая-то у тебя описка.
Делал всё копируя твой текст.
М.б. какая-то переменная отвечает за это пространство?
Я эту возможность не использовал, поэтому широкой практики применения не имею.
не знаю, у меня кад 2015 (рус) дома 2009 (eng) ни там ни там не работает. У вас команда 'VLIDE может дело в ней? посмотрю как перестроить свою запись. Спасибо что ответили.

----- добавлено через ~60 мин. -----
Цитата:
Сообщение от Alan Посмотреть сообщение
М.б. какая-то переменная отвечает за это пространство?
а не мог бы ты прислать настроенные переменные на твоем автокаде? я бы сравнил с моими на 2015
DENBASS2004 вне форума  
 
Непрочитано 19.07.2015, 21:47
#4
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от DENBASS2004 Посмотреть сообщение
У вас команда 'VLIDE может дело в ней?
VLIDE (Visual Lisp Integrated Development Environment) - надеюсь что отладку ЛИСП"а делаешь в этом редакторе.
Настройки переменных стандартные, использовался файл acadiso.dwt без всяких "приблуд".
Что-то конечно висит в реестре...
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...

Последний раз редактировалось Alan, 19.07.2015 в 21:54.
Alan вне форума  
 
Автор темы   Непрочитано 19.07.2015, 21:54
#5
DENBASS2004


 
Регистрация: 24.06.2009
Сообщений: 94


Цитата:
Сообщение от Alan Посмотреть сообщение
VLIDE (Visual Lisp Integrated Development Environment) - надеюсь что отладку ЛИСП"а делаешь в этом редакторе.
Настройки переменных стандартные, использовался файл acadiso.dwt без всяких "приблуд".
Я уже проверил свою программу. Открыл файл задал все данные, загнав их в память. Закрыл файл, открыл новый и о чудо он определил мне точку по формуле. Но вот как только я ее запускаю полностью, чудо исчезает. В новом файле лисп не перестает работать, хоть мне и говорили что лисп работает в контексте только с одним файлом. У меня после открытия другого файла он работает. Он знает чему равны все данные беря их из памяти, но вот подставлять в формулу их не хочет
DENBASS2004 вне форума  
 
Непрочитано 19.07.2015, 22:36
#6
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от DENBASS2004 Посмотреть сообщение
Но вот как только я ее запускаю полностью, чудо исчезает.
Гадание по фотографии на другом форуме.

Цитата:
Сообщение от DENBASS2004 Посмотреть сообщение
. В новом файле лисп не перестает работать,
Не знаю что ты имеешь ввиду.
ЛИСП-программа, которая работала в файле1, в файле 2 НЕ работает пока ты её не загрузишь и запустишь.
Переменные, помещенные в namespaces тебе доступны.
Не знаю зачем тебе это надо, ведь всё это есть только в этом сеансе, но тебе виднее.
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 19.07.2015, 22:39
#7
DENBASS2004


 
Регистрация: 24.06.2009
Сообщений: 94


Цитата:
Сообщение от Alan Посмотреть сообщение
Гадание по фотографии на другом форуме.
Ок.
;вводим данные

(setq D (getint "\n Введите диаметр колонны D >: "))
(vl-propagate 'D)
(setq L (getint "\n Введите ширину кармана L >: "))
(vl-propagate 'L)
(setq S1 (getint "\n Введите основную толщину металла S1 >: "))
(vl-propagate 'S1)
(setq S2 (getint "\n Введите дополнительную толщину металла S2 >: "))
(vl-propagate 'S2)

;вычисляем необходимые величины

(setq P0 (list 0 0 (- 0 S1)))
(vl-propagate 'P0)
(setq P1 (list 0 0 (- 0 S1 500)))
(vl-propagate 'P1)
(setq Rn (/ D 2))
(vl-propagate 'Rn)
(setq Rv (- Rn 60))
(vl-propagate 'Rv)
(setq Kx (- Rn L 64))
(vl-propagate 'Kx)
(setq L1 (atoi (rtos (sqrt (* 4 (- (expt Rn 2) (expt (- Rn L) 2)))) 2 0)))
(vl-propagate 'L1)
(setq L2 (atoi (rtos (sqrt (* 4 (- (expt Rn 2) (expt (- Rn L 63) 2)))) 2 0)))
(vl-propagate 'L2)
(setq L3 (atoi (rtos (sqrt (* 4 (- (expt Rn 2) (expt (- Rn L S1 20) 2)))) 2 0)))
(vl-propagate 'L3)
(setq Y1 (atoi (rtos (/ L3 6) 2 0)))
(vl-propagate 'Y1)
(setq L4 (atoi (rtos (sqrt (* 4 (- (expt Rn 2) (expt (- Rn (- Rn Y1)) 2)))) 2 0)))
(vl-propagate 'L4)
(setq X1 (atoi (rtos (/ L4 2) 2 0)))
(vl-propagate 'X1)
(setq L5 (atoi (rtos (sqrt (* 4 (- (expt Rn 2) (expt (- Rn (- L 72)) 2)))) 2 0)))
(vl-propagate 'L5)
(setq n1 (atoi (rtos (/ L1 2 200))))
(vl-propagate 'n1)
(setq c (- (/ L1 2) (* n1 200)))
(vl-propagate 'c)
(if (or (and (>= c 0) (<= c 49)) (and (>= c 151) (<= c 199))) (setq n2 100) (setq n2 0))
(vl-propagate 'n2)

;построение косынки под кольцом

(command "_.box" (list (- 0 (/ S2 2)) Rv (- 0 S1 60)) "_length" S2 60 60 )
(command "_.-view" "_swiso")
(command "_.chamfer" (list 0 Rn (- S1)) "" "10" "10" (list 0 Rn (- S1)) "")
(command "_.chamfer" (list 0 Rv (- 0 S1 60)) "" "40" "40" (list 0 Rv (- 0 S1 60)) "")
(setq 1kosinka (entlast))
(command "_.-wblock" "D:\\Проект\\Сепаратор\\Опорные элементы\\01-01.00.002-Косынка.dwg" 1kosinka "0,0,0" 1kosinka"")
(command "_.-insert" "D:\\Проект\\Сепаратор\\Опорные элементы\\01-01.00.002-Косынка.dwg" "0,0,0" "" "" "")
(command "_sdi" 1)
(setq Ch1 (command "_open" "_no" "D:\\Проект\\Сепаратор\\Опорные элементы\\01-00.00.000 СБ-Опорные элементы.dwg" "D:\\Проект\\Сепаратор\\Опорные элементы\\01-01.00.002-Косынка.dwg"))
(command "_sdi" 0)

(setq tm1 (list (- 0 (- Rn 10)) (- 0 S1)))
!tm1 nil
DENBASS2004 вне форума  
 
Непрочитано 19.07.2015, 22:43
#8
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Ты теги [code][lisp] по определению не вставляешь?
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Автор темы   Непрочитано 19.07.2015, 22:48
#9
DENBASS2004


 
Регистрация: 24.06.2009
Сообщений: 94


Цитата:
Сообщение от Alan Посмотреть сообщение
Ты теги [code][lisp] по определению не вставляешь?
ну, не то что бы по определению, просто копирую текст и вставляю. уж как умею
DENBASS2004 вне форума  
 
Непрочитано 20.07.2015, 09:31
#10
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Тебе немного усилий не приложить, чтобы другим удобнее было работать?

Добавил видео "как хотя бы [code][/code] добавить"
Вложения
Тип файла: zip tag_codes.zip (2.09 Мб, 15 просмотров)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.07.2015, 10:29
#11
DENBASS2004


 
Регистрация: 24.06.2009
Сообщений: 94


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Тебе немного усилий не приложить, чтобы другим удобнее было работать?
Код:
[Выделить все]
;вводим данные

(setq D (getint "\n Введите диаметр колонны D >: "))
(vl-propagate 'D)
(setq L (getint "\n Введите ширину кармана L >: "))
(vl-propagate 'L)
(setq S1 (getint "\n Введите основную толщину металла S1 >: "))
(vl-propagate 'S1)
(setq S2 (getint "\n Введите дополнительную толщину металла S2 >: "))
(vl-propagate 'S2)

;вычисляем необходимые величины

(setq P0 (list 0 0 (- 0 S1)))
(vl-propagate 'P0)
(setq P1 (list 0 0 (- 0 S1 500)))
(vl-propagate 'P1)
(setq Rn (/ D 2))
(vl-propagate 'Rn)
(setq Rv (- Rn 60))
(vl-propagate 'Rv)
(setq Kx (- Rn L 64))
(vl-propagate 'Kx)
(setq L1 (atoi (rtos (sqrt (* 4 (- (expt Rn 2) (expt (- Rn L) 2)))) 2 0)))
(vl-propagate 'L1)
(setq L2 (atoi (rtos (sqrt (* 4 (- (expt Rn 2) (expt (- Rn L 63) 2)))) 2 0)))
(vl-propagate 'L2)
(setq L3 (atoi (rtos (sqrt (* 4 (- (expt Rn 2) (expt (- Rn L S1 20) 2)))) 2 0)))
(vl-propagate 'L3)
(setq Y1 (atoi (rtos (/ L3 6) 2 0)))
(vl-propagate 'Y1)
(setq L4 (atoi (rtos (sqrt (* 4 (- (expt Rn 2) (expt (- Rn (- Rn Y1)) 2)))) 2 0)))
(vl-propagate 'L4)
(setq X1 (atoi (rtos (/ L4 2) 2 0)))
(vl-propagate 'X1)
(setq L5 (atoi (rtos (sqrt (* 4 (- (expt Rn 2) (expt (- Rn (- L 72)) 2)))) 2 0)))
(vl-propagate 'L5)
(setq n1 (atoi (rtos (/ L1 2 200))))
(vl-propagate 'n1)
(setq c (- (/ L1 2) (* n1 200)))
(vl-propagate 'c)
(if (or (and (>= c 0) (<= c 49)) (and (>= c 151) (<= c 199))) (setq n2 100) (setq n2 0))
(vl-propagate 'n2)

;построение косынки под кольцом

(command "_.box" (list (- 0 (/ S2 2)) Rv (- 0 S1 60)) "_length" S2 60 60 )
(command "_.-view" "_swiso")
(command "_.chamfer" (list 0 Rn (- S1)) "" "10" "10" (list 0 Rn (- S1)) "")
(command "_.chamfer" (list 0 Rv (- 0 S1 60)) "" "40" "40" (list 0 Rv (- 0 S1 60)) "")
(setq 1kosinka (entlast))
(command "_.-wblock" "D:\\Проект\\Сепаратор\\Опорные элементы\\01-01.00.002-Косынка.dwg" 1kosinka "0,0,0" 1kosinka"")
(command "_.-insert" "D:\\Проект\\Сепаратор\\Опорные элементы\\01-01.00.002-Косынка.dwg" "0,0,0" "" "" "")
(command "_sdi" 1)
(setq Ch1 (command "_open" "_no" "D:\\Проект\\Сепаратор\\Опорные элементы\\01-00.00.000 СБ-Опорные элементы.dwg" "D:\\Проект\\Сепаратор\\Опорные элементы\\01-01.00.002-Косынка.dwg"))
(command "_sdi" 0)

(setq tm1 (list (- 0 (- Rn 10)) (- 0 S1)))
!tm1 nil
DENBASS2004 вне форума  
 
Непрочитано 20.07.2015, 10:44
#12
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Мой тебе совет:
1. Повторюсь, учи матчасть
2. Используй во VLIDE пошаговую отладку с запоминанием переменных
3. Смотри также в командную строку после выполнения команд, при использовании "командного метода".
Например, использование SDI
Код:
[Выделить все]
Команда: _sdi
Новое значение SDI <0>: 1 Переменная SDI не может быть переустановлена, если открыто несколько чертежей.
Не удается присвоить данное значение переменной SDI.
*Неверно*
Команда:
PS. Не хочу обсуждать необходимость ЭТОЙ твоей задачи. Но! На мой взгляд создание и использование базы
данных элементов таким способом не верно по определению. Ты вроде это хочешь делать....
PPS. Вопрос данной темы был о использовании (vl-propagate
Подтверждаю еще раз, (vl-propagate - РАБОТАЕТ
Если не выполнять
Код:
[Выделить все]
(command "_.-insert" "D:\\Проект\\Сепаратор\\Опорные элементы\\01-01.00.002-Косынка.dwg" "0,0,0" "" "" "")
(command "_sdi" 1)
(setq Ch1 (command "_open" "_no" "D:\\Проект\\Сепаратор\\Опорные элементы\\01-00.00.000 СБ-Опорные элементы.dwg" "D:\\Проект\\Сепаратор\\Опорные элементы\\01-01.00.002-Косынка.dwg"))
(command "_sdi" 0)
то tm1 вот она
Код:
[Выделить все]
Команда: (setq tm1 (list (- 0 (- Rn 10)) (- 0 S1)))
(-190 -10)
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 20.07.2015, 10:55
#13
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Отлично. Теперь:
1. Где определение функции?
2. Какая часть кода в каком файле выполняется?
3. Грабли с привязками - здрасьте.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.07.2015, 11:40
#14
DENBASS2004


 
Регистрация: 24.06.2009
Сообщений: 94


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Отлично. Теперь:
1. Где определение функции?
2. Какая часть кода в каком файле выполняется?
3. Грабли с привязками - здрасьте.
Определение функции нету, запускаю пока перетаскиванием в окно автокада.
Все относится к первому файлу
(setq Ch1 (command "_open" "_no" "D:\\Проект\\Сепаратор\\Опорные элементы\\01-00.00.000 СБ-Опорные элементы.dwg" "D:\\Проект\\Сепаратор\\Опорные элементы\\01-01.00.002-Косынка.dwg")) - эта строка закрывает первый файл и открывает второй.

(command "_sdi" 0)
(setq tm1 (list (- 0 (- Rn 10)) (- 0 S1)))
!tm1 nil

Вот эту !tm1 у меня почему то не определяет

----- добавлено через ~7 мин. -----
Цитата:
Сообщение от Alan Посмотреть сообщение
Если не выполнять
но мне надо выполнять, мне tm1 в первом файле вообще не нужна, она мне нужна во втором.
DENBASS2004 вне форума  
 
Непрочитано 20.07.2015, 11:48
#15
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,848


Цитата:
Сообщение от Alan Посмотреть сообщение
Мой тебе совет:
1. Повторюсь, учи матчасть
2. Используй во VLIDE пошаговую отладку с запоминанием переменных
3. Смотри также в командную строку после выполнения команд, при использовании "командного метода".
Идеально сказано!
ПРоверяй значение SDI; проверяй открытие файла и теде.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 20.07.2015, 11:48
#16
DENBASS2004


 
Регистрация: 24.06.2009
Сообщений: 94


Цитата:
Сообщение от Alan Посмотреть сообщение
Команда: _sdi
Новое значение SDI <0>: 1 Переменная SDI не может быть переустановлена, если открыто несколько чертежей.
Не удается присвоить данное значение переменной SDI
У меня только один файл открыт, других нету. Как раз когда задаю sdi 1, то он открывает новый файл, но при этом текущий принудительно закрывает
DENBASS2004 вне форума  
 
Непрочитано 20.07.2015, 11:54
#17
Alan

CAD
 
Регистрация: 28.08.2003
Киев
Сообщений: 1,835
<phrase 1=


Цитата:
Сообщение от DENBASS2004 Посмотреть сообщение
запускаю пока перетаскиванием в окно автокада.
Забудь как тёмный сон!
цЫцЫрую kpblc
Цитата:
Известно, что для написания кода LISP или DCL можно пользоваться разными средствами.
Цитата:
А вообще, у меня разработка состоит из нескольких этапов работы с VLIDE.
1. Написание кода, здесь, пишется сам код, одновременно, он выполняется построчно или поблочно, переписывается и.т.д, пока не будет готова программа или другой логический блок.
2. Тестирование – здесь код запускается на различных файлах с различными настройками и.т.д.
3. Отладка. Это самое сложное место. С одной стороны, код уже есть, а с другой, в нем найдены ошибки и в некоторых случаях, код работает не верно.....
У Полещука среда разработки VLIDE достаточно подробно расписана
Алексей написал о полезностях VLIDE http://autolisp.ru/2009/09/10/vlide-misc-01/ и http://autolisp.ru/2009/09/12/vlide-misc-02/
Цитата:
Сообщение от DENBASS2004 Посмотреть сообщение
Как раз когда задаю sdi 1,
Правильнее просто закрыть один чертеж и открыть второй.
Режим SDI=1 лучше не использовать никогда. ЯТД
__________________
По теории майский жук летать не может.
Но он этого не знает. И летает...
Alan вне форума  
 
Непрочитано 20.07.2015, 12:05
#18
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 980


DENBASS2004, по ходу читаешь только то, что хочется, хотя вроде не на китайском было сказано:
Цитата:
Сообщение от Alan Посмотреть сообщение
ЛИСП-программа, которая работала в файле1, в файле 2 НЕ работает пока ты её не загрузишь и запустишь.
Не, как об стенку горох. Я уверен, что все, кто пытался тебе помочь прежде всего обеспечивали загрузку соответствующего кода. Тебе же это параллельно, похоже.
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
 
Автор темы   Непрочитано 20.07.2015, 15:01
#19
DENBASS2004


 
Регистрация: 24.06.2009
Сообщений: 94


Цитата:
Сообщение от Лиспер Посмотреть сообщение
Не, как об стенку горох. Я уверен, что все, кто пытался тебе помочь прежде всего обеспечивали загрузку соответствующего кода. Тебе же это параллельно, похоже.
кому там о стенку горох я не знаю. в файле 2 не работает пока не запущу? Я уже устал говорить, что лисп работает, команды выполняются, определены все переменные, но формула где присутствуют эти переменные не вычисляется, почему уже голову всю сломал, но так и не пойму. У меня есть пока только один вариант, что бы снова сделал запрос на данные и снова все переменные высчитал. Но это белиберда получится. Я понимаю ,что может пытаюсь сделать невозможное. Но я не понимаю как он одновременно знает переменные, но формулу не вычисляет.
DENBASS2004 вне форума  
 
Непрочитано 20.07.2015, 15:13
#20
Лиспер


 
Регистрация: 11.10.2010
Сообщений: 980


Вот йопырысыты! Да потому что не определена она! Не загружена! Код вычисления формулы загрузи сначала.
Читай матчасть внимательно и вдумчиво - lisp работает только в том документе, куда он загружен. Учи, что такое видимость переменных и функций, что такое пространство документа, что такое пространство приложения.
__________________
(/= RegDate StartReadDate)
Лиспер вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Autolisp считывания переменных в новом файле

Размещение рекламы


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
AutoLisp не получается задать точку при помощи переменных granit201z LISP 1 11.10.2014 13:32
AutoLISP: Просачивание локальных переменных в тело используемых в выражении функций Supermax LISP 22 26.10.2010 00:27
Как перебрать все текстовые строки в открытом Автокадовском файле используя AutoLISP? lexluther LISP 9 26.08.2009 17:37