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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Я начинаю заниматься программированием LISP (help)

Я начинаю заниматься программированием LISP (help)

Ответ
Поиск в этой теме
Непрочитано 19.02.2006, 20:00
Я начинаю заниматься программированием LISP (help)
mmax
 
Программист широкого профиля.
 
Челябинск
Регистрация: 08.09.2005
Сообщений: 722

Гопода, я начал этим заниматься совсем недавно, буквально в этом месяце. И у меня уже есть грандиозные планы например: чтобы автокад рисовал какие нибудь стандартные детали сам (болты, гайки шурупы итд)

И соответственно у меня начали появляться вопросы на которые г-н Полещук НН в своих произведениях не смог ответить в полном объеме, значит мне понадобится чья нибудь еще помощь.

У меня уже были вопросы которые я задал здесь и получил исчерпывающие ответы. Но если я на кждый вопрос буду создавать отдельный топик, то количество топиков будет = кол-ву вопросов, а вопросов миллион -- администраторы и модераторы данного ресурса наверное понимают о чем я. Да и такое кол-во ссылок не влезет мой..........

Вобщем я хотел бы все свои вопросы помещать в этот топик и надеюсь на поддержку знающих людей.

Всем заранее благодарен.
Просмотров: 78335
 
Непрочитано 22.02.2006, 11:50
#21
Кулик Алексей aka kpblc
Moderator

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


Цитата:
Сообщение от mmax
Так как геометрия штампа нам заранее известна<..>
Не совсем. Штамп может быть для первого листа, для последующего, для чертежей строительных изделий...
Цитата:
Сообщение от mmax
то с помощью ENTMAKE или COMMAND можно сразу заполнить все поля без проблем, те сначала создать функции заполнения с неопределенными переменными он с определенными точками вставки.
И чего? Повторно вставить такой блок будет уже невозможно. Действия пользователя, как правило, труднопредсказуемы, поэтому приходится извращаться.
Или идет попытка вставки не блока, а просто таблицы? Если именно таблица как примитив када, то там в ней нет вообще однострочного текста - только многострочные, да вдобавок со своим редактором (2005) [/quote]
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.02.2006, 12:39
#22
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


А если посмотреть в сторону анонимных блоков? Смысл такой что при каждой правке штампа старый блок отдает в Лисп-программу свои данные, Лисп рисует новый блок с новыми данными и вставляет на место. Чтоб не париться с выковыриванием текущих данных из примитивов блока, сохранять их желательно в XDATA. Примерно вот так.
Неиспользуемые анонимные блоки пургенятся автоматом толи при сохранении файла, то ли при открытии... Ну это если на блоках замкнуться....
vk вне форума  
 
Непрочитано 22.02.2006, 12:54
#23
Кулик Алексей aka kpblc
Moderator

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


> vk : при всем уважении, немного позволю себе поспорить.
Анонимные блоки не вычищаются. Вычищаются автоматически при закрытии файла блоки разбитых размеров *D. Почему и невозможно восстановить разбитые размеры, кстати.
По поводу XDATA... Выяснил я тут одну маленькую тонкость - известно, что их размер ограничен 16кб. Так вот, эти 16 кб дербанятся между всеми зарегистрированными приложениями. Именно поэтому добавить свои XDATA в ВЭ, например, практически нереально - они уже заняты собственно кадом. ИМХО - использовать функции (vlax-ldata-get) и (vlax-ldata-put) - тогда автоматом пишется и словарь, и данные неограничены в объеме. Эдуард тут рассказал, что у него здоровенный файл с такими штуками свободно ворочался.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 22.02.2006, 13:51
#24
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


> kpblc
Удаляются. И еще, переименовываются. Можно проверить такой функцией:
Код:
[Выделить все]
(vlax-for i (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) (princ (vla-get-name i)) (princ"\n") (princ))
Напихать в чертеж анонимных блоков,
сохранить,
поглядеть список,
удалить блок-два-три...,
сохранить и закрыть чертеж,
открыть, поглядеть список блоков (там же будут *Model_Space, *Paper_Space....),
и тэдэ....

