Field-Autolisp/Vlisp ??
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Field-Autolisp/Vlisp ??

Field-Autolisp/Vlisp ??

Ответ
Поиск в этой теме
Непрочитано 30.05.2004, 19:23 #1
Field-Autolisp/Vlisp ??
Startrek
 
AutoCAD/AutoLISP
 
Seattle/USA
Регистрация: 27.08.2003
Сообщений: 1,133

Уважаемые коллеги,
ВОПРОСИК. Кто-нибудь сумел разобраться, калк програмно (AutoLISP/Vlisp) заполнять FIELD (R2005) ?????
Просмотров: 6287
 
Автор темы   Непрочитано 31.05.2004, 09:41
#2
Startrek

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 сделать.
Может кто разобрался ???????
Startrek вне форума  
 
Автор темы   Непрочитано 04.06.2004, 01:50
#3
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


Уважаемые коллеги,
Так никто и не разобрался???? :?: :?:
Fantomas? vk?..........
Startrek вне форума  
 
Непрочитано 04.06.2004, 11:03
#4
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Да вроде никаких проблемм нет. Там столько свойств и методов что голова кругом. Только времени совсем нет сейчас этим заниматься. Попробовал по вашей просьбе заполнить програмно ячейку. Получилось.
Код:
[Выделить все]
(defun c:fild (/ tab)
  (vl-load-com)
  (setq tab(vlax-ename->vla-object(car(entsel))))
  (if(= "AcDbTable"(vla-get-ObjectName tab))
(vla-setText tab 2 2 "Startek")
    );end if
  ); end fild
{Smirnoff} вне форума  
 
Непрочитано 04.06.2004, 11:30
#5
Эдуард

строительство
 
Регистрация: 16.01.2004
Петербург
Сообщений: 165
<phrase 1=


2Вариант:

Код:
[Выделить все]
(setq dwgp(dictsearch (namedobjdict) "DWGPROPS"))
и прогоните через entmod
Эдуард вне форума  
 
Непрочитано 04.06.2004, 11:33
#6
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Уже сообразил не то На выходных время может найду.
{Smirnoff} вне форума  
 
Непрочитано 04.06.2004, 12:03
#7
vk

сисадмин
 
Регистрация: 26.08.2003
Самара
Сообщений: 1,022
<phrase 1=


До 2005 пока еще не добрался
vk вне форума  
 
Автор темы   Непрочитано 04.06.2004, 19:32
#8
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


Спасибо за ответы, но я имел ввиду FILE>Drawing Properties (см. картинку)
Как их програмно создать (лиспом/влиспом), читать програмно нет никаких проблем, а вот програмно закинуть ????
[ATTACH]1086363134.gif[/ATTACH]
Startrek вне форума  
 
Непрочитано 04.06.2004, 23:05
#9
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Картинку к сожалению не видно. Но думаю что понял и это очень просто.
Код:
[Выделить все]
(defun c:sInfo (/)
  (vl-load-com)
  (setq infoObj
	 (vla-get-SummaryInfo
	   (vla-get-activeDocument
	     (vlax-get-acad-object))))
  (vla-put-Title infoObj "Laser Gun. Model GD-123")
  (vla-put-Author infoObj "Startek")
  (vla-put-Subject infoObj "High Energy Generator")
  (vla-put-KeyWords infoObj "Weapon for Space Wariors")
  (vla-put-Comments infoObj "The Best Gun in the Universe!")

  (vla-addCustomInfo infoObj "Weight" "0.1 kg")
  (vla-addCustomInfo infoObj "Height" "123.00")
  (vla-addCustomInfo infoObj "Width" "222.00")
  (vla-addCustomInfo infoObj "Deep" "18.00")
  ); end of sInfo
Есть также методы изменения по ключу и значениям.

Все остальное Read Only, если речь идет об этом то я пас. Что то опять картинки через Opera не видать
[ATTACH]1086375952.gif[/ATTACH]
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 05.06.2004, 00:23
#10
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


>>Fantomas

