Я начинаю заниматься программированием LISP (help) - Страница 11
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

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

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

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

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

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

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

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

Всем заранее благодарен.
Просмотров: 80022
 
Непрочитано 04.04.2006, 10:38
#201
Apelsinov

Проектировщик ВК. LISP-любитель.
 
Регистрация: 15.12.2003
Москва
Сообщений: 1,202
<phrase 1=


Цитата:
Сообщение от aldt
Apelsinov Помогите:
сообщение apel-plot-format "не найден файл описания форматов, программа остановлена"
вопрос как создать "apel-plot-format.txt"
http://dwg.ru/forum/viewtopic.php?t=...=asc&start=144

Для создания файла, воспользуйтесь опцией File при запросе:
command: Specify first corner [File] <exit>:

НО! Еще раз предупреждаю - код размещен исключительно в ознакомительных целях, это не "готовая программа".
__________________
apel.fas
Apelsinov вне форума  
 
Непрочитано 04.04.2006, 11:15
#202
aldt


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


спасибо за ответ!
aldt вне форума  
 
Автор темы   Непрочитано 05.04.2006, 20:29
#203
mmax

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


Господа, я тут гдето видел что можно читать LISPом диалоги созданые в VBA.
Для этого я создал форму коды пока не добавлял, загрузил полученый DVB файл, и проделал такую операцию.

Код:
[Выделить все]
(vl-load-com)
(defun acad_obj_s (/)
  (setq acad_app_s (vlax-get-acad-object)
	active_doc_s (vla-get-activedocument acad_app_s)
	mod_sp_s (vla-get-modelspace active_doc_s)
        pap_sp_s (vla-get-paperspace active_doc_s)       
	)
)
(acad_obj_samo)

(setq vbes (vla-get-vbe acad_app_s))

(vlax-dump-object vbes t)
и получил вот такой дамп
Код:
[Выделить все]
; VBE: nil
; Property values:
;   ActiveCodePane = nil
;   ActiveVBProject = #<VLA-OBJECT _VBProject 0e5f26a4>
;   ActiveWindow (RO) = nil
;   Addins (RO) = #<VLA-OBJECT _AddIns 0e5f21c4>
;   CodePanes (RO) = #<VLA-OBJECT _CodePanes 0de12c08>
;   CommandBars (RO) = #<VLA-OBJECT _CommandBars 0d4cfec8>
;   Events (RO) = #<VLA-OBJECT Events 0e5f2104>
;   MainWindow (RO) = #<VLA-OBJECT Window 0e5f2324>
;   SelectedVBComponent (RO) = #<VLA-OBJECT _VBComponent 0e5f5c64>
;   VBProjects (RO) = #<VLA-OBJECT _VBProjects 0e5f17b4>
;   Version (RO) = "6.03"
;   Windows (RO) = #<VLA-OBJECT _Windows 0e5f2184>
; No methods
Попробовал выполнить функцию без загрузки проекта
Заметил разницу в ActiveVBProject здесь оно равно nil

Код:
[Выделить все]
; VBE: nil
; Property values:
;   ActiveCodePane = nil
;   ActiveVBProject = nil
;   ActiveWindow (RO) = nil
;   Addins (RO) = #<VLA-OBJECT _AddIns 0e9e18a4>
;   CodePanes (RO) = #<VLA-OBJECT _CodePanes 0dde8fd8>
;   CommandBars (RO) = #<VLA-OBJECT _CommandBars 0d52fb60>
;   Events (RO) = #<VLA-OBJECT Events 0e9e17e4>
;   MainWindow (RO) = #<VLA-OBJECT Window 0e9e1a04>
;   SelectedVBComponent (RO) = nil
;   VBProjects (RO) = #<VLA-OBJECT _VBProjects 0e9e1794>
;   Version (RO) = "6.03"
;   Windows (RO) = #<VLA-OBJECT _Windows 0e9e1864>
; No methods
Вродебы я был не верном пути
Но на этом почемуто дальше хождение по иерархии закончилось
Нет функции (vla-get-ActiveVBProject)
Значит этот путь неверный.
Подскажите как достучаться до активного проекта??????????????
И вообще можно ли читать диалоги бейсика, если можно то стоит ли.
mmax вне форума  
 