Про объемы... 16 килобайт XDATA на каждый примитив... ИМХО, достаточно одного примитива чтоб прицепить к нему все переменные данные блока (ну, разве что кроме логотипа-картинки). Если все же этого не хватит, кто мешает использовать еще один примитив... Хотя, есть конечно и словари. Я об том что данные должны храниться компактно в специально определенном месте (это может быть и внешний файл в принципе), а не выковыриваться из TEXT'ов, содержащихся в блоке... Это конечно не сложно сделать, но к чему лишние трудности? Сама по себе графическая часть блока должна только отображать данные.
vk вне форума  
 
Автор темы   Непрочитано 23.02.2006, 03:55
#25
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Блоки и таблицы – это не сейчас.

У меня на подходе программа рисующая форматы А1-4 со штампом Ф1 потом я к ней прилеплю Ф2 и Ф2а, строительством не занимаюсь.
Рисоваться они будут с помощью отрезков, для толщин линий будут созданы соответствующие слои.
Над заполнением штампа я еще размышляю. Предложенный мною способ, описанный выше, даже мне кажется немного извращенным и сложным и очень трудно будет его адаптировать под обезьяну с гранатой.
Думаю, лучше будет создать диалог похожий на штамп – так будет удобнее и проще. Худо-бедный DCL генератор я всетаки раздобыл http://www.cad.dp.ua/files/dcg101.zip
Вобщем как я понимаю в этом вопросе спасение утопающих очень сложная задача.

Подскажите тогда такое:
При рисовании _LINE очень часто приходится первую точку щелкать мышью или указывать с клавиатуры, а вторую, указав направление мышью, ввести длину линии те одно число.
Как бы этот способ реализовать с помощью Command или vl-cmdf. Область применения я еще пока не определил, но хотелось бы знать заранее вдруг приспичит.
mmax вне форума  
 
Непрочитано 23.02.2006, 10:05
#26
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Первую точку определяешь как список (как обычно), а для ожидания пользовательского ввода есть служебное слово pause, его вместо второй точки.
vk вне форума  
 
Автор темы   Непрочитано 23.02.2006, 14:30
#27
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Столкнулся с такой проблемой

Код:
[Выделить все]
(if (progn
              (условие 1)
               (условие 2)
                (условие 3)
                 );;progn
(Выполнить действие)
);;if
Получается, что если хотябы одно условие верно действие выполняется. Мне бы холтелось бы наоборот -- хотябы одно условие не верно -- действие не выполнять
mmax вне форума  
 
Автор темы   Непрочитано 23.02.2006, 14:32
#28
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Цитата:
Сообщение от vk
Первую точку определяешь как список (как обычно), а для ожидания пользовательского ввода есть служебное слово pause, его вместо второй точки.
А как с направлением?
mmax вне форума  
 
Непрочитано 23.02.2006, 15:35
#29
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от mmax
Столкнулся с такой проблемой

Код:
[Выделить все]
(if (progn
              (условие 1)
               (условие 2)
                (условие 3)
                 );;progn
(Выполнить действие)
);;if
Получается, что если хотябы одно условие верно действие выполняется. Мне бы холтелось бы наоборот -- хотябы одно условие не верно -- действие не выполнять
Эт кто ж Вас научил такому? Правильней все же так
Код:
[Выделить все]
(if (and
       (условие 1)
       (условие 2)
       (условие 3)
     );;and
   (progn
    (Выполнить действие)
    (Выполнить действие)
    (Выполнить действие)
    (Выполнить действие)
  );;progn
);;if
Ну и почитайте документацию по применению логических функций
vk вне форума  
 
Непрочитано 23.02.2006, 15:40
#30
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Цитата:
Сообщение от mmax
Цитата:
Сообщение от vk
Первую точку определяешь как список (как обычно), а для ожидания пользовательского ввода есть служебное слово pause, его вместо второй точки.
А как с направлением?
А что с направлением? Вы ж хотите
Цитата:
а вторую, указав направление мышью, ввести длину линии те одно число.
так и возюкайте мышОм для направления
vk вне форума  
 
Автор темы   Непрочитано 24.02.2006, 23:09
#31
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Всем привет

