/*******************************************************************************
* Copyright 2010 Simon Mieth
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
/*
* Created on 04.11.2008
*
*/
package org.kabeja.dxf.generator.section;
import org.kabeja.DraftDocument;
import org.kabeja.common.Block;
import org.kabeja.common.DraftEntity;
import org.kabeja.dxf.generator.DXFEntityGenerator;
import org.kabeja.dxf.generator.DXFGenerationContext;
import org.kabeja.dxf.generator.DXFOutput;
import org.kabeja.dxf.generator.DXFSectionGenerator;
import org.kabeja.dxf.generator.conf.DXFProfile;
import org.kabeja.dxf.generator.conf.DXFSubType;
import org.kabeja.dxf.generator.conf.DXFType;
import org.kabeja.io.GenerationException;
import org.kabeja.util.Constants;
public class DXFBlocksSectionGenerator implements DXFSectionGenerator {
public String getSectionName() {
return Constants.SECTION_BLOCKS;
}
public void generate(DXFOutput output, DraftDocument doc, DXFGenerationContext dxfContext, DXFProfile profile) throws GenerationException {
for (Block block : doc.getBlocks()) {
DXFType type = profile.getDXFType(Constants.SECTION_BLOCKS);
for (DXFSubType subType : type.getDXFSubTypes()) {
// handle subType BLOCK_ENTRY self
if (subType.getName().equals("AcDbBlockEntry")) {
this.outputBlockEntry(subType.getGroupCodes(), block, output, dxfContext);
} else if (subType.getName().equals("AcDbBlockEntryEnd")) {
for (DraftEntity entity : block.getEntities()) {
if (dxfContext.getDXFGeneratorManager().hasDXFEntityGenerator(entity.getType().getHandle())) {
DXFEntityGenerator entityGenerator = dxfContext.getDXFGeneratorManager().getDXFEntityGenerator(entity.getType().getHandle());
if(profile.hasDXFType(entity.getType().getHandle())){
entityGenerator.generate(output, entity, dxfContext, profile.getDXFType(entity.getType().getHandle()));
}
}
}
this.outputBlocksEndEntry(subType.getGroupCodes(), block, output, dxfContext);
}
}
}
}
protected void outputBlockEntry(int[] groupCodes, Block block, DXFOutput output, DXFGenerationContext context) throws GenerationException {
for (int i = 0; i < groupCodes.length; i++) {
switch (groupCodes[i]) {
case 0:
output.output(0, Constants.BLOCK_ENTRY);
break;
case 8:
output.output(8, block.getLayer().getName());
break;
case 2:
output.output(2, block.getName());
break;
case 70:
output.output(70, block.getFlags());
break;
case 10:
output.output(10, block.getReferencePoint().getX());
break;
case 20:
output.output(20, block.getReferencePoint().getY());
break;
case 30:
output.output(30, block.getReferencePoint().getZ());
break;
case 3:
output.output(3, block.getName());
break;
case 4:
output.output(4, block.getDescription());
break;
}
}
}
protected void outputBlocksEndEntry(int[] groupCodes, Block block, DXFOutput output, DXFGenerationContext context) throws GenerationException {
for (int i = 0; i < groupCodes.length; i++) {
switch (groupCodes[i]) {
case 0:
output.output(0, Constants.BLOCK_ENTRY_END);
break;
case 8:
output.output(8, block.getLayer().getName());
break;
}
}
}
}