DXF格式是一种开源的CAD文件格式,如何实现Java代码对齐的解析,在网上找了很久,也没有找到非常成熟的库。很奇怪,开源的格式,正常应该会有很多的库来支持。只找到了一个kabeja库,最新版本还是2008年出的0.4版本,而且官网还是提供jar和exe运行文件的支持方式。在研究它的过程中遇到了一些问题,这里记录下来,希望大家少踩一些坑吧。

下载依赖

  1. https://kabeja.sourceforge.net/index.html下载对应的包就可以
  2. 下载完成后,解压缩,找到lib文件夹下的kabeja-0.4.jar,它是核心包,如果需要其他模块,也可以引入其他的包
  3. 将这个jar包打入本地Maven仓库
mvn install:install-file -Dfile=E:\temp\lib\kabeja-0.4.jar -DgroupId=org.kabeja -DartifactId=kabeja -Dversion=0.4 -Dpackaging=jar
  1. 在pom文件中引入
<dependency>
            <groupId>org.kabeja</groupId>
            <artifactId>kabeja</artifactId>
            <version>0.4</version>
        </dependency>

代码测试

package com.example.gdal;

import org.kabeja.dxf.*;
import org.kabeja.parser.ParseException;
import org.kabeja.parser.Parser;
import org.kabeja.parser.ParserBuilder;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.Iterator;
import java.util.List;

public class ReadDxf {
    public static void main(String[] args) throws FileNotFoundException, ParseException {
        Parser dxfParser = ParserBuilder.createDefaultParser();
        dxfParser.parse(new FileInputStream("C://Users/hanbo/Desktop/cad/color.dxf"), "UTF-8");//需要转换的dxf
        DXFDocument doc = dxfParser.getDocument();

//        System.out.println(doc.);
        //遍历图层
        Iterator iter= doc.getDXFLayerIterator();

        while (iter.hasNext()){
            DXFLayer dxfLayer = (DXFLayer)iter.next();
            String layerName=dxfLayer.getName();
//            System.out.println("读取图层"+layerName);
            readEntity(dxfLayer);
        }

        readBlock(doc);
    }

    public static void readEntity(DXFLayer layer){
        Iterator iter= layer.getDXFEntityTypeIterator();
        while (iter.hasNext()){
            String s=(String) iter.next();
//            System.out.println(s);
            getEntity(layer,s);
        }
    }
    //读取block
    public static void readBlock(DXFDocument doc){
        Iterator iter= doc.getDXFBlockIterator();
        while (iter.hasNext()){
            DXFBlock s=(DXFBlock) iter.next();

//            System.out.println(s.getName());
        }
    }
    //读取图层下的实体
    public static void getEntity(DXFLayer layer,String type){
        List<DXFEntity>  entities= layer.getDXFEntities(type);
        for (int i = 0; i < entities.size(); i++) {
            System.out.println(entities.get(i).getColor());
            String color= DXFColor.getRGBString(entities.get(i).getColor());

            System.out.println(color);
//            System.out.println(entities.get(i).getID());
        }
    }
}

注意事项

解析出来的实体的颜色都是一个整数,不是rgb格式的,查询资料发现可以参考下表中数据

索引号

R

G

B

1

255

0

0

2

255

255

0

3

0

255

0

4

0

255

255

5

0

0

255

6

255

0

255

7

255

255

255

8

128

128

128

9

192

192

192

10

255

0

0

11

255

127

127

12

204

0

0

13

204

102

102

14

153

0

0

15

153

76

76

16

127

0

0

17

127

63

63

18

76

0

0

19

76

38

38

20

255

63

0

21

255

159

127

22

204

51

0

23

204

127

102

24

153

38

0

25

153

95

76

26

127

31

0

27

127

79

63

28

76

19

0

29

76

47

38

30

255

127

0

31

255

191

127

32

204

102

0

33

204

153

102

34

153

76

0

35

153

114

76

36

127

63

0

37

127

95

63

38

76

38

0

39

76

57

38

40

255

191

0

41

255

223

127

42

204

153

0

43

204

178

102

44

153

114

0

45

153

133

76

46

127

95

0

47

127

111

63

48

76

57

0

49

76