Оцените мое первое произведение.

samo_format_dialog.DCL

Код:
[Выделить все]
samo_format_dialog : dialog {
    label = "Вставка форматов ГОСТ 2.301-68 и 2.104-68 ЕСКД";
    : boxed_radio_row {
        label = "Вставить формат (Основная надпись Ф1)";
        mnemonic = "В";
        : radio_button {
            label = "A1";
            value = "1";
            key = "a1_s";
            mnemonic = "A";
        }
        : radio_button {
            label = "A2";
            value = "0";
            key = "a2_s";
            mnemonic = "A";
        }
        : radio_button {
            label = "A3";
            value = "0";
            key = "a3_s";
            mnemonic = "A";
        }
        : radio_button {
            label = "A4";
            value = "0";
            key = "a4_s";
            mnemonic = "A";
        }
    }
    : boxed_radio_row {
        label = "Пложение листа";
        mnemonic = "П";
        : radio_button {
            label = "Горизонтально";
            value = "1";
            key = "gor_s";
            mnemonic = "Г";
        }
        : radio_button {
            label = "Вертикально";
            value = "0";
            key = "ver_s";
            mnemonic = "В";
        }
    }
    : boxed_radio_row {
        label = "Точка вставки (Левый нижний угол листа)";
        mnemonic = "Т";
        : radio_button {
            label = "(0,0)";
            value = "1";
            key = "t_vst_00_s";
            mnemonic = "(";
        }
        : radio_button {
            label = "Указать";
            value = "0";
            key = "t_vst_u_s";
            mnemonic = "У";
        }
    }
    ok_cancel;
}
samo_format.lsp

Код:
[Выделить все]
;SamoCad
;******************************************************************
;********************Программа вставки форматов********************
;******************************************************************

;******************************************************************
;******************************************************************
;************************* (С) maksimov.m *************************
;******************************************************************
;******************************************************************