Непрочитано 12.04.2006, 19:48
#204
favorite

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


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

Еще вопрос можноли Entmake или средствами Activex создать блок с вложенными аттрибутами по коду как это сделать если есть пример скиньте, чтобы я мог посмотреть.

Спасибо.
favorite вне форума  
 
Непрочитано 12.04.2006, 21:13
#205
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
Сообщение от favorite
Есть ли возможность чтобы при запуске моей программы этот блок автоматически или создавался, или просто вставлялся из файла вкотором он находится.
Такая возможность есть
Цитата:
Еще вопрос можноли Entmake или средствами Activex создать блок с вложенными аттрибутами по коду как это сделать если есть пример скиньте, чтобы я мог посмотреть.
Здри! [sm2001]
Код:
[Выделить все]
((defun BlkIns (blk_n ins_pt bk_prp att_val / adoc blk tags)
  (setq adoc (vla-get-ActiveDocument (vlax-get-acad-object)))
  (setq blk (vla-insertBlock
	      (vlax-get-property adoc (if (= (getvar "CVPORT") 1) 'PaperSpace 'ModelSpace))
	      (vlax-3d-point ins_pt)
	      (strcat (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list (vla-get-blocks adoc) bn))) "PATH\\" "") blk_n)
	      1 1 1 0));setq
  (mapcar '(lambda (x y) (vlax-put-property blk x y)) '(Layer Color XscaleFactor YScaleFactor ZScalefactor Rotation) bk_prp)
  (if (= (vla-get-HasAttributes blk) :vlax-true) (progn
      (foreach at (vlax-invoke blk 'Getattributes) (setq tags (cons ((vla-get-TagString at) "*TAG*") tags)))
      (mapcar '(lambda (x y z) (if (= (vla-get-TagString x) y) (vla-put-TextString x z))) ats tags att_val)));if
);defun
Цитата:
Спасибо.
Пжалста!
Лентяй вне форума  
 
Непрочитано 13.04.2006, 19:50
#206
favorite

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


Решил я поинтересоваться , кто пользуется OBjectDCL.
Вчера я поставил, начал разбираться,просто здоро, я нашел версию 3.0 . Правда выскакивает надпись в CAdе "This dialog block was created using an evaluation version of objectDCL"/ Что это такое и как сделать чтобы не выскакивало.

Не знаю может есть более поздняя.
Может ссылки на какую-нибудь литературу на русском у кого есть, а то закалибался по их справке изучать. Хотя не плохо получается и по англ справке.

И еще не могу понять для чего в ActiveX нужны варианты ,как их использовать. Кроме VLax-3D-point Не могу придумать применения другим. :?:
favorite вне форума  
 
Непрочитано 13.04.2006, 22:58
#207
favorite

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


>Лентяй , а чего-нибудь попроше нельзя придумать, как-то сложно ничего не понял . Желательно только на Лиспе без ActiveX в нем еще плохо разобрался. ПРосто скажите как вставить нужный блок из файла в новый файл. Желательно с объяснением. А то я не долго этим занимаюсь, даже всех функций не знаю.
favorite вне форума  
 
Непрочитано 14.04.2006, 08:01
#208
Лентяй

Project Engineer
 
Регистрация: 05.01.2005
Лос Анджелес
Сообщений: 1,392


Цитата:
Сообщение от favorite
>Лентяй , а чего-нибудь попроше нельзя придумать, как-то сложно ничего не понял . Желательно только на Лиспе без ActiveX в нем еще плохо разобрался. ПРосто скажите как вставить нужный блок из файла в новый файл. Желательно с объяснением. А то я не долго этим занимаюсь, даже всех функций не знаю.
Куда уж проще-то? ActiveX тем и отличается выгодно от AutoLISP, что в нем все сказано In Plain English. Впрочем, если у кого с английским проблемы, тады, оно, конечно, ой. А потому - приступим, благословясь, к разжевывынию.
Код:
[Выделить все]
(defun BlkIns (blk_n ins_pt bk_prp att_val / adoc blk tags)
blk_n - Block name - имя блока (строка);
ins_pt - Insertion Point - точка вставки (список из 3-ч координат);
blk_prp - Block properties - свойства блока - список;
att_val - Attribute Values - значения атрибутов (список)
adoc - Active Document - открытый чертеж (объект)
blk - Block - блок, с которым работаем (объект)
Код:
[Выделить все]
(setq adoc (vla-get-ActiveDocument (vlax-get-acad-object)))
Входим в открытый чертеж
Код:
[Выделить все]
(setq blk (vla-insertBlock
Это, надеюсь, понятно
[/code]
Код:
[Выделить все]
(vlax-get-property adoc (if (= (getvar "CVPORT") 1) 'PaperSpace 'ModelSpace))
Исходя из значения переменной "CVPORT" определяем, в какое пространство - Листа (Paper Space) или Модели (Model Space)вставлять блок
Код:
[Выделить все]
(vlax-3d-point ins_pt)
Преобразовываем список координат в формат ActiveX
Код:
[Выделить все]
(strcat (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-item (list (vla-get-blocks adoc) bn))) "PATH\\" "") blk_n)
Если мия блока не входит в коллекцию блоков чертежа (vla-get-blocks adoc), приписываем к файлу блока его "адрес".
Код:
[Выделить все]
1 1 1 0));setq
Присваиваем масштабам по X,Y и Z, а также углу поворота значения по умолчанию, потому как все равно будем их менять.
Код:
[Выделить все]
(mapcar '(lambda (x y) (vlax-put-property blk x y)) '(Layer Color XscaleFactor YScaleFactor ZScalefactor Rotation) bk_prp)
Присваиваем перечисленным свойствам (Property) блока, названия которых, надеюсь, переводить не надо, заранее заданные значения, указанные в списке blk_prp.
Код:
[Выделить все]
(if (= (vla-get-HasAttributes blk) :vlax-true) (progn
Если блок имеет атрибуты, то...
Код:
[Выделить все]
(foreach at (vlax-invoke blk 'GetАttributes) (setq tags (cons ((vla-get-TagString at) "*TAG*") tags)))
Вытаскиваем из блока опреления атрибутов и составляем из их "ярлыков" (Tag), список.
Код:
[Выделить все]
(mapcar '(lambda (x y z) (if (= (vla-get-TagString x) y) (vla-put-TextString x z))) ats tags att_val)));if
Каждому атрибуту в соответствии с его "ярлыком" присваиваем заранее заданное значение, указанные в списке att_val.
Код:
Вытыраем пот и испытываем чувство глубокого удовлетворения.
Лентяй вне форума  
 
Непрочитано 14.04.2006, 18:17
#209
favorite

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


Большое спасибо. Надо попробовать что-то такое написать.
ПРОГРАММА построения круга по координатам с диалоговым окном

Код:
[Выделить все]
(DEFUN c:prOG ()
  
(Odcl_Form_CloseAll  1)
(Odcl_LoadProject  "c:\\TErq2.ODC" T)
 



  (Odcl_Form_Show Ds)
(Odcl_Control_SetText TErq_Ds_TextBox1 0 [as String])
  (Odcl_Control_SetText TErq_Ds_TextBox2 0 [as String])
  (Odcl_Control_SetText TErq_Ds_TextBox3 0 [as String])

(VL-LOAD-COM)
(SETQ  MODEL (VLA-GET-MODELSPACE(vLA-GET-ACTIVEDOCUMENT (VLAX-GET-ACAD-OBJECT))))

(defun c:Ds_TXTOK_OnClicked ()
 (Setq x (ATOF(Odcl_Control_GetText TErq_Ds_TextBox1)))  
 (Setq y (ATOF(Odcl_Control_GetText TErq_Ds_TextBox2)))    
 (SETQ rADIUS (ATOF(Odcl_Control_GetText TErq_Ds_TextBox3)))
(SETQ pt1 (VLAX-3d-POINT  x y))

 (Odcl_Control_SetText TErq_Ds_TextBox1 0 [as String])
  (Odcl_Control_SetText TErq_Ds_TextBox2 0 [as String])
  (Odcl_Control_SetText TErq_Ds_TextBox3 0 [as String])
  (Odcl_Form_Close Ds)
  (SETQ stATUS t)
  (VLA-ADDCIRCLE model pt1 rADIUS)
  )
  

  (defun c:Ds_TextButton1_OnClicked ()
(Odcl_Form_Close Ds)
    (SETQ stATUS NIL)
    )
(defun c:Ds_OnCancelClose (bUserPressedEsc)

  (SETQ STATUS NIL)
  (Odcl_Form_Close Ds)
)
  (WHILE (= T sTATUS)
    (Odcl_Form_Show Ds)
   )

)
Посмотрите кто ObjectDCL знает, почему-то круги строит только после завершения задачи а не после закрытия формы. Как можно решить .
favorite вне форума  
 
Непрочитано 16.04.2006, 11:11 Привет
#210
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


Попробуй сделать в форме еще одну кнопку, типа применить.
В неё забей команду по построению круга с введенными данными.
Кстати у тебя ObjectDCL демо или лицензионная.
Вот пример отрисовки сетки. (использует блок спецификации, так что программу надо запукать из приложенного файла или внедрить блок спецификации в новый файл)
Архи закидывать не буду. Тестировалось на 2006 Автокаде (русская версия)
[ATTACH]1145171518.rar[/ATTACH]
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Непрочитано 16.04.2006, 11:48
#211
favorite

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


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

Также пробую программу для расстановки свай написать. Почему-то при нажатии на кнопу graphicbutton программа то нормально срабатывает то вообще не срабатывает и CAD вырубает,пишет ошибка C++ итд, из-за чего это происходит понять не могу.


Код:
[Выделить все]
; Программа расстановки свай
; Автор Зурабян Давид Артемович
(Defun C:SVAI
(Odcl_Form_CloseAll  1)
(Odcl_LoadProject  "c:\\SVAI.ODC" T)
(Odcl_Form_Show СВАИ_DclForm1 )
  
(defun c:DclForm1_GraphicButton1_OnClicked ()
(Odcl_Form_Close СВАИ_DclForm1)
  (setq PT1 (getpoint "введите точку 1:"))
  (terpri)
  (setq PT2 (getpoint "Введите точку 2:"))
  (setq DIST (/(distance PT1 PT2)1000))
  (SETQ STATUS t)
)
(defun c:DclForm1_OK_OnClicked ()
(Setq Value1 (Odcl_Control_GetValue SVAI_DclForm1_SVA6))
  (initget 7)
(Setq NESSV (atoI(Odcl_Control_GetText СВАИ_DclForm1_TextBox1)))
(Setq NAGR (+(* (atoI(Odcl_Control_GetText СВАИ_DclForm1_TextBox2)) 1.4) 0.8))
(setq KOLVO (fix (+ (* (/ NAGR NESSV)disT)1 )))
(setq SHAG (/ dist KoLVO))
  (Odcl_Form_Close СВАИ_DclForm1)
  (setq STATUS T)
(VL-LOAD-COM)
(SETQ  MODEL (VLA-GET-MODELSPACE(vLA-GET-ACTIVEDOCUMENT (VLAX-GET-ACAD-OBJECT))))
(setq i 1)
  (while  (<= i KOLVO)
  (Setq PT (Polar PT1 (angle PT1 PT2) (* SHAG i)))
	(setq i (1+ i))
	 (SETQ PT (vlax-3d-point PT))
(setq NAB1 (vla-insertBlock MODEL "SVAI6" PT 1.0 1.0 1.0 0))
  )
  )
(defun c:DclForm1_OnCancelClose (bUserPressedEsc /)
     (Odcl_Form_Close СВАИ_DclForm1)
  (setq STATUS nil)
  )

  (WHILE (= STATUS T)
  (Odcl_Form_Show СВАИ_DclForm1 ))
  )
Так-же какая-то проблема при создании варианта
Код:
[Выделить все]
 (SETQ PT (vlax-3d-point PT))
Но это ладно разберусь , а вот почему то работает ,а то сбой в CAD вызывает вот это не понятно.
[ATTACH]1145193300.rar[/ATTACH]
favorite вне форума  
 
Непрочитано 17.04.2006, 09:46 Привет
#212
DEM

YngIngKllr
 
Регистрация: 29.03.2005
СПб
Сообщений: 12,968


Ну конечно у меня ДЕМО-версия программы.
А у вас Лицензионка?
Скиньте мне полную версию вашего приложния с файлами ObjectDCL.
Попробую поковыряться.
Правда Я и сам то недавно этим начал заниматься.
__________________
Работаю за еду.
Working for food.
Für Essen arbeiten.
العمل من أجل الغذاء
Працую за їжу.
DEM вне форума  
 
Непрочитано 17.04.2006, 20:00 Re: Привет
#213
favorite

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


Цитата:
Сообщение от DEM
Ну конечно у меня ДЕМО-версия программы.
А у вас Лицензионка?
Скиньте мне полную версию вашего приложния с файлами ObjectDCL.
Попробую поковыряться.
Правда Я и сам то недавно этим начал заниматься.
У меня DEmo а программа в архиве. Что не скачивается?
favorite вне форума  
 
Непрочитано 01.04.2008, 12:32
#214
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Может было уже где.. Как сделать кнопку которая имитирует нажатие "ESC"? Возможно ли это вообще?
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 01.04.2008, 12:35
#215
Кулик Алексей aka kpblc
Moderator

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


Одно нажатие Esc:Два:Ну и так далее.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.04.2008, 12:58
#216
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Одно нажатие Esc:
^C
Два:
^C^C
Ну и так далее.
Как ни странно не работает. Или я не правильно объяснил... допустим я выделил несколько примитивов. Хочу отменить выделение. Жму ESC кнопку - а нужно сделать кнопку для лентяя в одно нажатие "отмены" на какой либо панели.

^C^C - отменяет команду любую, но не отменяет выделение
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 01.04.2008, 13:01
#217
Shoorup


 
Регистрация: 16.09.2006
Минск
Сообщений: 1,587
<phrase 1= Отправить сообщение для Shoorup с помощью Skype™


Как вариант сделал по глупому так
Код:
__________________
Поезд который устал от ржавого здравомыслия рельсов...
Shoorup вне форума  
 
Непрочитано 01.04.2008, 13:15
#218
Кулик Алексей aka kpblc
Moderator

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


Код:
[Выделить все]
(sssetfirst nil nil)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 01.04.2008, 14:33
#219
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Пока лентяй будет наматывать километры, двигая мышку с текущей позиции курсора до кнопки и обрато, не лучше ли ему кликнуть правой кнопрой мыши и выбрать "Отменить выбор". Побереги экран для более полезных кнопок.
Миниатюры
Нажмите на изображение для увеличения
Название: Deselect.jpg
Просмотров: 100
Размер:	53.1 Кб
ID:	4875  
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 01.04.2008, 16:26
#220
Zouss


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


как вариант можно заглянуть в меню и узнать как эту кнопку делал любимый разработчик:
Код:
[Выделить все]
^C^C^P(ai_deselect) ^P
Zouss вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Я начинаю заниматься программированием LISP (help)