Приложение на АутоЛИСП

Максим РУЗСКИЙ

Приложение на AutoLISP
(методика  написания)


В статейке излагается мой собственный опыт написания приложения к Автокаду на встроенном в Автокад языке AutoLISP. Статейка ориентирована, не на профессионального программиста, а на  рядового, проектировщика который вдруг захотел усовершенствовать свою работу, чтобы делать ее намного быстрее и без ошибок.



Все время моей трудовой деятельности с 1969 года в проектных мастерских и разных проектных институтах я мечтал об автоматизации написания спецификаций. Их составление занимало много времени, требовало участия техников, и тщательной проверки. Только с возникновением компьютеров стало возможно хоть что-то сделать. Но программы, сделанные мной в первом BASIC (бейсике), требовали ручного ввода и чуть-чуть досчитывали за оператора уже наполовину заполненные спецификации. И только с возникновением чертежной программы – Автокада, появилась возможность связать линии самого чертежа со спецификациями в нем и заставить сам Автокад начертить и заполнить спецификацию.


Надо начать с того, что любая линия на экране воспринимается Автокадом, как список специальных данных, которые машина считывает, чтобы нарисовать на экране эту линию. Делает она это моментально, и нам, поэтому кажется, что сам экран знает чертеж!


Обыкновенная линия имеет такой список для своего рисования:
((-1 . <Entity name: 7ef8fc38>) (0 . "LINE") (330 . <Entity name: 7ef59c10>) (5 . "474F7") (100 . "AcDbEntity") (67 . 0) (410 . "Model") (8 . "_31") (62 . 32)
(370 . 15) (100 . "AcDbLine") (10 7500.0 12700.0 6050.0) (11 7500.0 17420.0
6050.0) (210 0.0 0.0 1.0)



Но язык программирования AutoLISP позволяет к этому списку добавить свои «расширенные данные», в которых зашифровать любые придуманные Вами свойства этой линии, например: название профиля: «уголок 50х50х5», вес его погонного метра 3.77 кг, площадь поверхности и прочее. Как это сделать – можно прочитать в учебниках, самый хороший из которых – это книга Н.Н.Полещука  «Visual LISP и секреты адаптации AutoCAD».
Сами расширенные данные выглядят примерно так:
  (-3 ("NKL" (1042 . 1.0);просто так, для начала записи РАД
     (1070 . 3) ;признак бревна

     (1000 . "((1 башня) ;имя сруба
     (2 Б) ;имя оси стены
     (3 300) ;привязка позиции
     (11 (0.0 90) (4000.0 90)) (12 (0.0 90) (4000.0 90))")  ;врубки

     (1071 . 78) ;номер позиции
     (1040 . 31.0)))) ;свободен

Как видите в AutoLISP’е надо привыкнуть к скобочной записи выражений.  По коду 1000 можно создать целый текстовой список данных, считываемых по первой цифре в каждой скобке. Но это тонкости.


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


Любая программа – это набор правил, по которым автомат, в данном случае AutoLISP, будет выполнять ряд действий, требующихся автору программы. Поэтому перед тем, как писать сам код, необходимо написать строгую последовательность действий, сценарий.


Но и его сразу писать не следует, а поначалу просто надо лечь на диван и задуматься над вопросом: а что я хочу получить?


Именно на этом этапе Ваша фантазия, не сдерживаемая никакими рамками, и может выдать гениальную идею, которую останется только воплотить.


Например: «Хочу, чтобы на чертеже возникала спецификация!»


Другими словами, хочу после вычерчивания чертежа нажать кнопку и справа, над штампом пусть появится спецификация на весь чертеж.
А что? Может Автокад сам чертить линии и писать цифры? Может. Поэтому ничего странного в такой идее нет. Все возможно.
Надо только это обеспечить.


Обеспечить, чтобы линии уголков знали, что они – уголки.
Обеспечить, чтобы каждая линия уголков знала о своей длине, например  3456 мм.
Обеспечить, чтобы линии уголков могли быть выбраны программой в некоторый виртуальный массив линий уголков.
Обеспечить выбор этих линий только в пределах начерченного листа.
Обеспечить суммирование этого массива линий так, чтобы получилось количество линий каждой длины.
Разложить список этих длин по порядку и назначить позиции линиям уголков.
Попутно при суммировании неплохо определить и вес всех линий уголков.


Главный секрет в том, что к сортировке надо подготовить строки, а не цифровые переменные. Именно строки сортируются AutoLISP-ом моментально, а, главное, понятно самому программисту. Одинаковые строки надо сложить, чтобы получить количество одинаковых деталей.


Для выбора деталей тех чертежей, с которых составляется спецификация выбор примитивов надо ограничить полем на пространстве модели. Это рамка с названием спецификации. Именно из нее все и выбирается.


Параллельно с этими задачами по выбору, присвоению, сортировке и вычерчиванию самой спецификации надо постоянно думать о составе расширенных данных, которые Вы будете вынуждены присвоить своим линиям-уголкам. Этот список расширенных данных строго регламентирован. В него лучше уложиться. Там можно сохранить текст, действительное число, длинное целое и короткое целое. Этого мало. Каждый примитив в Вашем проекте захочется снабдить:
• Сложным шифром
• Наименованием материала
• Обозначением (ГОСТ)
• Наименованием самой позиции
• Длиной
• Количеством
• Весом 1 метра
• Номером позиции
Перечисленные свойства можно все собрать в одну текстовую строку с номерами:
[1] Сложный шифр примитива [2] Наименование материала[3] Обозначение [4] Наименование[5]3456[6]5[7]3.77[8]101
Эта строка легко может быть записана в расширенные данные примитива по коду (1000 . строка). Те данные, которые нужно будет часто и быстро вызывать, можно доверить другим кодам расширенных данных - вещественным числам (1040 . 34) позиция, (1041 . 55) количество, короткому целому (1042 . 765) метка выносок, 32-битовому целому (1071 . 1460000000) шифр профиля.


Как видите, возможностей много. В шифре профиля первые три цифры могут обозначать тип материала: условное обозначение марки (поля), изделие из базы, профиль в кг/м из базы, профиль в м3/м из базы, листы в кг/м2 из базы, арматура в кг/м, бетоны в м3, материалы в м2, материалы в мм, материалы в штуках.  Остальные цифры могут указывать на номер профиля в базе данных.


Как организовать базу данных – дело программирования. Надо постараться сделать ее простой. Можно написать текстовые файлы, повторяющие сортамент. Это не так долго, как кажется. Из семи цифр, оставшихся в шифре, первые 2 и следующие 2 складываются в имя текстового файла. Остальные 3 – в номер самого профиля в этом файле.
Выбор  профиля осуществляется оператором из 3-х последовательно выпадающих списков: вид профиля, профиль, сортамент данного профиля.


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


Но победа все равно наступила.


Только не начинайте сразу программировать. Сначала напишите сценарий, как для кинофильма. А потом обеспечьте кодом каждый эпизод. Тогда вы все сделаете легко и достаточно быстро. Заодно вы научитесь программировать автокад для самых различных целей.


Разумеется, здесь изложено только то, что доказывает возможность такого приложения. Путь лежит через долгие изучения программирования, создания форм для ввода данный и прочего. Если Вы согласны с овладением всех премудростей, то вперед. Готовых программ для создания спецификаций быть не может, или они вставлены в большие  продукты фирмы Autodesk, страшно дорогие. Вы же можете сделать приложение под себя, под чертежи, которыми занимаетесь ежедневно.

20131228


Рецензии