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

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > AutoCad 2004. Как узнать масштаб нарисованной мультилинии?

AutoCad 2004. Как узнать масштаб нарисованной мультилинии?

Ответ
Поиск в этой теме
Непрочитано 15.12.2009, 10:32 #1
AutoCad 2004. Как узнать масштаб нарисованной мультилинии?
MartynovAS
 
Регистрация: 15.12.2009
Сообщений: 5

AutoCad 2004. Как узнать масштаб нарисованной мультилинии? (через LISP, команды или ActiveX). В AutoCad 2007 у мультилинии есть свойство - масштаб мультилинии, в 2004 оно отсутствует. При рисовании новой мультилинии можно задать переменную CMLSCALE. А как узнать масштаб уже существующей?
Просмотров: 5967
 
Непрочитано 15.12.2009, 10:45
#2
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


Команда "_List" ("Список").
Profan вне форума  
 
Автор темы   Непрочитано 15.12.2009, 10:55
#3
MartynovAS


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


Боюсь я несмогу воспользоваться этой командой через ActiveX, хотя там и есть вызов команд.
MartynovAS вне форума  
 
Непрочитано 15.12.2009, 11:03
#4
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


А у меня нет AutoCAD 2004.
Profan вне форума  
 
Непрочитано 15.12.2009, 11:29
#5
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Может как-то так:
Код:
[Выделить все]
(vla-get-MLineScale
  (vlax-ename->vla-object
    (car (entsel "\nВыберите мультилинию:"))
  ) ;_ end of vlax-ename->vla-object
) ;_ end of vla-get-MLineScale
Do$ вне форума  
 
Непрочитано 15.12.2009, 11:45
#6
Disney

Геодезист
 
Регистрация: 12.03.2009
Сибирь (где медведи по улицам ходят)
Сообщений: 860
Отправить сообщение для Disney с помощью Skype™


Do$, я всегда так ищу, вводишь значение искомого параметра, потом изучить либо (entget(car(entsel "???"))) либо (vlax-ename->vla-object(car(entsel "???"))), и смотриш, где оно(значение) всплывёт.
__________________
Почему все вдруг становятся умными, когда уже не надо?
Disney вне форума  
 
Непрочитано 15.12.2009, 12:04
#7
Олег (jr.)

специалист по околачиванию грушевых деревьев
 
Регистрация: 14.09.2004
Pietari, Venäjä
Сообщений: 811


Цитата:
Сообщение от MartynovAS Посмотреть сообщение
AutoCad 2004. Как узнать масштаб нарисованной мультилинии? (через LISP, команды или ActiveX). В AutoCad 2007 у мультилинии есть свойство - масштаб мультилинии, в 2004 оно отсутствует. При рисовании новой мультилинии можно задать переменную CMLSCALE. А как узнать масштаб уже существующей?
Или без ActiveX:

Код:
[Выделить все]
(if
(setq ent (entsel "\nSelect multiline>>"))
(alert (strcat "Scale: " (rtos (cdr (assoc 40 (entget (car ent))))))))
~'J'~
Олег (jr.) вне форума  
 
Непрочитано 15.12.2009, 13:03
#8
Do$

AutoCAD/Civil3D LISP/C#
 
Регистрация: 15.08.2008
Санкт-Петербург
Сообщений: 1,701
Отправить сообщение для Do$ с помощью Skype™


Offtop:
Цитата:
Сообщение от Disney Посмотреть сообщение
Do$, я всегда так ищу, вводишь значение искомого параметра, потом изучить либо (entget(car(entsel "???"))) либо (vlax-ename->vla-object(car(entsel "???"))), и смотриш, где оно(значение) всплывёт.
Ты не поверишь...
Do$ вне форума  
 
Автор темы   Непрочитано 15.12.2009, 13:18
#9
MartynovAS


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


Спасибо большое за ответы. Коль пошла такая пьянка не подскажите команду вызова LISP скрипта. _appload открывает окно для загрузки скрипта, а сразу указать имя файла нельзя? Или лучше сразу текст скрипта.
Вообще я очень далек от AutoCad, пишу приложение на Delphi, которое подключается к AutoCad через OLE/COM интерфейсы и использует его объектныю модель. Приложение уже написано и работоспособно под версии AutoCad 2007 и 2009. Проблема только в 2004 с получением масштаба мультилинии, так как в его объектной модели у класса AcadMLine отсутсвует свойство MLineScale.

Последний раз редактировалось MartynovAS, 15.12.2009 в 13:42.
MartynovAS вне форума  
 
Непрочитано 15.12.2009, 14:06
#10
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


