| Правила | Регистрация | Пользователи | Поиск | Сообщения за день | Все разделы прочитаны |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > lisp, AutoCAD Architecture 2008. Стандартная команда не воспринимает опцию в виде строки

lisp, AutoCAD Architecture 2008. Стандартная команда не воспринимает опцию в виде строки

Ответ
Поиск в этой теме
Непрочитано 12.05.2011, 19:23 #1
lisp, AutoCAD Architecture 2008. Стандартная команда не воспринимает опцию в виде строки
молодой человек
 
Регистрация: 14.11.2007
Сообщений: 159

Если ввести в ручную название стиля несущего элемента, то всё работает!
Код:
[Выделить все]
 (vl-cmdf "_.BeamAdd" "_st" "I18" "_r" "270" pause pause "")
Если же до названия стиля добираться через словарь и подставить в код, то вместо нужного профиля рисует стандартный профиль (под названием "Standard").

Код:
[Выделить все]
 (setq tl (vla-get-name(vla-item (vla-item (vla-get-dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "AEC_STRUCTURALMEMBER_STYLES") "I18"))) 
  (vl-cmdf "_.BeamAdd" "_st" tl "_r" "270" pause pause "")
Ниже файл с несущим элементом

Вложения
Тип файла: dwg
DWG 2007
Для форума.dwg (121.8 Кб, 952 просмотров)

Просмотров: 4073
 
Непрочитано 12.05.2011, 20:12
#2
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Посмотрите тип tl Даже мне, товарищу далекому от AutoCAD Architecture, ясно, что второй код похож на бред
gomer вне форума  
 
Непрочитано 12.05.2011, 20:14
#3
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Да в том-то и дело, что не похоже на бред. Имя - строковое, так чт все логично.
Проверить сейчас не могу, на ноуте только "чистый" AutoCAD, который не знает словарей ADT...
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.05.2011, 20:26
#4
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


А что показывает !tl и далее вглубь... это раз, я говорю что через 3е колено ищется то что уже изветстно
Код:
[Выделить все]
(setq tl (vla-get-name(vla-item (vla-item (vla-get-dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "AEC_STRUCTURALMEMBER_STYLES") "I18")))
gomer вне форума  
 
Непрочитано 12.05.2011, 20:41
#5
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Я так понимаю, что вопрос на самом деле в том, чтобы передавать в команду переменное имя стиля.
Хотя, вспоминая свою работу в ADT, я не очень понимаю глубинного смысла этого шага.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 12.05.2011, 20:45
#6
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


отож
gomer вне форума  
 
Автор темы   Непрочитано 12.05.2011, 23:25
#7
молодой человек


 
Регистрация: 14.11.2007
Сообщений: 159


Я не стал показывать весь код, но вкратце он делает следующее:
1. В диалоговый режим выводится список всех доступных (то есть находящихся в текущем файле) несущих элементов (их достаю из словарей как в коде из 1-го поста). В этом же диалоге задаются данные, которые цепляются к профилю для дальнейшего специфицирования.
2. Пользователь выбирает интересующий его элемент.
3. Программа запоминает выбранный элемент в переменную tl.
4. С помощью кода в 1-м посту строит в интерактивном режиме нужный элемент.

Цитата:
А что показывает !tl и далее вглубь... это раз, я говорю что через 3е колено ищется то что уже изветстн
В том то и дело, что неизвестно какие несущие элементы доступны для использования, поэтому приходится узнавать через словарь.

Цитата:
Даже мне, товарищу далекому от AutoCAD Architecture, ясно, что второй код похож на бред
Уважаемый, gomer, при всём уважении, Вы действительно далеки от AutoCAD Architecture, но спасибо за участие!
молодой человек вне форума  
 
Непрочитано 13.05.2011, 00:11
#8
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от молодой человек Посмотреть сообщение
В том то и дело, что неизвестно какие несущие элементы доступны для использования, поэтому приходится узнавать через словарь.
в том то и дело, что если элемента нет, то код должен ругаться... на ошибку автоматизации
можно вот так узнать что у вас в чертеже есть...
Код:
[Выделить все]
 (setq retval '())
(vlax-for $
	    (vla-Item (vla-get-dictionaries
			(vla-get-ActiveDocument (vlax-get-acad-object))
		      )
		      "AEC_STRUCTURALMEMBER_STYLES"
	    )
  (setq retval (cons (vla-get-Name $ retval)))
)
gomer вне форума  
 
Непрочитано 13.05.2011, 01:07
#9
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 39,787


Цитата:
Сообщение от gomer Посмотреть сообщение
в том то и дело, что если элемента нет, то код должен ругаться... на ошибку автоматизации
можно вот так узнать что у вас в чертеже есть...
Код:
[Выделить все]
 (setq retval '())
(vlax-for $
	    (vla-Item (vla-get-dictionaries
			(vla-get-ActiveDocument (vlax-get-acad-object))
		      )
		      "AEC_STRUCTURALMEMBER_STYLES"
	    )
  (setq retval (cons (vla-get-Name $ retval)))
)
Со скобками напутал. Надо так:
Код:
[Выделить все]
 (setq retval '())
(vlax-for $
	    (vla-Item (vla-get-dictionaries
			(vla-get-ActiveDocument (vlax-get-acad-object))
		      )
		      "AEC_STRUCTURALMEMBER_STYLES"
	    )
  (setq retval (cons (vla-get-Name $) retval))
)
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 13.05.2011, 01:09
#10
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Со скобками напутал
О й
gomer вне форума  
 
Автор темы   Непрочитано 13.05.2011, 16:48
#11
молодой человек


 
Регистрация: 14.11.2007
Сообщений: 159


Цитата:
в том то и дело, что если элемента нет, то код должен ругаться... на ошибку автоматизации
можно вот так узнать что у вас в чертеже есть...
gomer, я же писал:
Цитата:
1. В диалоговый режим выводится список всех доступных (то есть находящихся в текущем файле) несущих элементов
И выводится он(список несущих элементов) как-раз с помощью такого же кода, который Вы написали с целью предотвратить-
Цитата:
ошибку автоматизации
Суть проблемы абсолютно не в этом, а в том, что подставляя одно из значений,
которое мы получили заранее, в код в первом посту- Autocad его, почему-то, просто не воспринимает.
молодой человек вне форума  
 
Непрочитано 13.05.2011, 17:57
#12
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Код:
[Выделить все]
 (setq tl "I18") 
 (vl-cmdf "_.BeamAdd" "_st" tl "_r" "270" pause pause "")
а так работает?
gomer вне форума  
 
Автор темы   Непрочитано 13.05.2011, 19:33
#13
молодой человек


 
Регистрация: 14.11.2007
Сообщений: 159


Цитата:
а так работает?
да, так работает, а вот так- нет:
Код:
[Выделить все]
 (setq tl (vla-get-name(vla-item (vla-item (vla-get-dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "AEC_STRUCTURALMEMBER_STYLES") "I18"))) 
(vl-cmdf "_.BeamAdd" "_st" tl "_r" "270" pause pause "")
Уже пытался пользоваться конвертацией с помощью команд:
vl-string->list, vl-list->string всё-равно безрезультатно.
Как-то обидно аж, целый день получается в пустую потратил, так как вообще не ожидал споткнуться на этом шаге (((
молодой человек вне форума  
 
Непрочитано 13.05.2011, 20:30
#14
gomer

строю, ломаю
 
Регистрация: 03.04.2008
Украина
Сообщений: 5,515


Цитата:
Сообщение от молодой человек Посмотреть сообщение
vl-string->list, vl-list->string всё-равно безрезультатно.
Код:
[Выделить все]
 (setq tl (vla-get-name(vla-item (vla-item (vla-get-dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "AEC_STRUCTURALMEMBER_STYLES") "I18")))
(alert (vl-princ-to-string (type tl)))
(alert (vl-princ-to-string  tl))
а так что выдает?
gomer вне форума  
 
Непрочитано 13.05.2011, 21:03
#15
Александр Ривилис

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


Проверил в AA2011. После кода:
Код:
[Выделить все]
(setq tl (vla-get-name(vla-item (vla-item (vla-get-dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "AEC_STRUCTURALMEMBER_STYLES") "I18")))
AA2011 отказывается воспринимать стиль I18 к любом виде, в том числе и если вручную (!!!) запустить команду _BeamAdd. Похоже это глюк при работе с AA объектными методами.
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 15.05.2011, 14:49
#16
молодой человек


 
Регистрация: 14.11.2007
Сообщений: 159


Вся неприятность заключается в том, что результатом кода:
Код:
[Выделить все]
 (setq tl (vla-get-name(vla-item (vla-item (vla-get-dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "AEC_STRUCTURALMEMBER_STYLES") "I18")))
является обычное строковое значение и все стандартные команда Autolispa(в том числе vl-string->list, vl-list->string, (vl-princ-to-string (type tl)), (vl-princ-to-string tl)) воспринимают это значение как надо, кроме команды _BeamAdd. А если ввести вручную "I18", то всё работает! И как AA2008 видит эту разницу между
Код:
[Выделить все]
 (setq tl "I18")
(setq tl (vla-get-name(vla-item (vla-item (vla-get-dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "AEC_STRUCTURALMEMBER_STYLES") "I18")))
непонятно.
Цитата:
AA2011 отказывается воспринимать стиль I18 к любом виде, в том числе и если вручную (!!!) запустить команду _BeamAdd. Похоже это глюк при работе с AA объектными методами.
да, действительно я заметил, что после того как запустить этот код:
Код:
[Выделить все]
 (setq tl (vla-get-name(vla-item (vla-item (vla-get-dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "AEC_STRUCTURALMEMBER_STYLES") "I18")))
2	 (vl-cmdf "_.BeamAdd" "_st" tl "_r" "270" pause pause "")
становится невозможным управлять изменением вручную стилей несущих элементов. Эта картина наблюдается в файле, который я выложил. Прикрепляю "нормальный" файл
Вложения
Тип файла: dwg
DWG 2007
I18.dwg (198.7 Кб, 959 просмотров)
молодой человек вне форума  
 
Непрочитано 15.05.2011, 15:38
#17
Александр Ривилис

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


Цитата:
Сообщение от молодой человек Посмотреть сообщение
И как AA2008 видит эту разницу между
Код:

1 (setq tl "I18")
2 (setq tl (vla-get-name(vla-item (vla-item (vla-get-dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "AEC_STRUCTURALMEMBER_STYLES") "I18")))

непонятно.
А разницы никакой он и не видит. Просто по непонятным причинам происходит сбой в ActiveX-модели AA при вызове:
Код:
[Выделить все]
 (vla-item (vla-item (vla-get-dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "AEC_STRUCTURALMEMBER_STYLES") "I18")
Александр Ривилис вне форума  
 
Автор темы   Непрочитано 15.05.2011, 15:59
#18
молодой человек


 
Регистрация: 14.11.2007
Сообщений: 159


Александр Ривилис, спасибо Вам большое, ситуация начинает проясняться.
Только что проверил- действительно сбой начинается уже после вызова:
Код:
[Выделить все]
 (vla-item (vla-item (vla-get-dictionaries (vla-get-ActiveDocument (vlax-get-acad-object))) "AEC_STRUCTURALMEMBER_STYLES") "I18")
и откат не помогает.
Может быть как-то можно после выполнения этого кода ликвидировать сбой?
Попробую через ent-указатели работать. Надеюсь там не будет таких глюков.

Всем спасибо за отклик, через ent-указатели АА2008 любезно согласился работать!)))

Александр Ривилис, если Вам не трудно, не могли бы Вы
рассказать как обнаружить этот сбой? Редактор Autolispa никакой
ошибки не выдаёт и возвращает вполне ожидаемый результат!

Последний раз редактировалось молодой человек, 16.05.2011 в 16:57.
молодой человек вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > lisp, AutoCAD Architecture 2008. Стандартная команда не воспринимает опцию в виде строки

Размещение рекламы
Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
запуск программы из AutoCADа kminas Программирование 19 15.06.2012 13:42
В русской версии AutoCAD 2010 SP1 32-bit файл Acad.PGP содержит ошибки. hwd Баги и пожелания в Autodesk 21 21.04.2010 20:27
AutoCAD Architecture 2008 модель купола Backbird Вертикальные решения на базе AutoCAD 3 07.04.2008 22:02
текст командной строки под курсором Autocad 2008 aaronman AutoCAD 16 20.08.2007 00:45
-= Autodesk Autocad Architecture Version 2008 =- CADastr AutoCAD 6 19.03.2007 10:52