|
||
| Правила | Регистрация | Пользователи | Сообщения за день | | Поиск | | Справка по форуму | Файлообменник | |
|
![]() |
Поиск в этой теме |
![]() |
#1 | |
Field-Autolisp/Vlisp ??
AutoCAD/AutoLISP
Seattle/USA
Регистрация: 27.08.2003
Сообщений: 1,133
|
||
Просмотров: 6287
|
|
||||
AutoCAD/AutoLISP Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133
|
Уважаемые коллеги,
РАЗОБРАЛСЯ. Все на редкость просто. Вот наипримитивнейший лиспик для быстрой вставки даты (defun c:dt () (command"mtext" pause" "w" "0" "%<\\AcVar Date \\f \"M/d/yyyy\">%" "") (princ) ) Все остальное в том же духе. Просто, не правда ли?? Остается еще разобраться, как програмно DRAWING PROPERTY сделать. Может кто разобрался ??????? |
|||
![]() |
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
Да вроде никаких проблемм нет. Там столько свойств и методов что голова кругом. Только времени совсем нет сейчас этим заниматься. Попробовал по вашей просьбе заполнить програмно ячейку. Получилось.
Код:
|
|||
![]() |
|
||||
AutoCAD/AutoLISP Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133
|
Спасибо за ответы, но я имел ввиду FILE>Drawing Properties (см. картинку)
Как их програмно создать (лиспом/влиспом), читать програмно нет никаких проблем, а вот програмно закинуть ???? [ATTACH]1086363134.gif[/ATTACH] |
|||
![]() |
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
Картинку к сожалению не видно. Но думаю что понял и это очень просто.
Код:
Все остальное Read Only, если речь идет об этом то я пас. Что то опять картинки через Opera не видать [ATTACH]1086375952.gif[/ATTACH] ![]() |
|||
![]() |
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
Да в общем то какие для вас проблеммы. Изучить Объектную Модель это как еще раз научится ездить на велосипеде. В Developer Help все есть, правда в синтаксисе VBA.
Не везде ActiveX имеет преймущества, однако несколько преймуществ все таки есть. 1. Можно добратся до "потайных уголков" 2. На порядок выше быстродействие, что сказывается при обработке больших объемов данных. 3. Все называется своими "человеческими" именами. 4. Есть вещи нереализуемые "обычным" способом (например реакторы, функции работы с кривыми и т. д.) 5. Есть выход "наружу" >Excel >Access >FoxPro и т. д. Вам так точно не больше месяца потребуется чтобы все это освоить. Кому я сдесь лекцию читаю :shock: :shock: :shock: ![]() |
|||
![]() |
|
||||
AutoCAD/AutoLISP Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133
|
>>Fantomas
Ах, поковырялся в справочнике..... кое что понял - как вы это сделали, но далеко не все, в основном -"темный лес". Придется опять учится.... пойду к "Robert McNeel". Благо они тут в Сеатле - местные кадры, учат хорошо (но чертовски дорого, и днем, придется брать отпуск). Еще раз спасибо - воспользуюсь вашим кодом. |
|||
![]() |
|
||||
AutoCAD/AutoLISP Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133
|
>>Fantomas
Что-то меня не туда занесло :cry: Вот слегка изменил ваш код - вроде работает как хочется, а вот проверить заполнение (vla-addCustomInfo infoObj "FPROJ" FPROJ) существует ли уже, чтоб не повторять лишний раз ну никак неполучается.... итак и эдак пробовал: (vlax-property-available-p infoObj 'FPROJ) чтоб определить заполнено ли "FPROJ" неполучается... меня явно не в ту степь понесло..... ![]() ![]() ![]() (defun c:fset () (vl-load-com) (setq FTITLE (getstring T "\nJob Title: ")) (if (= FTITLE "")(setq FTITLE "JACOBS CIVIL")) (setq FAUTHOR (getstring T "\nDrawing Originator: ")) (if (= FAUTHOR "")(setq FAUTHOR "XXX")) (setq FSUBJECT (getstring T "\nProject Area: ")) (if (= FSUBJECT "")(setq FSUBJECT "XXX")) (setq FPROJ (getstring T "\nProject Specific: ")) (if (= FPROJ "")(setq FPROJ "XXX")) (setq infoObj (vla-get-SummaryInfo (vla-get-activeDocument (vlax-get-acad-object)))) (vla-put-Title infoObj FTITLE) (vla-put-Author infoObj FAUTHOR) (vla-put-Subject infoObj FSUBJECT) (vla-put-KeyWords infoObj FTITLE) (vla-put-Comments infoObj "Property of JACOBS CIVIL INK") (vla-addCustomInfo infoObj "FPROJ" FPROJ) (vla-addCustomInfo infoObj "DESIGN" "XXX") (vla-addCustomInfo infoObj "DRAWN" "XXX") (vla-addCustomInfo infoObj "CHECKED" "XXX") (vla-addCustomInfo infoObj "TITLE-LINE1" "XXXX") (vla-addCustomInfo infoObj "TITLE-LINE2" "XXXX") (vla-addCustomInfo infoObj "TITLE-LINE3" "XXXX") (princ) ) |
|||
![]() |
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
Немного есть, отдельные Custom Properties не являются его свойствами (в понимании ActiveX). Извлечь значение ячеек можно методами:
(vla-GetCustomByIndex infoObj 0 'pKey 'pValue) присвоит переменной pKey имя первой ячейки (индекс 0), а переменной pValue значение первой ячейки или (vla-GetCustomByKey infoObj "PROJ" 'pValue) присвоит переменной pValue значение ячейки с именем "PROJ" Имена переменных могут быть любыми, главное чтобы стояли где надо. Если вы обратитесь к Developer Help, то в ActiveX and VBA reference очень хорошая интерактивная справка по всем объектам, методам и событиям. Правда в синтаксисе VBA, но все понятно написано. См. картинку для нашего случая. Если в чем то есть неясности спрашивайте. [ATTACH]1086523298.gif[/ATTACH] |
|||
![]() |
|
||||
Инженер по системам безопасности Регистрация: 23.11.2003
Рига
Сообщений: 1,099
|
Забыл главное. При применении вышеописанных методов к незаполненному индексу или при отсутствии соответствующего имени функция выдаст ошибку. Для начала надо посчитать заполненые индексы методом (vla-NumCustomInfo infoObj), затем проверить есть ли имя "PROJ" и его значение.
|
|||
![]() |
|
||||
AutoCAD/AutoLISP Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133
|
Кажется понемногу вникаю...Во всяком случае сработало блиозко к тому что хотелось.
Теперь обьясню зачем весь сыр-бор затеял. У нас тут рамки (title board) у каждого клиента разные (нет стандарта) - посему FIELD ну очень удобно (удобнее чем BLOCK /attributes) можно XREF в чертеж, а информацию частью закинуть в DRAWING PROPERTY (ту что только для данного чертежа) а остальное через FIELD диалог. Теперь даже если клиент сменит рамку (а такое случается сплошь и рядом - тут клиент и бог и царь) просто перетащить FIELD в новые места и все сделано. Когда новый чертеж начинаешь все можно закинуть в DWT, a вот когда переделка старых чертежей - програмка просто необходима. Вот я ваш коде и использовал - СПАСИБО ОГРОМНОЕ теперь все работает. Продолжаю копаться - многое в ВЛИСПЕ нравится, кое-что нет. Всетаки я приверженец Аутолиспа хоть и меньше у него возможностей (к сожалению). А Visual Lisp очень напоминает Vital Lisp, я этой програмкой пользовался еще в R12, и она мне жутко не понравилась тогда. (defun c:fset () (setq FTITLE (getstring T "\nJob Title<JACOBS CIVIL>: ")) (if (= FTITLE "")(setq FTITLE "JACOBS CIVIL")) (setq FAUTHOR (getstring T "\nDrawing Originator<XXX>: ")) (if (= FAUTHOR "")(setq FAUTHOR "XXX")) (setq FSUBJECT (getstring T "\nProject Area<XXX>: ")) (if (= FSUBJECT "")(setq FSUBJECT "XXX")) (setq FPROJ (getstring T "\nProject Specific<XXX>: ")) (if (= FPROJ "")(setq FPROJ "XXX")) (vl-load-com) (setq infoObj (vla-get-SummaryInfo (vla-get-activeDocument (vlax-get-acad-object)))) (vla-put-Title infoObj FTITLE) (vla-put-Author infoObj FAUTHOR) (vla-put-Subject infoObj FSUBJECT) (vla-put-KeyWords infoObj FTITLE) (vla-put-Comments infoObj "Property of JACOBS CIVIL INK") (setq check(vla-NumCustomInfo infoObj)) (if (= check 0) (progn (vla-addCustomInfo infoObj "FPROJ" FPROJ) (vla-addCustomInfo infoObj "DESIGN" "XXX") (vla-addCustomInfo infoObj "DRAWN" "XXX") (vla-addCustomInfo infoObj "CHECKED" "XXX") (vla-addCustomInfo infoObj "TITLE-LINE1" "XXXX") (vla-addCustomInfo infoObj "TITLE-LINE2" "XXXX") (vla-addCustomInfo infoObj "TITLE-LINE3" "XXXX") ) ) (princ) ) |
|||
![]() |
|
||||
Конструктор Регистрация: 03.09.2006
i-net
Сообщений: 5
![]() |
Цитата:
%<\AcObjProp Object(%<\_ObjId 2126533416>%).Measurement \f "%lu2%pr0">% |
|||
![]() |
|
||||
Цитата:
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=19827ea |
||||
![]() |