MartynovAS,
Цитата:
Сообщение от MartynovAS Посмотреть сообщение
Вообще я очень далек от AutoCad, пишу приложение на Delphi, которое подключается к AutoCad через OLE/COM интерфейсы и использует его объектныю модель.
Можно попробовать так:
1. В переменной obj - указатель на объект мультилинии
2. В переменной doc - указатель на документ автокада
3. Используя метод SendCommand посылаем в документ команду на лиспе, которая прочитет масштаб и запишет его в системную переменную USERR1
4. С помощью метода GetVariable прочитаешь значение переменной
Пример на лиспе
Код:
[Выделить все]
(setq doc (vla-get-activedocument (vlax-get-acad-object))) ;_Указатель на документ
;;; obj - указатель на мультилинию (setq obj (vlax-ename->vla-object(car(entsel "\nSelect multiline:"))))
(vla-SendCommand doc
  "(progn (vl-load-com)(setvar \"USERR1\" (cdr(assoc 40 (entget (vlax-vla-object->ename obj))))))\n")
Цитата:
Сообщение от MartynovAS Посмотреть сообщение
_appload открывает окно для загрузки скрипта, а сразу указать имя файла нельзя?
Читай по ссылке в подписи
.................................................................|
.................................................................|
.................................................................|
.................................................................V
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 15.12.2009, 14:38
#11
MartynovAS


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


Большое спасибо VVA, буду разбираться..
MartynovAS вне форума  
 
Непрочитано 15.12.2009, 14:57
#12
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Если будут проблемы с передачей указателя, то объект можно найти по его хэндлу (свойство "HANDLE") и лисповской функцией handent
Так наверное даже лучше будет
Код:
[Выделить все]
(setq doc (vla-get-activedocument (vlax-get-acad-object))) ;_Указатель на документ
;;; obj - указатель на мультилинию (setq obj (vlax-ename->vla-object(car(entsel "\nSelect multiline:"))))
;;; hadle - хэндл объекта (vla-get-Handle obj)
(setq hndl (vlax-get obj "Handle"))
(vla-SendCommand doc
  "(progn (setvar \"USERR1\" (cdr(assoc 40 (entget (handent hndl))))))\n")
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Автор темы   Непрочитано 15.12.2009, 16:12
#13
MartynovAS


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


Все получилось благодоря VVA!

LISP:
Код:
[Выделить все]
 
(defun get_scale(p_hndl)
(vl-load-com)
(setq doc (vla-get-activedocument (vlax-get-acad-object))) ;_Указатель на документ
(setq v_hndl p_hndl) ;_Указатель на объект
(vla-SendCommand doc
  "(progn (setvar \"USERR1\" (cdr(assoc 40 (entget (handent v_hndl))))))\n")
) ;
DELPHI:
Код:
[Выделить все]
 for i:=0 to count-1 do
  begin
     AcadObject:=AcadApplication.ActiveDocument.ModelSpace.Item(i);
     if AcadObject.ObjectName='AcDbMline' then
      begin
       Memo1.Lines.Add('Хэндл мультилинии:'+AcadObject.Handle);
       AcadApplication.ActiveDocument.SendCommand('(get_scale "'+AcadObject.Handle+'")'+chr(13));
       Scale:=AcadApplication.ActiveDocument.GetVariable('USERR1');
       Memo1.Lines.Add('Масштаб мультилинии:'+FloatToStr(Scale));
      end;
  end;

У еще лучше без отдельно скрипта на лиспе:
DELPHI:
Код:
[Выделить все]
 
 for i:=0 to count-1 do
  begin
     AcadObject:=AcadApplication.ActiveDocument.ModelSpace.Item(i);
     if AcadObject.ObjectName='AcDbMline' then
      begin
       Memo1.Lines.Add('Хэндл мультилинии:'+AcadObject.Handle);
       AcadApplication.ActiveDocument.SendCommand('(progn (setvar "USERR1" (cdr(assoc 40 (entget (handent "'+AcadObject.Handle+'"))))))'+chr(13));
       Scale:=AcadApplication.ActiveDocument.GetVariable('USERR1');
       Memo1.Lines.Add('Масштаб мультилинии:'+FloatToStr(Scale));
      end;
  end;

Последний раз редактировалось MartynovAS, 15.12.2009 в 16:31.
MartynovAS вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > AutoCad 2004. Как узнать масштаб нарисованной мультилинии?

Реклама i
Опции темы Поиск в этой теме
Поиск в этой теме:

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как построить чертеж по разным размерам в Autocad Lacos AutoCAD 1 02.11.2009 08:53
Как загрузить файл пикетов из блокнота в AUTOCAD 2004 RUS? Victor83 AutoCAD 8 26.10.2009 22:09
Новый драйвер для Phantom AutoCAD OLE/ADI Printer. Как? CyberMan AutoCAD 4 26.04.2009 10:19
Как в AutoCad 2006 изменить масштаб только по оси X или Y Никл AutoCAD 1 21.08.2008 13:06
AutoCad 2004 RUS или AutoCad LT 2004 RUS DEN AutoCAD 7 23.01.2004 22:23