Огромное спацибо - то что надо.
Эх надо опять за книжки садится - учить Влисп. С АутоЛИСПОМ никаких проблем, авот Влисп.....
СПАСИБО
Startrek вне форума  
 
Непрочитано 05.06.2004, 01:24
#11
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Да в общем то какие для вас проблеммы. Изучить Объектную Модель это как еще раз научится ездить на велосипеде. В Developer Help все есть, правда в синтаксисе VBA.

Не везде ActiveX имеет преймущества, однако несколько преймуществ все таки есть. 1. Можно добратся до "потайных уголков" 2. На порядок выше быстродействие, что сказывается при обработке больших объемов данных. 3. Все называется своими "человеческими" именами. 4. Есть вещи нереализуемые "обычным" способом (например реакторы, функции работы с кривыми и т. д.) 5. Есть выход "наружу" >Excel >Access >FoxPro и т. д.

Вам так точно не больше месяца потребуется чтобы все это освоить.

Кому я сдесь лекцию читаю :shock: :shock: :shock:
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 05.06.2004, 09:16
#12
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


>>Fantomas

Ах, поковырялся в справочнике..... кое что понял - как вы это сделали, но далеко не все, в основном -"темный лес". Придется опять учится.... пойду к "Robert McNeel". Благо они тут в Сеатле - местные кадры, учат хорошо (но чертовски дорого, и днем, придется брать отпуск). Еще раз спасибо - воспользуюсь вашим кодом.
Startrek вне форума  
 
Автор темы   Непрочитано 06.06.2004, 04:15
#13
Startrek

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)
)
Startrek вне форума  
 
Непрочитано 06.06.2004, 16:01
#14
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 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]
{Smirnoff} вне форума  
 
Непрочитано 06.06.2004, 16:31
#15
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Забыл главное. При применении вышеописанных методов к незаполненному индексу или при отсутствии соответствующего имени функция выдаст ошибку. Для начала надо посчитать заполненые индексы методом (vla-NumCustomInfo infoObj), затем проверить есть ли имя "PROJ" и его значение.
{Smirnoff} вне форума  
 
Автор темы   Непрочитано 06.06.2004, 19:27
#16
Startrek

AutoCAD/AutoLISP
 
Регистрация: 27.08.2003
Seattle/USA
Сообщений: 1,133


>>Fantomas

СПАСИБО
Буду ковырятся, занятно. Жаль что мой VBA застрял на уровне древнего DOSa.
Интересно - значит разберусь.
Еще раз спасибо за толчек в нужном направлении.
Startrek вне форума  
 
Автор темы   Непрочитано 07.06.2004, 18:13
#17
Startrek

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)
)
Startrek вне форума  
 
Непрочитано 07.06.2004, 18:21
#18
{Smirnoff}

Инженер по системам безопасности
 
Регистрация: 23.11.2003
Рига
Сообщений: 1,099


Вот и чудненько... 8)
{Smirnoff} вне форума  
 
Непрочитано 30.03.2007, 16:33
#19
worlak

Конструктор
 
Регистрация: 03.09.2006
i-net
Сообщений: 5
<phrase 1=


Цитата:
Сообщение от Startrek
Уважаемые коллеги,
РАЗОБРАЛСЯ. Все на редкость просто. Вот наипримитивнейший лиспик для быстрой вставки даты

(defun c:dt ()
(command"mtext" pause" "w" "0" "%<\\AcVar Date \\f \"M/d/yyyy\">%" "")
(princ)
)

Все остальное в том же духе. Просто, не правда ли??
А как работать с этой строкой если надо выбирать объект?
%<\AcObjProp Object(%<\_ObjId 2126533416>%).Measurement \f "%lu2%pr0">%
worlak вне форума  
 
Непрочитано 30.03.2007, 17:27
#20
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


Цитата:
Сообщение от worlak
А как работать с этой строкой если надо выбирать объект?
%<\AcObjProp Object(%<\_ObjId 2126533416>%).Measurement \f "%lu2%pr0">%
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=26046yh
http://www.autocad.ru/cgi-bin/f1/board.cgi?t=19827ea
Александр Ривилис вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > Field-Autolisp/Vlisp ??