img
00:00
imgDRKB online - Как работать с DWG файлами (AutoCAD)?
imgimgimg
  Общие вопросы
  Delphi IDE, компиллятор, отладчик, редактор
  Язык программирования Дельфи
  VCL
  Системные функции и WinAPI
  Базы данных
  Работа с файловой системой
  Репортинг, работа с принтером
  Работа с сетью, интернетом, протоколами
  Работа с графикой и мультимедиа
  Математика, алгоритмы
  Форматы файлов, данных. Конвертация форматов
  ANSI ---> ASCII
  BMP ---> AVI (для TAnimate)
  BMP ---> EMF
  BMP ---> DIB
  BMP ---> ICO
  BMP ---> JPG
  BMP --> EMF (Enhanced Metafile)
  BMP ---> RTF
  BMP ---> WMF
  CUR ---> BMP
  ICO ---> BMP
  JPG ---> BMP
  TIF ---> PDF
  TXT ---> GIF
  DOC ---> HTML
  WMF ---> BMP
  RTF-->HTML
  HTML --> RTF
  DFM -->TXT, TXT --> DFM
  Win1251 <-> Koi8r
  Как инсталлировать INF файл?
  Как конвертировать WideString в String?
  Как определить графический формат файла (не используя расширение)?
  Как прочитать MP3 ID3-Tag?
  Как прочитать заголовок wav файла?
  Информация о AVI файле (разбор заголовка AVI)
  Как работать с DWG файлами (AutoCAD)?
  Как работать с GIF файлами?
  Как работать с PDF файлами?
  Как разрезать wav файл?
  Как узнать размер картинки для JPG, GIF и PNG файлов?
  Компонент для работы с PCX файлами
  Пример работы чтения и сохранении wav-файлов
  Работа с TGA файлами
  Формат wave файла
  Декомпилляция звукового файла формата Wave и получение звуковых данных
  Flash SWF --> EXE
  Преобразование иконок в Gliph-ы
  Документация на основе RTF-шаблона
  "Дедушка RTF" еще послужит
  ActiveX, COM, DCOM, MIDAS, CORBA, интерфейсы, OLE, DDE
  Разработка приложений
  Kylix
  Delphi.Net
  Развлечения
  
  [drkb=3998] Комментариев: 0 
Как работать с DWG файлами (AutoCAD)?



Vit: Примечания в коде были на каком-то не то китайском, не то японском языке - удалены!
delphi
unit DWGView;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  ExtCtrls;

type
  BITMAPINFO256 = record
    bmiHeader: BITMAPINFOHEADER;
    bmiColors: array[0..255] of RGBQUAD;
  end;

type
  TNoPreviewEvent = procedure(Sender: TOBject) of object;
  TFileErrorEvent = procedure(Sender: TOBject; DWGName: string) of object;

  TDWGView = class(TImage)
  private
    FDWGVersion: string;
    FDWGFile: string;
    FNoPreviewEvent: TNoPreviewEvent;
    FOnFileError: TFileErrorEvent;
    FImage: TImage;
    procedure SetDWGFile(const Value: string);
    procedure SetFImage(const Value: TImage);
  protected
    procedure ReadDWG;
    constructor TDWGView;
  public
  published
    property Image: TImage read FImage write SetFImage;
    property DWGFile: string read FDWGFile write SetDWGFile;
    property DWGVersion: string read FDWGVersion;
    property OnNoPreview: TNoPreviewEvent read FNoPreviewEvent write FNoPreviewEvent;
    property OnFileError: TFileErrorEvent read FOnFileError write FOnFileError;
  end;

procedure Register;

implementation

procedure Register;
begin
  RegisterComponents('Voice', [TDWGView]);
end;

procedure TDWGView.ReadDWG;
var
  DWGF: TFileStream;
  MemF: TMemoryStream;
  BMPF: TMemoryStream;
  SentinelF: TMemoryStream;
  bif: BITMAPINFO256;
  bfh: BITMAPFILEHEADER;
  PosSentinel: LongInt;
  LenPreview: Integer;
  RasterPreview: ShortInt;
  PosBMP: Integer;
  LenBMP: Integer;
  IndexPreview: Integer;
  TypePreview: Shortint;
