В AutoLISP есть функция entlast(запоминает последний нарисованный объект), как выглядит ее анлог в Delphi? еесли я рисую в автокаде?
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > В AutoLISP есть функция entlast(запоминает последний нарисованный объект), как выглядит ее анлог в Delphi? еесли я рисую в автокаде?

В AutoLISP есть функция entlast(запоминает последний нарисованный объект), как выглядит ее анлог в Delphi? еесли я рисую в автокаде?

Ответ
Поиск в этой теме
Непрочитано 21.06.2012, 07:13 #1
В AutoLISP есть функция entlast(запоминает последний нарисованный объект), как выглядит ее анлог в Delphi? еесли я рисую в автокаде?
SNIIP
 
Регистрация: 04.05.2010
Сообщений: 338

суть в теме... нужно запонить последний нарисованный объект...
Просмотров: 4119
 
Непрочитано 21.06.2012, 08:32
#2
Кулик Алексей aka kpblc
Moderator

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


Для начала - объект создается каким образом? Руками пользователя или программно?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.06.2012, 08:39
#3
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от SNIIP Посмотреть сообщение
суть в теме... нужно запонить последний нарисованный объект...
Да уж...
Цитата:
Сообщение от ShaggyDoc
Изучайте объектную модель AutoCAD
Т.е. процитированный мною выше совет, который дал тебе ShaggyDoc в соседнем топике, ты решил пропустить мимо ушей? Зря...
Теперь, узнав одну команду, ты с чертежом собираешься работать исключительно через SendCommand? Тогда уж не извращайся и напиши обычный скрипт (scr-файл) - вот его и запускай без всяких "делфи"... Через командную строку (cmd.exe), запусти файл acad.exe, передав в виде аргументов соответствующий (не поленись заглянуть в хелп) ключ и имя скриптового файла. При этом не забывай о том, что в диалоговом окне Options, на вкладке User Preferences, тебе нужно правильно установить переключатель в группе Priority for Coordinate Data Entry, иначе результат может отличаться от ожидаемого.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 21.06.2012, 08:48
#4
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от SNIIP Посмотреть сообщение
В AutoLISP есть функция entlast(запоминает последний нарисованный объект), как выглядит ее анлог в Delphi? еесли я рисую в автокаде?
Код:
[Выделить все]
count := AutoCAD.Application.ActiveDocument.Modelspace.Count;
AutoCAD.Application.ActiveDocument.Modelspace.Item(count-1);
__________________
cadtools
TararykovDG вне форума  
 
Непрочитано 21.06.2012, 08:54
#5
Кулик Алексей aka kpblc
Moderator

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


TararykovDG, объект может быть нарисован внутри определения блока. Или внутри листа.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 21.06.2012, 08:55
#6
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от TararykovDG Посмотреть сообщение
Modelspace
потенциальному юзеру кода может понадобиться не только Modelspace, но и лэйаут или определение блока.
upd
Алексей меня опередил
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 21.06.2012, 09:06
#7
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
TararykovDG, объект может быть нарисован внутри определения блока. Или внутри листа.
Цитата:
Сообщение от hwd Посмотреть сообщение
потенциальному юзеру кода может понадобиться не только Modelspace, но и лэйаут или пространство редактора блока.
Да, конечно Вы правы, это была просто подсказка, а не готовый код, я подозреваю, что SNIIP этого хватит, а вообще SNIIP нужно пользоваться справкой
Миниатюры
Нажмите на изображение для увеличения
Название: 111.JPG
Просмотров: 71
Размер:	117.8 Кб
ID:	82517  
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 21.06.2012, 09:11
#8
SNIIP


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


Да, спасибо TararykovDG

ой, снова застопорился... вот пример вашего кода..
count := AutoCAD.Application.ActiveDocument.Modelspace.Count;
AutoCAD.Application.ActiveDocument.Modelspace.Item(count-1);

count сработало... все посчитало.. а вот соледующая строчка... она возвращает объект типа olevariant или нет?
и если да, то как потом этот объект указать в команде например _mirror? как отразить тот объект?

Последний раз редактировалось SNIIP, 21.06.2012 в 09:58.
SNIIP вне форума  
 
Непрочитано 21.06.2012, 10:51
#9
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


SNIIP, я не пишу на Delphi, точнее пишу, но не под AutoCAD, поэтому не знаю тонкостей, порывшись в справке, получилось так,
Код:
[Выделить все]
...
var
  BeginPoint, EndPoint: OleVariant;
  count : integer;
  AcadEnt : IAcadEntity;
begin
...
  count := AcadApp.ActiveDocument.ModelSpace.Count;
  AcadEnt := AcadApp.ActiveDocument.ModelSpace.Item(count-1);
  BeginPoint := VarArrayCreate([0, 2], varDouble);
  EndPoint :=  VarArrayCreate([0, 2], varDouble);
  BeginPoint := AcadApp.ActiveDocument.Utility.GetPoint(EmptyParam, 'Первая точка оси отражения: ');
  EndPoint := AcadApp.ActiveDocument.Utility.GetPoint(EmptyParam, 'Вторая точка оси отражения: ');
  AcadEnt.Mirror(BeginPoint, EndPoint);
...
end;
__________________
cadtools
TararykovDG вне форума  
 
Автор темы   Непрочитано 21.06.2012, 11:21
#10
SNIIP


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


блин, может подскажете справку по функциям autocad.application или сайт какой.. сложно разбираться что то...
AcadEnt : IAcadEntity; это не работает...ругается на тип...
SNIIP вне форума  
 
Непрочитано 21.06.2012, 11:32
#11
Дима_

Продуман
 
Регистрация: 22.02.2007
Питер
Сообщений: 2,839


В автокаде F1 нажми и внимательно читай - там все есть.
__________________
Когда в руках молоток все вокруг кажется гвоздями.
Дима_ вне форума  
 
Непрочитано 21.06.2012, 11:44
#12
TararykovDG

Программист-энтузиаст
 
Регистрация: 17.07.2009
Воронеж
Сообщений: 575


Цитата:
Сообщение от SNIIP Посмотреть сообщение
блин, может подскажете справку по функциям autocad.application или сайт какой.. сложно разбираться что то...
На это Дима_ уже ответил

Цитата:
Сообщение от SNIIP Посмотреть сообщение
AcadEnt : IAcadEntity; это не работает...ругается на тип...
Странно у меня работает, а Ты целиком взял код из поста #9, или под себя переделал, если целиком, то чему у Тебя равно AcadApp, потому как до этого долно быть еще и это, например:
Код:
[Выделить все]
type

  ...

  private
    { Private declarations }
     AcadApp: IAcadApplication;
  public
    { Public declarations }
  end;

...

function GetAcadApplication(Visible : boolean) : IAcadApplication;
var
  v : OleVariant;
begin
  Try
    v := GetActiveOleObject('AutoCAD.Application');
  Except
    v := CreateOleObject('AutoCAD.Application');
  end;
  Result := IDispatch(v) as IAcadApplication;
  if Visible then Result.Visible := True;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin

...

  AcadApp := GetAcadApplication(true);

...

end;
P. S. Повторяю - это пример, а не готовый код !!!
__________________
cadtools
TararykovDG вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > В AutoLISP есть функция entlast(запоминает последний нарисованный объект), как выглядит ее анлог в Delphi? еесли я рисую в автокаде?

Реклама i