;;Вводим данные с помощью диалога;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;(defun c:f_mmax_q (/)
(setq s_load_dial (load_dialog "samo_format_dialog.dcl")
      )
(new_dialog "samo_format_dialog" s_load_dial "" '(-1 -1)
  )
А вот здесь идет несколько интересный момент
Продолжение samo_format.lsp
Код:
[Выделить все]
;А4 не бывает горизонтальным===============================
(action_tile "a4_s"  "(progn
                       (setq a4_no_gor (get_tile \"a4_s\"))
                       (setq a4_no_gor_ve (atof a4_no_gor))
                         (if (= a4_no_gor_ve 1)
                         (progn
                          (mode_tile \"gor_s\" 1)
                           (set_tile \"ver_s\" \"1\")
                           )
                           )
                           )";progn1"
  )
;;А4 не бывает горизонтальным?
;togda придется делать эту фигню для каждой кнопки
(action_tile "a1_s"  "(progn
                       (setq a1_yes_gor (get_tile \"a1_s\"))
                       (setq a1_yes_gor_ve (atof a1_yes_gor))
                         (if (= a1_yes_gor_ve 1)
                         
                          (mode_tile \"gor_s\" 0)
                          )
                        )";progn
)

(action_tile "a2_s"  "(progn
                       (setq a2_yes_gor (get_tile \"a2_s\"))
                       (setq a2_yes_gor_ve (atof a2_yes_gor))
                         (if (= a2_yes_gor_ve 1)
                         
                          (mode_tile \"gor_s\" 0)
                          )
                        )";progn
)

(action_tile "a3_s"  "(progn
                       (setq a3_yes_gor (get_tile \"a3_s\"))
                       (setq a3_yes_gor_ve (atof a3_yes_gor))
                         (if (= a2_yes_gor_ve 1)
                         
                          (mode_tile \"gor_s\" 0)
                          )
                        )";progn
)
обратите внимание на переменные a4_no_gor a1_yes_gor итд, а так же которые переведены в вещественные.
Все они имеют значение 1 независимо от выбранных радиокнопок.
И не смотря на это диалог работает нормально


Продолжение samo_format.lsp
Код:
[Выделить все]
;нажатие кнопки ок=======================================
(action_tile "accept"
  "(progn
     (setq s_a1_form (get_tile \"a1_s\")
           s_a2_form (get_tile \"a2_s\")
           s_a3_form (get_tile \"a3_s\")
           s_a4_form (get_tile \"a4_s\")
           s_gor_form (get_tile \"gor_s\")
           s_ver_form (get_tile \"ver_s\")
           s_vst_00 (get_tile \"t_vst_00_s\")
           s_vst_u (get_tile \"t_vst_u_s\")
           )
         (done_dialog 1))")



;нажатие кнопки otmena============================
(action_tile "cancel"
  "(exit)")
(start_dialog)

;;;;;;;Перевод строковых в вещественные или целые ;) посмотрим на их поведение
(setq s_a1_form_ve (atof s_a1_form)
      s_a2_form_ve (atof s_a2_form)
      s_a3_form_ve (atof s_a3_form)
      s_a4_form_ve (atof s_a4_form)
      s_gor_form_ve (atof s_gor_form)
      s_ver_form_ve (atof s_ver_form)
      s_vst_00_ve (atof s_vst_00)
      s_vst_u_ve (atof s_vst_u)
      )

;;Вводим данные с помощью диалога;;;;end


;;;;;;;;;;;создание слоев;;;;;;;;;;;;;;;;;;;;;;

;;;;;;создадим слой для tonkih линий
(vl-cmdf "_.layer" "_m" "Рамка_тонкие_текст"  "" )

;;;;;;создадим слой для жирных линий
(vl-cmdf "_.layer" "_m" "Рамка_жирные_" "_lw" 0.7 "" "")
;===================================================

;;;;;;;;;;;;;;;Точки вставки;;;;;;;;;;;;;;;;;;
(if (= s_vst_00_ve 1) (setq samo_t_vst_q '(0 0)))
(if (= s_vst_u_ve 1) (setq samo_t_vst_q (getpoint "\nУкажите левый нижний угол листа")))


;;;;;Сохраним UCS
(setq old_samo_ucs (getvar "ucsorg"))

;;;;;Сохраним привязки

(setq old_orto_samo (getvar "orthomode"))
(setq old_snap_samo (getvar "snapmode"))
(setq old_osnap_samo (getvar "osmode"))

;;;;;;;;Отключим привязки
(setvar "orthomode" 0)
(setvar "snapmode" 0)
(setvar "osmode" 0)




;;;;;;;;;;;;;;(С)maksimov.m;;;;;;;;;;;;;;;;
;Штамп Ф1======программа рисования штампа
(defun samo_shtamp (/)
;;;;чертим жирные линии
(vl-cmdf "_.layer" "_s" "Рамка_жирные_"  "" )

(vl-cmdf "_.line" '(0 0) '(0 55)  "")
  (setq samo_none_line (entlast))
(vl-cmdf "_.line" '(0 55) '(185 55) "")
(vl-cmdf "_.line" '(0 35) '(65 35) "")
(vl-cmdf "_.line" '(0 30) '(65 30) "")
(vl-cmdf "_.line" '(7 55) '(7 30) "")
(vl-cmdf "_.line" '(17 55) '(17 0) "")
(vl-cmdf "_.line" '(40 55) '(40 0) "")
(vl-cmdf "_.line" '(55 55) '(55 0) "")
(vl-cmdf "_.line" '(65 55) '(65 0) "")
(vl-cmdf "_.line" '(65 15) '(185 15) "")
(vl-cmdf "_.line" '(65 40) '(185 40) "")
(vl-cmdf "_.line" '(135 35) '(185 35) "")
(vl-cmdf "_.line" '(135 20) '(185 20) "")
(vl-cmdf "_.line" '(135 40) '(135 0) "")
(vl-cmdf "_.line" '(150 40) '(150 20) "")
(vl-cmdf "_.line" '(167 40) '(167 20) "")
(vl-cmdf "_.line" '(155 20) '(155 15) "")
  (gc)

;;;;тонкие
(vl-cmdf "_.layer" "_s" "Рамка_тонкие_текст"  "" )

;текст
  (vl-cmdf "_style" "SamoShtamptext" "%systemroot%\\Fonts\\isocpeui.ttf" 2.5 1.0 0 "_N" "_n")
(command "_.text"  '(0.5 31)  0 "Изм" )
(command "_.text"  '(8 31) 0  "Лист" )
(command "_.text"  '(18 31) 0  "№докум" )
(command "_.text"  '(41 31) 0 "Подп" )
(command "_.text"  '(56 31) 0  "Дата" )
(command "_.text"  '(1 26) 0  "Разраб" )
(command "_.text"  '(1 21) 0  "Пров")
(command "_.text"  '(1 16) 0  "Т.контр" )	   
(command "_.text"  '(1 6) 0  "Н.контр" )
(command "_.text"  '(1 1) 0  "Утв")
(command "_.text"  '(136 36) 0  "Лит" )
(command "_.text"  '(151 36) 0  "Масса" )
(command "_.text"  '(168 36) 0 "Масшт" )
(command "_.text"  '(136 16) 0  "Лист" )
(command "_.text"  '(156 16) 0  "Листов" )
  
(vl-cmdf "_.line" '(0 5) '(65 5) "")
(vl-cmdf "_.line" '(0 10) '(65 10) "")
(vl-cmdf "_.line" '(0 15) '(65 15) "")
(vl-cmdf "_.line" '(0 20) '(65 20) "")
(vl-cmdf "_.line" '(0 25) '(65 25) "")
(vl-cmdf "_.line" '(0 40) '(65 40) "")
(vl-cmdf "_.line" '(0 45) '(65 45) "")
(vl-cmdf "_.line" '(0 50) '(65 50) "")
(vl-cmdf "_.line" '(140 35) '(140 20) "")
(vl-cmdf "_.line" '(145 35) '(145 20) "")
);;;;defun
;;;;;;;;;;;;;программа рисования штампа end;;;;;;;;;

;;;;;;;;;Формат вертикальный

(defun samo_a1_vert_q (/)
(vl-cmdf "_.layer" "_s" "Рамка_тонкие_текст"  "" )
(vl-cmdf "_.ucs" "_m"  samo_t_vst_q)
(vl-cmdf "_.rectang" '(0 0) '(594 841))
(vl-cmdf "_.layer" "_s" "Рамка_жирные_"  "" )
(vl-cmdf "_.rectang" '(20 5) '(589 836))
 (vl-cmdf "_.ucs" "_m"  '(404 5))
  (samo_shtamp)
 );;;defun

(defun samo_a2_vert_q (/)
(vl-cmdf "_.layer" "_s" "Рамка_тонкие_текст"  "" )
(vl-cmdf "_.ucs" "_m"  samo_t_vst_q)
(vl-cmdf "_.rectang" '(0 0) '(420 594))
(vl-cmdf "_.layer" "_s" "Рамка_жирные_"  "" )
(vl-cmdf "_.rectang" '(20 5) '(415 589))
 (vl-cmdf "_.ucs" "_m"  '(230 5))
  (samo_shtamp)
 );;;defun

(defun samo_a3_vert_q (/)
(vl-cmdf "_.layer" "_s" "Рамка_тонкие_текст"  "" )
(vl-cmdf "_.ucs" "_m"  samo_t_vst_q)
(vl-cmdf "_.rectang" '(0 0) '(297 420))
(vl-cmdf "_.layer" "_s" "Рамка_жирные_"  "" )
(vl-cmdf "_.rectang" '(20 5) '(292 415))
 (vl-cmdf "_.ucs" "_m"  '(107 5))
  (samo_shtamp)
 );;;defun

(defun samo_a4_vert_q (/)
(vl-cmdf "_.layer" "_s" "Рамка_тонкие_текст"  "" )
(vl-cmdf "_.ucs" "_m"  samo_t_vst_q)
(vl-cmdf "_.rectang" '(0 0) '(210 297))
(vl-cmdf "_.layer" "_s" "Рамка_жирные_"  "" )
(vl-cmdf "_.rectang" '(20 5) '(205 292))
 (vl-cmdf "_.ucs" "_m"  '(20 5))
  (samo_shtamp)
  (entdel samo_none_line)
 );;;defun

;;;;;;;;;Формат горизонтальный

(defun samo_a1_gor_q (/)
(vl-cmdf "_.layer" "_s" "Рамка_тонкие_текст"  "" )
(vl-cmdf "_.ucs" "_m"  samo_t_vst_q)
(vl-cmdf "_.rectang" '(0 0) '(841 594))
(vl-cmdf "_.layer" "_s" "Рамка_жирные_"  "" )
(vl-cmdf "_.rectang" '(20 5) '(836 589))
 (vl-cmdf "_.ucs" "_m"  '(651 5))
  (samo_shtamp)
 );;;defun

(defun samo_a2_gor_q (/)
(vl-cmdf "_.layer" "_s" "Рамка_тонкие_текст"  "" )
(vl-cmdf "_.ucs" "_m"  samo_t_vst_q)
(vl-cmdf "_.rectang" '(0 0) '(594 420))
(vl-cmdf "_.layer" "_s" "Рамка_жирные_"  "" )
(vl-cmdf "_.rectang" '(20 5) '(589 415))
 (vl-cmdf "_.ucs" "_m"  '(404 5))
  (samo_shtamp)
 );;;defun

(defun samo_a3_gor_q (/)
(vl-cmdf "_.layer" "_s" "Рамка_тонкие_текст"  "" )
(vl-cmdf "_.ucs" "_m"  samo_t_vst_q)
(vl-cmdf "_.rectang" '(0 0) '(420 297))
(vl-cmdf "_.layer" "_s" "Рамка_жирные_"  "" )
(vl-cmdf "_.rectang" '(20 5) '(415 292))
 (vl-cmdf "_.ucs" "_m"  '(230 5))
  (samo_shtamp)
 );;;defun

;;;;;;;;;;;;;;;Рисуем вертикальные форматы

(defun risuem_vert (/)
  (if (= s_a1_form_ve 1) (samo_a1_vert_q))
  (if (= s_a2_form_ve 1) (samo_a2_vert_q))
  (if (= s_a3_form_ve 1) (samo_a3_vert_q))
  (if (= s_a4_form_ve 1) (samo_a4_vert_q))
  )

;;;;;;;;рисуем горизонтальные форматы

(defun risuem_gor (/)
  (if (= s_a1_form_ve 1) (samo_a1_gor_q))
  (if (= s_a2_form_ve 1) (samo_a2_gor_q))
  (if (= s_a3_form_ve 1) (samo_a3_gor_q))
  )
  

;;;;;;;;;;;;;;;;;;;запуск рисования 
(if (= s_ver_form_ve 1) (risuem_vert))
(if (= s_gor_form_ve 1) (risuem_gor))


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun samo_ucs_vozvrat (/)
(vl-cmdf "_.ucs" "_w")
)

(defun samo_ucs_vozvrat2 (/)
  (vl-cmdf "_.ucs" "_w")
  (vl-cmdf "_.ucs" "_m" old_samo_ucs)
  )


(if (eq old_samo_ucs '(0.0 0.0 0.0)) (samo_ucs_vozvrat) (samo_ucs_vozvrat2))

;;;;;;;;Возвратитм привязки
(setvar "orthomode" old_orto_samo)
(setvar "snapmode" old_snap_samo)
(setvar "osmode" old_osnap_samo)

;Убьем диалог
(unload_dialog  s_load_dial)


;)
Создавал с помощью визуал лисп – замучался.
Если из редактора VL приложения запускаются нормально, то с помощью (load “lsp”) из командной строки моя программа которую я считал полностью законченной оказалась очень глючной. Но всеже с глюками я разобрался и теперь хочу узнать какие глюки этой программы будут на чужих компьютерах, скорее всего они будут тк системные переменные мои и ваши могут отличаться и будут вызывать очередные глюки.

Прошу всех опробовать и высказать свое мнение и отзывы.
mmax вне форума  
 
Непрочитано 25.02.2006, 00:14
#32
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


Много кода... Ниасилил...

Навскидку:

Цитата:
(defun c:f_mmax_q (/)
..............
И какого дъявола распинались мы тут про локализацию переменных? Дело хозяйское, ловите глюки....

Цитата:
(defun samo_a1_vert_q (/)
(vl-cmdf "_.layer" "_s" "Рамка_тонкие_текст" "" )
(vl-cmdf "_.ucs" "_m" samo_t_vst_q) ..........

(defun samo_a2_vert_q (/)
(vl-cmdf "_.layer" "_s" "Рамка_тонкие_текст" "" )
(vl-cmdf "_.ucs" "_m" samo_t_vst_q) ...........
и так далее.
Ну млин... оно же не просто так называется ФУНКЦИЯ !
Передайте ОДНОЙ функции "Рисовать_Рамку" всего то пару аргументов "Формат" и "Стоймя_ЛЁжмя" - и программа сократится наполовину. Трудоемкость отладки - вчетверо.

Цитата:
(defun risuem_vert (/)
(if (= s_a1_form_ve 1) (samo_a1_vert_q))
(if (= s_a2_form_ve 1) (samo_a2_vert_q))
(if (= s_a3_form_ve 1) (samo_a3_vert_q))
(if (= s_a4_form_ve 1) (samo_a4_vert_q))
)

;;;;;;;;рисуем горизонтальные форматы

(defun risuem_gor (/)
(if (= s_a1_form_ve 1) (samo_a1_gor_q))
(if (= s_a2_form_ve 1) (samo_a2_gor_q))
(if (= s_a3_form_ve 1) (samo_a3_gor_q))
)
ээээ....про функцию (cond ...) что нибудь слышали? Впрочем, она тоже не нужна, потому что см. выше.

Цитата:
системные переменные мои и ваши могут отличаться и будут вызывать очередные глюки.
Пишите программу так, чтоб она работала независимо от значений системных переменных. А если возможно - то и независимо от версий АКАДа, хотя бы от 2002 (или 2000) до 2006. В противном случае, у программы будет один единственный пользователь. Попоробуйте догадаться, кто

PS не пробовал, патамушта обещали глюки.
PPS Хинт: длинную портянку кода можно сохранить как файл и прикрепить к сообщению, дабы не загромождать страничку форума. Для этого даже придумали специальное поле с кнопочкой "Обзор"
vk вне форума  
 
Непрочитано 25.02.2006, 01:23
#33
Vika


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


Я совершенно новый человек в программировании. но очень хочется попробовать научиться Автолиспу, книги Полещука, на которую все ссылаются на форуме, не могу достать в магазинах, может, кто-то скажет, даст ссылочку на электронную версию сего продукта? Если начинать, то лучше сначала, скачала множество различных руководств пользователя, и для программирования в частности. Но самих азов нигде нашла. Если можете, помогите .
__________________
Muchas gracias, senores!
Vika вне форума  
 
Непрочитано 25.02.2006, 02:12
#34
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


>Vika
Электронную версию вряд ли где то найдете. Как минимум, потому что это не в интересах автора. Вполне возможно, что где то валяется сканированая книга, однако, работать с такой ну уж если только совсем от безысходности....

Поищите классический хит от Аутодеск - "Садовую дорожку". Видел в сети русскоязычную версию, хотя и довольно старую. Однако, для понимания основ, этого вполне достаточно. Не стесняйтесь заглядывать в HELP - там есть множество примеров.
vk вне форума  
 
Непрочитано 25.02.2006, 04:14
#35
forMA


 
Регистрация: 25.08.2005
Сообщений: 2,556


Учиться прикладному программированию, занятие конечно полезное и нужное. Но вот относительно рамок и штампов даже не знаю как сказать, что бы не разозлить почтенную публику. Короче, в результате многолетнего использования всяческих программ, блоков, шаблонов в AutoCAD-е и в других CAD-ах осталось только две "синтетические рамки": горизонтальная и вертикальная. Тяну Stretch- ем. И горя не знаю. . А с появлением ACAD-2006 с экранным редактированием текста я вообще на все приблуды по оформлению рамок и штампов "забил". Типа, есть дела и поважнее. Может быть я глубоко не прав и нахожусь в крайней степени заблуждения, но от суровой правды жизни никуда не денешься. Так оно есть на сегодняшний день. Есть предложение потренироваться на ....фланце в 2d и 3d. И я бы поучился и программа, уверен, получилась бы востребованная и как бы типовая. Как предложение? Что скажете?
forMA вне форума  
 
Автор темы   Непрочитано 25.02.2006, 11:20
#36
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Цитата:
Сообщение от Vika
научиться Автолиспу, книги Полещука, на которую все ссылаются на форуме, не могу достать в магазинах
www.books.ru
В этом месяце купил у них Visual LISP и секреты адаптации AutoCAD Полещука, так же там есть все его произведения. Недостаток в том, что книгу почтой ждать долго и дороже рублей на 50 выходит.

И первое мое произведение, хоть и освистанное профессионалами, вы уже можете опробовать.

У меня конечно уже давно была книжечка AutoCAD 2004:Разработка приложений и адаптация но по ней с нуля вряд ли чего поймешь, разве что DCL в обеих одинаковый.
mmax вне форума  
 
Непрочитано 25.02.2006, 12:24
#37
favorite

инженер
 
Регистрация: 05.12.2005
Москва
Сообщений: 425


Цитата:
Сообщение от vk
Цитата:
Сообщение от mmax
Столкнулся с такой проблемой

Код:
[Выделить все]
(if (progn
              (условие 1)
               (условие 2)
                (условие 3)
                 );;progn
(Выполнить действие)
);;if
Получается, что если хотябы одно условие верно действие выполняется. Мне бы холтелось бы наоборот -- хотябы одно условие не верно -- действие не выполнять
Эт кто ж Вас научил такому? Правильней все же так
Код:
[Выделить все]
(if (and
       (условие 1)
       (условие 2)
       (условие 3)
     );;and
   (progn
    (Выполнить действие)
    (Выполнить действие)
    (Выполнить действие)
    (Выполнить действие)
  );;progn
);;if
Ну и почитайте документацию по применению логических функций
Странно, у меня фАйл в PDF, там также как у него написано и не получается нифига.
Скажите а как добавить ELSe?
favorite вне форума  
 
Непрочитано 25.02.2006, 12:27
#38
favorite

инженер
 
Регистрация: 05.12.2005
Москва
Сообщений: 425


Скажите а в чем отличие vl-cmdf от command/


Изучаю Lisp по пособиям в инете поэтому не все операторы есть.
vl-cmdf вообще еще ниразу не видел.
favorite вне форума  
 
Непрочитано 25.02.2006, 12:30
#39
favorite

инженер
 
Регистрация: 05.12.2005
Москва
Сообщений: 425


Цитата:
Сообщение от mmax
Цитата:
Сообщение от Vika
научиться Автолиспу, книги Полещука, на которую все ссылаются на форуме, не могу достать в магазинах
www.books.ru
В этом месяце купил у них Visual LISP и секреты адаптации AutoCAD Полещука, так же там есть все его произведения. Недостаток в том, что книгу почтой ждать долго и дороже рублей на 50 выходит.

И первое мое произведение, хоть и освистанное профессионалами, вы уже можете опробовать.

У меня конечно уже давно была книжечка AutoCAD 2004:Разработка приложений и адаптация но по ней с нуля вряд ли чего поймешь, разве что DCL в обеих одинаковый.
Таже проблема . Секреты адаптации AutoCAD Полещука я купил а LISp не могу найти. Не знаю все магазины в центре и не только обощел нет нигде. Поэтому изучаю по пособиям из инета.
favorite вне форума  
 
Автор темы   Непрочитано 25.02.2006, 12:37
#40
mmax

Программист широкого профиля.
 
Регистрация: 08.09.2005
Челябинск
Сообщений: 722


Цитата:
Сообщение от favorite
Таже проблема . Секреты адаптации AutoCAD Полещука я купил а LISp не могу найти. Не знаю все магазины в центре и не только обощел нет нигде. Поэтому изучаю по пособиям из инета.
Visual LISP и секреты адаптации AutoCAD
AutoCAD 2004:Разработка приложений и адаптация
это две разные книги
Покупай почтой
mmax вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Я начинаю заниматься программированием LISP (help)

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