Тема: Acad Map и Lisp

Привет,знатокам Acad Map.Поделитесь опытом.
У меня нет Help,где я могу найти acmaplisp.chm,
и где еще я могу прочитать каким образом Autolisp
связывается с внеш.базой данных объектов.
Если я запихну данные в Access,Autolisp их увидит?
Спасибо всем кто откликнется.

Re: Acad Map и Lisp

> Карина
С Аксесом лучше работать через VBA.

Re: Acad Map и Lisp

> Maxim T
Дело том,что с Лиспом я гораздо лучше знакома,
а с VBA нет.Вообще, насколько он сложен в изучении?
Можно освоить его за короткий срок?

Re: Acad Map и Lisp

> Карина
На www.firststeps.ru есть статьи по VBA, а ещё вот здесь http://www.cad.dp.ua/stats/a_vba/. VBA можно освоить за короткий срок, это не C++ :) и не Лисп. К тому же вы сможете программировать для Ворда и Экселя, а также многих других современных программ (например, Корела), которые поддерживают VBA. А если надо будет написать "самостоятельную" программу (т.е. не встроенную в документ), то к вашим услугам VB - среда разработки прикладных программ, синтаксис там такой же, как в VBA. Ну и наконец, есть VBS (S означает script) - это язык для написания программок-скриптов, которые можно встроить прямо в HTML-страницу и которые обладают почти всей мощью VB(A) ! Скрипты также можно сохранять в отдельных текстовых файлах с расширением VBS, это замена BAT-файлам в DOS, и вызывать их на исполнение, как обычные программы. По скриптам см. https://www.caduser.ru/forum/topic13389.html . Самое классное, что, освоив VBA, из автокада вы сможете "рулить" другими программами, хоть Интернет Эксплорером! Это возможно и в Лиспе, но в бейсике удобнее. Кроме того, бейсик предоставляет возможность обращаться к внешним DLL-библиотекам (примеры приведены тоже здесь http://www.cad.dp.ua/stats/a_vba/), а этого нет у Лиспа. Вообще, у бейсика есть и слабые стороны, например, он никак не поддерживает паузы в командах, когда юзер должен ввести информацию. Поэтому вам стоит освоить VBA, чтобы потом использовать его совместно с лиспом !

Re: Acad Map и Lisp

> Maxim T
Спасибо за подробное изложение возможностей,
я заинтересовалась.
Действительно полезно будет освоить.

Re: Acad Map и Lisp

С помощью какой встроенной функции Visual LISP можно узнать
названия полей в таблице,чтобы не указывать вручную из каких полей(столбцов) следует достать данные?
В Acad Map к чертежу можно прикрепить источник данных и связать объекты с записями в б/д,это как то облегчает доступ к б/д и получение связанных данных через лисп?В каких случаях этим(прикрепить источник данных и
связать объекты)нужно заниматься?

Re: Acad Map и Lisp

> Карина
На мой взгляд встроенная в акад функция связи с базой данных - недоделанна - рассчитанна на работу через интерфейс, т.е. использовать ее в лисп-программе очень неудобно...
Гораздо проще воспользоваться 3-4мя своими функциями (чтение данных, запись данных, перезапись - изменение данных) для работы с базой данных...
Скорость, надежность и совместимость будут в разы выше.
По поводу полей. Такие программы, как правило пишутся для работы с конкретной базой и ее структура известна заранее, т.е. в программе жестко прописывается название таблиц и колонок...
Если есть необходимость иногда менять структурные названия в базе данных можно добавить дополнительную таблицу с синонимами названий таблиц и столбцов, но такой ход может пригодиться, пожалуй, только для многоязычного интерфейса, когда неизвестно заранее, какие языки будут востребованны...
Менять-же в корне структуру базы данных занятие очень долгое, сложное и муторное... Короче не советую!

Re: Acad Map и Lisp

У меня такие вопросы:
1.Как изменить имя слоя на котором есть объекты?
Или это невозможно?
2.Чем отличаются функции ade_dsproplist и ade_dwgproplist?Мне нужно получить свойство "layer" открытого чертежа.Может его сначала сделать активным?
Но у меня это не выходит.Активным делается только не открытый чертеж.

Re: Acad Map и Lisp

> Павел
1. (vla-put-name vla:layer)
vla:layer - указатель на слой.
2. Насколько я понимаю ade_dsproplist работает с набором рисунков (drawing set) а ade_adgproplist с одним конкретным dwg.
______________
Удачи.

Re: Acad Map и Lisp

Я имел ввиду как изменить название слоя не программно,
а "механически".

Re: Acad Map и Lisp

Я имел ввиду как изменить название слоя не программно, а "механически".

А тема называется Acad Map и Lisp :)
Механически? А команда rename "...не может помочь отцу русской демократии?"
______________
Удачи.

Re: Acad Map и Lisp

> kos
Спасибо.Я новичок в этом деле.
Вот мучаюсь над проблемой - не могу получить список слоев открытого рисунка. Пробовал:
(ade_dsproplist  "layer")
получаю nil.
C функцией
(ade_dwgproplist dwg_id  "layer")
тоже ничего не выходит.
Может есть другой способ?

Re: Acad Map и Lisp

Попробуй без заморочек от ade. Примерно так:

(defun get-layers-names    (/ lst:result a)
  (vlax-for a (vla-get-layers
        (vla-get-activeDocument (vlax-get-acad-object))
          ) ;_ vla-get-layers
    (setq lst:result (cons (vla-get-name a) lst:result))
  ) ;_ vlax-for
  (acad_strlsort lst:result)
) ;_ defun
(vl-load-com)

В результате получаем список отсортированных по алфавиту имен слоев активного рисунка.
______________
Удачи.