请问谁有读写dxf的源代码(fordelphi)提供???250分提供!(250分)

  • 主题发起人 hshengli
  • 开始时间
H

hshengli

Unregistered / Unconfirmed
GUEST, unregistred user!
我的信箱
hsl263@163.com
 
到http://www.drdwg.com/看看。
 
读写DXF不难吧,而且你这样的需求太笼统胃,我们有DXF访问的代码,但都是和我们自身设计的类
嵌得很紧,如何给你呢。
 
吕大侠,你能不能从你的代码中取一段读dxf文件的代码及其相关的数据结构???
我现在有急用,主要是想与一个图形系统交换数据用!可是我从来没搞过相关这方面的编程!
谢谢你了,能不能发到我的信箱
 
全部给你不太合适,给你部分吧,不过也差不多了,没给的都很简单。

类:
TGeoDXFFile = Class(TGeoFile)
private
bReadPolyLine : boolean
//用标记 开始读 POLYLINE,用在 GetObjXYS, Read_2DPoint 里
bFindSEQEND : boolean
//在 GetObjXYS 开始读 POLYLINE 后,用于标记是否读到 SEQEND 组
iPolyLine70Group : integer
// 用在读DXF 文件的 POLYLINE 时, 该组值默认为0,如果为 1,则为封闭多边形
nSequence : longword;
function Read_2DPoint(var dX:do
uble;var dY:do
uble;intXGroup: integer =10): boolean;
function Read_GroupValue(intGroup: integer;var strLine: string): boolean;
function NextGroupCode(var intGroup: integer;var strLine: string): Boolean;
function Skip_upto_Section(strSectName:string) : boolean;
public
DXFFile : TextFile;
// WriteFile : TextFile;
//检测读取的文件用,最后要删除 ,存在 E:/Temp/Write.txt

constructor Create(FileName: string;
OpenMode: FileState);override;
destructor Destroy;override;
procedure OpenFile;
override;
procedure CloseFile;
override;

function EOF: boolean;
override;
procedure GetFileHeader(var nData: integer;
var LayerType : integer;
var Rect: TGeoRect);
override;
procedure PutFileHeader(nData: integer;
LayerType : integer;
Rect: TGeoRect);
override;

procedure GetObjHeader(var ObjHeader: TGeoObjHeader);
override;
procedure GetObjXYS(ObjHeader : TGeoObjHeader;PtList : TList;ObjPen : TGeoPen;ObjBrush : TGeoBrush;ObjFont : TGeoFont);
override;
procedure PutObjHeader(var ObjHeader: TGeoObjHeader;ObjPen : TGeoPen;ObjBrush : TGeoBrush;ObjFont : TGeoFont;Data : Pointer);
override;
procedure PutObjXYS(ObjHeader : TGeoObjHeader;PtList : TList;ObjPen : TGeoPen;ObjBrush : TGeoBrush;ObjFont : TGeoFont;Data : Pointer);
override;
procedure PutFinalSomeThing;override;
procedure BuildColumnList(Table : TTable);override;
procedure CreatePropertyFile(Table : TTable;OutFileName : string;ObjCount : integer);override;
end;


function TGeoDXFFile.Read_2DPoint(var dX:do
uble;var dY:do
uble;intXGroup: integer =10): boolean;
var intGroup : integer;
strLine : string;
bFindX : boolean;
begin

Result := False;
bFindX := False;
bFindSEQEND := False;
iPolyLine70Group := 0;
while bFindX = Falsedo

begin

if (NextGroupCode(intGroup,strLine)) then

begin

//在 GetObjXYS 开始读 POLYLINE 后,用于检查是否读到 SEQEND 组
//如果读到,跳出,返回 FALSE
if ((bReadPolyLine = True) and (strLine = 'SEQEND')) then

begin

bFindSEQEND := True;
exit;
end;


// 用在读DXF 文件的 POLYLINE 时, 该组值默认为0,如果为 1,则为封闭多边形
if ((bReadPolyLine = True) and (intGroup = 70)) then
iPolyLine70Group := StrtoInt(strLine);

//if strLine = '$DIMAPOST' then
showmessage ('$DIMPAOSE');

if intGroup = intXGroup then

begin

//if strLine = '$DIMAPOST' then
showmessage ('$DIMPAOSE');
dX := StrtoFloat(strLine);
bFindX := True;
end;

end
else

//取不到 10 组,到了文件末尾
break;
end;


if NextGroupCode(intGroup,strLine) then

begin

dY := StrtoFloat(strLine);
Read_2DPoint := True;
end;

end;


function TGeoDXFFile.Read_GroupValue(intGroup: integer;var strLine: string): boolean;
var iGroup : integer;
begin

Result := False;
while NextGroupCode(iGroup,strLine)do
begin

if iGroup = intGroup then
begin

//找到组 intGroup 的值
Result := True;
break;
end;

end;

end;


function TGeoDXFFile.NextGroupCode(var intGroup: integer;var strLine: string): Boolean;
var strBuf : string;
begin

Result := FALSE;
if System.Eof(DXFFile) then
begin

Exit;
end;


Readln(DXFFile,strBuf);

//监测读取的组值用,最后需要删除
// AssignFile(WriteFile,'E:/Temp/Write.txt');
// Append(WriteFile);
// Writeln(WriteFile,strBuf);


intGroup := StrtoInt(trim(strBuf));
if Trim(strBuf) = '' then
exit;

Readln(DXFFile,strBuf);

//监测读取的组值用,最后需要删除
// Writeln(WriteFile,strBuf);
// system.CloseFile(WriteFile);

strLine := Trim(strBuf);
// if Trim(strBuf) = '' then
exit;
//组值可以为空

Result := TRUE;
end;


// 跳到文件的某个节 HEADER , TABLES , BLCOKS , ENTITIES
// 或跳到某个制定位置
// LastModified 2002/05/15
function TGeoDXFFile.Skip_upto_Section(strSectName:string) : boolean;
var bFileEnd : boolean;
intGroup : integer;
strLine : string;
begin

//跳到文件第一行
reset(DXFFile);
bFileEnd := False;
while bFileEnd = Falsedo

begin

if System.Eof(DXFFile) then
begin

Exit;
end;

if NextGroupCode(intGroup,strLine) then

begin

if UpperCase(strLine) = UpperCase(strSectName) then

begin

Result := True;

break;
end;


end
else

//取不到值,到了文件末尾 或 文件错误
break;
end;

end;


 
首先谢谢斑竹吕雪松;
不过你能不能给我讲一下这几个数据结构和变量:
TGeoRect,LayerType,PtList,TGeoPen,TGeoBrush,TGeoFont
稍后一定给分;
 
TGeoRect 层范围
LayerType 层类型
PtList 地物的坐标链表
TGeoPen,TGeoBrush,TGeoFont 就是从 Pen Brush, Font 里继承过来的,你说是干什么的。


 
谁有完整的autocad2000下的dxf文件格式?
能不能发到我的信箱:hsl263@163.com
 
to hshengli:
你到 autocad 公司网站上去下。 我也是在那里下的。
很小,才几百K。 有 PDF 和 CHM 格式的文档。
 
多人接受答案了。
 

Similar threads

D
回复
0
查看
734
DelphiTeacher的专栏
D
顶部