66

38

50

255

255

0

51

255

255

127

52

204

204

0

53

204

204

102

54

153

153

0

55

153

153

76

56

127

127

0

57

127

127

63

58

76

76

0

59

76

76

38

60

191

255

0

61

223

255

127

62

153

204

0

63

178

204

102

64

114

153

0

65

133

153

76

66

95

127

0

67

111

127

63

68

57

76

0

69

66

76

38

70

127

255

0

71

191

255

127

72

102

204

0

73

153

204

102

74

76

153

0

75

114

153

76

76

63

127

0

77

95

127

63

78

38

76

0

79

57

76

38

80

63

255

0

81

159

255

127

82

51

204

0

83

127

204

102

84

38

153

0

85

95

153

76

86

31

127

0

87

79

127

63

88

19

76

0

89

47

76

38

90

0

255

0

91

127

255

127

92

0

204

0

93

102

204

102

94

0

153

0

95

76

153

76

96

0

127

0

97

63

127

63

98

0

76

0

99

38

76

38

100

0

255

63

101

127

255

159

102

0

204

51

103

102

204

127

104

0

153

38

105

76

153

95

106

0

127

31

107

63

127

79

108

0

76

19

109

38

76

47

110

0

255

127

111

127

255

191

112

0

204

102

113

102

204

153

114

0

153

76

115

76

153

114

116

0

127

63

117

63

127

95

118

0

76

38

119

38

76

57

120

0

255

191

121

127

255

223

122

0

204

153

123

102

204

178

124

0

153

114

125

76

153

133

126

0

127

95

127

63

127

111

128

0

76

57

129

38

76

66

130

0

255

255

131

127

255

255

132

0

204

204

133

102

204

204

134

0

153

153

135

76

153

153

136

0

127

127

137

63

127

127

138

0

76

76

139

38

76

76

140

0

191

255

141

127

223

255

142

0

153

204

143

102

178

204

144

0

114

153

145

76

133

153

146

0

95

127

147

63

111

127

148

0

57

76

149

38

66

76

150

0

127

255

151

127

191

255

152

0

102

204

153

102

153

204

154

0

76

153

155

76

114

153

156

0

63

127

157

63

95

127

158

0

38

76

159

38

57

76

160

0

63

255

161

127

159

255

162

0

51

204

163

102

127

204

164

0

38

153

165

76

95

153

166

0

31

127

167

63

79

127

168

0

19

76

169

38

47

76

170

0

0

255

171

127

127

255

172

0

0

204

173

102

102

204

174

0

0

153

175

76

76

153

176

0

0

127

177

63

63

127

178

0

0

76

179

38

38

76

180

63

0

255

181

159

127

255

182

51

0

204

183

127

102

204

184

38

0

153

185

95

76

153

186

31

0

127

187

79

63

127

188

19

0

76

189

47

38

76

190

127

0

255

191

191

127

255

192

102

0

204

193

153

102

204

194

76

0

153

195

114

76

153

196

63

0

127

197

95

63

127

198

38

0

76

199

57

38

76

200

191

0

255

201

223

127

255

202

153

0

204

203

178

102

204

204

114

0

153

205

133

76

153

206

95

0

127

207

111

63

127

208

57

0

76

209

66

38

76

210

255

0

255

211

255

127

255

212

204

0

204

213

204

102

204

214

153

0

153

215

153

76

153

216

127

0

127

217

127

63

127

218

76

0

76

219

76

38

76

220

255

0

191

221

255

127

223

222

204

0

153

223

204

102

178

224

153

0

114

225

153

76

133

226

127

0

95

227

127

63

111

228

76

0

57

229

76

38

66

230

255

0

127

231

255

127

191

232

204

0

102

233

204

102

153

234

153

0

76

235

153

76

114

236

127

0

63

237

127

63

95

238

76

0

38

239

76

38

57

240

255

0

63

241

255

127

159

242

204

0

51

243

204

102

127

244

153

0

38

245

153

76

95

246

127

0

31

247

127

63

79

248

76

0

19

249

76

38

47

250

51

51

51

251

91

91

91

252

132

132

132

253

173

173

173

254

214

214

214

255

255

255

255

255

255

255

255