Тема: Как понять какие примитивы на листе ?
Как провести сканирование листа на предмет нахождения примитивов определенных типов ?
Информационный портал для профессионалов в области САПР
Вы не вошли. Пожалуйста, войдите или зарегистрируйтесь.
Форумы CADUser → Программирование → Delphi → Как понять какие примитивы на листе ?
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Как провести сканирование листа на предмет нахождения примитивов определенных типов ?
Пример модуля, который ищет в открытом документе на листе или в модели примитив типа БЛОК по имени "ОсновнойШтамт", и получает координаты точки вставки этого блока.
unit UnitToACAD; interface uses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, ComObj, StdCtrls, ExtCtrls, ComCtrls; type TFormToACAD = class(TForm) Label2: TLabel; Label1: TLabel; Button1: TButton; ProgressBar1: TProgressBar; procedure FormActivate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var FormToACAD: TFormToACAD; implementation uses UnitDM; {$R *.DFM} const { AcWindowState } acNorm = 1; acMin = 2; acMax = 3; { AcActiveSpace } acPaperSpace = 0; acModelSpace = 1; var Acad, Document, Model, P2, RefVal : OLEVariant; ShapName, Sh : string; Baza : TPoint; procedure TFormToACAD.FormActivate(Sender: TObject); var i : integer; begin Button1.Hide; P2 := VarArrayCreate([0,2], varDouble); try Acad := GetActiveOleObject('Autocad.Application'); Acad.WindowState := acMin; Document := Acad.ActiveDocument; Document.Activate; if Document.ActiveSpace = acModelSpace then Model := Document.ModelSpace else Model := Document.PaperSpace; i:=Model.Count-1; Sh := ''; ProgressBar1.Max := i; ProgressBar1.Position := i; Label1.Caption := 'Просмотр чертежа '+intToStr(ProgressBar1.Max) + ' объектов.'; Update; ProgressBar1.Show; repeat RefVal := Model.Item(i); [b] // Получаем имя типа примитива ! ShapName := RefVal.ObjectName;[/b] if (ShapName = 'AcDbBlockReference') then begin Sh := RefVal.EffectiveName; if (Sh = 'ОсновнойШтамп') then begin P2 := RefVal.InsertionPoint; Baza.x := P2[0]; Baza.y := P2[1]; end; end; Dec(i); ProgressBar1.Position := i; until (Sh = 'ОсновнойШтамп')or(i=-1); ProgressBar1.Hide; if Sh = 'ОсновнойШтамп' then begin // Делаю что мне нужно... end else Label1.Caption:='Блок "ОсновнойШтам" не найден!'; Acad.Visible := true; Acad.ZoomAll; Acad.Update; Acad.WindowState := acMax; Application.MessageBox(PChar('Готово !'), PChar(''), mb_Ok + mb_SystemModal); Button1.Show; except end; end; procedure TFormToACAD.Button1Click(Sender: TObject); begin Close; end; end.
Страницы 1
Чтобы отправить ответ, вы должны войти или зарегистрироваться
Форумы CADUser → Программирование → Delphi → Как понять какие примитивы на листе ?
Форум работает на PunBB, при поддержке Informer Technologies, Inc