begin
  if Assigned(FOnFileError) then
    FOnFileError(Self, FDWGFile);
  DWGF := TFileStream.Create(FDWGFile, fmOpenRead);
  BMPF := TMemoryStream.Create;
  MemF := TMemoryStream.Create;
  SentinelF := TMemoryStream.Create;
  try
    SetLength(FDWGVersion, 6);
    DWGF.ReadBuffer(FDWGVersion[1], 6);
    DWGF.Position := 13;
    DWGF.Read(PosSentinel, 4);
    DWGF.Position := PosSentinel;
    SentinelF.CopyFrom(DWGF, 16);
    DWGF.Read(LenPreview, 4);
    DWGF.Read(RasterPreview, 1);
    for IndexPreview := RasterPreview - 1 downto 0 do
    begin
      MemF.Position := 0;
      MemF.CopyFrom(DWGF, 9);
      MemF.Position := 0;
      MemF.Read(TypePreview, 1);
      case TypePreview of
        1: ;
        2:
          begin
            MemF.Position := 1;
            MemF.Read(PosBMP, 4);
            MemF.Read(LenBMP, 4);
            DWGF.Position := PosBMP;
            DWGF.ReadBuffer(bif, sizeof(bif));

            with bif do
            begin
              bmiColors[0].rgbBlue := 0;
              bmiColors[0].rgbGreen := 0;
              bmiColors[0].rgbRed := 0;

              bmiColors[225].rgbBlue := 255;
              bmiColors[225].rgbGreen := 255;
              bmiColors[225].rgbRed := 255;
            end;

            bfh.bfType := $4D42;
            bfh.bfSize := LenBMP + sizeof(bfh);
            bfh.bfReserved1 := 0;
            bfh.bfReserved2 := 0;
            bfh.bfOffBits := 14 + $28 + 1024;

            BMPF.Position := 0;
            BMPF.Write(bfh, sizeof(bfh));
            BMPF.WriteBuffer(bif, sizeof(bif));
            BMPF.CopyFrom(DWGF, LenBMP - 1064);
            BMPF.Position := 0;
            Picture.Bitmap.LoadFromStream(BMPF);
          end;
        3: ;
      end;

    end;
  finally
    SentinelF.Free;
    MemF.Free;
    DWGF.Free;
    BMPF.Free;
  end;

end;

procedure TDWGView.SetDWGFile(const Value: string);
begin
  FDWGFile := Value;
  ReadDWG;
end;

procedure TDWGView.SetFImage(const Value: TImage);
begin
  FImage := Value;
end;

constructor TDWGView.TDWGView;
begin
  //TODO: Add your source code here
  FDWGFile := '';
  FDWGVersion := '';
end;

end.


@Drkb::04294
Взято с Delphi Knowledge Base: http://www.baltsoft.com/
Количество статей: 4366
 
Вход
Имя:
Пароль:
Запомнить
Регистрация Забыли пароль?
Мини-чат :)
Необходима регистрация
Архив мини-чата
12-03-2025 15:42
DartKane
О! Нашёл в панели управления!
12-03-2025 15:37
DartKane
Всем привет. А как поменять пароль на свой?
04-07-2024 06:46
Adler
https://gamedev....27.png
04-07-2024 06:15
Adler
yt kjubyntcm yf 'njv cfqnt: https://gamedev....903#m2
02-05-2024 16:57
Divann
никогда не видел подобного сайта, как ваш [url=http://desksoft.ru] smiley!
02-05-2024 16:57
Divann
привет
26-03-2024 15:49
Roan
Надеюсь, оно ещё живо. Классный ресурс
03-03-2024 16:34
ПаХаН
Надо чтобы этот сайт был жив
20-02-2024 06:12
memoryspeak
обалденный сайт. искал ответ на вопрос, как скриптом закрыть вкладку, и наткнулся на это чудо.
08-02-2024 20:22
stark452
Разработчику огромный респект
Статистика
 СегодняВсего
Посетителей44310022335
Запросов2693449162309
Online
Пользователей0
Гостей12
imgimgimgimg
 
img
     00:00