|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
Поиск в этой теме |
|
||||
Программист-энтузиаст Регистрация: 17.07.2009
Воронеж
Сообщений: 571
|
Цитата:
Код:
__________________
cadtools |
|||
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
|
Цитата:
В этом коде понятно что vla-addtable создается таблица с переменными (pt nr nc rh cw) А вот дальше темный лес (vlax-get-property (vlax-get-property (vlax-get-acad-object) 'ActiveDocument) 'Modelspace) (vlax-3d-point pt) Прощу помощи в изучении vl и по возможности с самого начала! |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
с какими еще переменными - это параметры таблицы, "Темный лес" - описан в справке автокада - это встроенные лисп функции, справку по объектной модели - см. справку по VB (парадокс - vb уже нету - а справка осталась ). Как вызывать COM методы (vl-...) из lisp - поищи по форуму - где-то дано хорошее описание с картинками.
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
|
Цитата:
|
|||
|
||||
Цитата:
Есть AutoCAD Объектная модель
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
|
Цитата:
|
|||
|
||||
проектирование железных дорог Регистрация: 12.04.2010
Самара
Сообщений: 60
|
Код:
|
|||
|
||||
Для обычного блока, если не nil вот это выражение: (ssget "_X" '((0 . "INSERT") (2 . "<block name>") (67 . 1) (410 . "<layout name>"))), тогда блок(или блоки) с именем "<block name>" есть на листе с именем "<layout name>".
Для динамических немного сложнее будет... |
||||
|
||||
Инженер LISP Регистрация: 11.05.2005
Минск
Сообщений: 6,992
|
Для динамических есть решение от Lee-MAC
Код:
Дальше нужно лишь сформировать строку-шаблон для ssget (2 . "MIP_Формат,`*U33,`*U41,`*U42,`*U44,`*U45"). В примере все это есть
__________________
Как использовать код на Лиспе читаем здесь |
|||
|
||||
Цитата:
Список это чисто LISP-овский тип данных, в VBA его нет, поэтому в ActiveX вместо списков используются варианты с безопасным массивом (vlax-3d-point '(2.236 23.548 0.0))) - создаёт вариант из безопасного массива, который в свою очередь состоит из трёх элементов являющихся вещественными числами двойной точности. Варианты - это структура, которая может хранить объекты разных типов. (vlax-make-variant) Безопасный массив - массив понятно, безопасный - потому что система постоянно контролирует тип и количество элементов (vlax-make-safearray- создаёт vlax-safearray-fill - заполняет) Т.е. получаем: (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbDouble '(0 . 2)) '(2.236 23.548 0.0))) получилась немного громоздкая запись, а так как довольно таки часто приходиться её использовать, создали функцию Код:
__________________
Почему все вдруг становятся умными, когда уже не надо? |
||||
|
||||
Регистрация: 05.09.2011
Сообщений: 38
|
Всем большое, спасибо!
Ребят, извините за неудобства. Как этот код можно переписать на LISP? Sub DwgProps() Dim NewText1 As String Dim NewText2 As String Dim oFS Dim Fold Dim Slesh1, Slesh2, Slesh3 Dim Konec, Zona, Papka, Hvost Set oFS = CreateObject("Scripting.FileSystemObject") Fold = ThisDrawing.Path Konec = Len(Fold) Papka = "215-GMC-01-EOM2." Slesh1 = InStr(Fold, Papka) Hvost = Mid(Fold, Slesh1, Konec) Slesh2 = InStr(Hvost, ".") Slesh3 = InStr(Hvost, "\") If Slesh3 <> 0 Then Zona = Mid(Hvost, Slesh2 + 1, Slesh3 - Slesh2 - 1) Else Zona = Mid(Hvost, Slesh2 + 1, Konec - Slesh2 - 1) End If NewText1 = Zona NewText2 = "Ãëàâíûé ìåäèàöåíòð ôóíêöèîíàëüíàÿ çîíà " & NewText1 & " Ýëåêòðîîáîðóäîâàíèå è ýëåêòðîîñâåùåíèå" changeCustDwgProp ThisDrawing, "Äîïîëíèòåëüíûé Øèôð ðàçäåëà", NewText1 changeCustDwgProp ThisDrawing, "Íàèìåíîâàíèå êîìïëåêòà", NewText2 End Sub Private Function changeCustDwgProp(docName As AcadDocument, fldName As String, newVal As String) On Error GoTo createIt Dim custProps As AcadSummaryInfo Set custProps = docName.SummaryInfo custProps.SetCustomByKey fldName, newVal Set custProps = Nothing Exit Function createIt: custProps.AddCustomInfo fldName, newVal Set custProps = Nothing End Function Private Function getCustDwgProp(docName As AcadDocument, fldName As String) As String 'KEY IS CASE SENSITIVE On Error GoTo notFound Dim custProps As AcadSummaryInfo Set custProps = docName.SummaryInfo custProps.GetCustomByKey fldName, getCustDwgProp Set custProps = Nothing Exit Function notFound: getCustDwgProp = "" Set custProps = Nothing End Function |
|||
|
||||
Продуман Регистрация: 22.02.2007
Питер
Сообщений: 2,840
|
Offtop: прям так и писать?
__________________
Когда в руках молоток все вокруг кажется гвоздями. |
|||
|
||||
Не совсем понятно мне. Когда мы объявляем функцию, локальные переменные функции мы должны вручную "убить", что бы освободить память. Например:
[code] Код:
И всё-таки, зачем "ручная" чистка переменных, это какой то атавизм (этот вопрос волнует даже больше)? |
||||
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
LISP. Вставка в таблицу поля, соотвествующего площади примитива | Profan | Готовые программы | 272 | 06.06.2021 23:12 |
Сейсмозащита и сейсмоизоляция существующих, построенных зд. | IANationalInformAgentstvo | Прочее. Архитектура и строительство | 216 | 20.01.2015 16:51 |
Мониторы LCD CRT | Разное | 94 | 17.06.2008 10:51 | |
ЮМОР 2006 =) | Perezz!! | Разное | 1122 | 04.01.2007 00:46 |