autocad-dxf
Version:
A module which can be used to parse AutoCAD dxf files and to make programmatic and geometric operations on the AutoCAD drawing entities.
1,167 lines (1,148 loc) • 97.4 kB
JavaScript
const Distance = require("./Distance");
const Length = require("./Length");
const Intersection = require("./Intersection");
const Closest = require("./Closest");
const Triangulate = require("./Triangulate");
const BSpline = require("./BSpline");
const Area = require("./Area");
const Connected = require("./Connected");
const Crossing = require("./Crossing");
const Tangent = require("./Tangent");
const Checkif = require("./Checkif");
const ErrorMessages = require("./ErrorMessages.json");
const DIMSTYLE_CODES = require("./DIMSTYLE_CODES.json");
const KEYS = require("./KEYS");
const CODES = require("./CODES");
const Entities = class {
constructor(data, tolerance) {
this.entities = [];
this.tables = {};
this.blocks = [];
this.tolerance = isNaN(tolerance) ? 0.0001 : tolerance;
this.KEYS = KEYS;
this.CODES = CODES;
if (data && typeof data == "string") {
this.processData(data.split("\n"));
}
}
getDimStyleParams = (code, value, key) => {
let actualValue;
if (code == "148" || code == "171" || code == "179") {
actualValue = value;
} else if (code == "371" || code == "372") {
if (value == "-3") {
actualValue = "Standard";
} else if (value == "-2") {
actualValue = "ByLayer";
} else if (value == "-1") {
actualValue = "ByBlock";
} else {
actualValue = `${(parseFloat(value)/100)}mm`;
}
} else if (code == "280" || code == "77" || code == "275" || code == "270" || code == "277" || code == "279" || code == "283" || code == "289") {
actualValue = DIMSTYLE_CODES[key][value];
} else if (code == "75" || code == "76" || code == "281" || code == "282") {
actualValue = value == "1" ? "Suppressed" : "Not suppressed";
} else {
let temp = parseFloat(value);
if (isNaN(temp)) temp = value;
if (DIMSTYLE_CODES.booleans.indexOf(code) != -1) {
temp = (temp == 1) ? "On" : "Off";
}
actualValue = temp;
}
return actualValue;
}
getTables = (array, COUNT) => {
let ttype, json;
while (COUNT < array.length - 1) {
const code = array[COUNT].trim();
const value = array[COUNT + 1].trim();
if (code == "0" && value == "TABLE") {
ttype = array[COUNT + 3].trim();
this.tables[ttype] = [];
} else if (code == "0" && value == "ENDSEC") {
return COUNT + 2;
}
if (ttype == "APPID") {
if (code == "100" && value == "AcDbRegAppTableRecord") {
if (json) this.tables.APPID.push(json);
json = {};
} else if (json && code == "0" && value == "ENDTAB") {
this.tables.APPID.push(json);
json = null;
} else if (json && code == "2") {
json.name = value;
}
} else if (ttype == "BLOCK_RECORD") {
if (code == "100" && value == "AcDbBlockTableRecord") {
if (json) this.tables.BLOCK_RECORD.push(json);
json = {};
} else if (json && code == "0" && value == "ENDTAB") {
if (json) this.tables.BLOCK_RECORD.push(json);
json = null;
} else if (json && code == "2") {
json.name = value;
}
} else if (ttype == "DIMSTYLE") {
if (code == "100" && value == "AcDbDimStyleTableRecord") {
if (json) this.tables.DIMSTYLE.push(json);
json = {};
} else if (json && code == "0" && value == "ENDTAB") {
this.tables.DIMSTYLE.push(json);
json = null;
} else if (json && code == "2") {
json.name = value;
} else if (json && DIMSTYLE_CODES[code]) {
if (code == "78" || code == "286") {
if (value == "0") {
json.suppress_zero_inches = "No";
json.suppress_zero_feet = "Yes";
} else if (value == "1") {
json.suppress_zero_inches = "No";
json.suppress_zero_feet = "No";
} else if (value == "2") {
json.suppress_zero_inches = "Yes";
json.suppress_zero_feet = "No";
} else if (value == "3") {
json.suppress_zero_inches = "No";
json.suppress_zero_feet = "Yes";
}
} else if (code == "284") {
if (value == "0") {
json.alt_suppress_leading_zeros = "No";
json.alt_suppress_trailing_zeros = "No";
} else if (value == "1") {
json.alt_suppress_leading_zeros = "Yes";
json.alt_suppress_trailing_zeros = "No";
} else if (value == "2") {
json.alt_suppress_leading_zeros = "No";
json.alt_suppress_trailing_zeros = "Yes";
} else if (value == "3") {
json.alt_suppress_leading_zeros = "Yes";
json.alt_suppress_trailing_zeros = "Yes";
}
} else if (code == "79" || code == "285") {
if (value == "0") {
json.suppress_leading_zeros = "No";
json.suppress_trailing_zeros = "No";
} else if (value == "1") {
json.suppress_leading_zeros = "Yes";
json.suppress_trailing_zeros = "No";
} else if (value == "2") {
json.suppress_leading_zeros = "No";
json.suppress_trailing_zeros = "Yes";
} else if (value == "3") {
json.suppress_leading_zeros = "Yes";
json.suppress_trailing_zeros = "Yes";
}
} else {
const key = DIMSTYLE_CODES[code]
const actualValue = this.getDimStyleParams(code, value, key);
json[key] = actualValue;
}
}
} else if (ttype == "LAYER") {
if (code == "100" && value == "AcDbLayerTableRecord") {
if (json) this.tables.LAYER.push(json);
json = {};
} else if (json && code == "0" && value == "ENDTAB") {
this.tables.LAYER.push(json);
json = null;
} else if (json && code == "2") {
json.name = value;
} else if (json && code == "70") {
if (value == "0") {
json.status = "Thawed";
} else if (value == "1") {
json.status = "Frozen";
} else if (value == "2") {
json.status = "Frozen by default";
} else if (value == "4") {
json.status = "Locked";
}
} else if (json && code == "62") {
json.color_number = value;
} else if (json && code == "6") {
json.line_type = value;
}
} else if (ttype == "LTYPE") {
if (code == "100" && value == "AcDbLinetypeTableRecord") {
if (json) this.tables.LTYPE.push(json);
json = {};
} else if (json && code == "0" && value == "ENDTAB") {
this.tables.LTYPE.push(json);
json = null;
} else if (json && code == "2") {
json.name = value;
} else if (json && code == "3") {
json.description = value;
} else if (json && code == "9") {
if (!json.embedded_texts) json.embedded_texts = [];
json.embedded_texts.push(value);
} else if (json && code == "40") {
json.total_pattern_length = parseInt(value);
} else if (json && code == "44") {
if (!json.x_offsets) json.x_offsets = [];
json.x_offsets.push(parseFloat(value));
} else if (json && code == "45") {
if (!json.y_offsets) json.y_offsets = [];
json.y_offsets.push(parseFloat(value));
} else if (json && code == "46") {
if (!json.scale_value) json.scale_value = [];
json.scale_value.push(parseFloat(value));
} else if (json && code == "49") {
if (!json.pattern_lengths) json.pattern_lengths = [];
json.pattern_lengths.push(parseFloat(value));
} else if (json && code == "50") {
if (!json.embedded_element_rotations) json.embedded_element_rotations = [];
json.embedded_element_rotations.push(parseFloat(value));
} else if (json && code == "73") {
json.number_of_elements = parseInt(value);
} else if (json && code == "74") {
if (value == "0") {
json.embedded_element_type = "None";
} else if (value == "1") {
json.embedded_element_rotation_type = "Absolute";
} else if (value == "2") {
json.embedded_element_type = "Text";
} else if (value == "4") {
json.embedded_element_type = "Shape";
}
}
} else if (ttype == "STYLE") {
if (code == "100" && value == "AcDbTextStyleTableRecord") {
if (json) this.tables.STYLE.push(json);
json = {text_height: 0};
} else if (json && code == "0" && value == "ENDTAB") {
this.tables.STYLE.push(json);
json = null;
} else if (json && code == "2") {
json.name = value;
} else if (json && code == "40") {
json.text_height = parseFloat(value);
} else if (json && code == "41") {
json.width_factor = parseFloat(value);
} else if (json && code == "50") {
json.oblique_angle = parseFloat(value);
} else if (json && code == "70") {
if (value == "1") {
json.type = "Shape";
} else if (value == "4") {
json.type = "Vertical text";
}
} else if (json && code == "71") {
if (value == "2") {
json.text_type = "Backward (mirrored in X)";
} else if (value == "4") {
json.text_type = "Upside down (mirrored in Y)";
}
} else if (json && code == "1071") {
json.font_type = value;
}
} else if (ttype == "UCS") {
if (code == "100" && value == "AcDbUCSTableRecord") {
if (json) this.tables.UCS.push(json);
json = {};
} else if (json && code == "0" && value == "ENDTAB") {
this.tables.UCS.push(json);
json = null;
} else if (json && code == "2") {
json.name = value;
} else if (json && code == "10") {
json.origin = {x : parseFloat(value)};
} else if (json && code == "11") {
json.x_axis_direction = {x : parseFloat(value)};
} else if (json && code == "12") {
json.y_axis_direction = {x: parseFloat(value)};
} else if (json && code == "13") {
json.orthographic_origin = {x: parseFloat(value)};
} else if (json && code == "20") {
json.origin.y = parseFloat(value);
} else if (json && code == "21") {
json.x_axis_direction.y = parseFloat(value);
} else if (json && code == "22") {
json.y_axis_direction.y = parseFloat(value);
} else if (json && code == "23") {
json.orthographic_origin.y = parseFloat(value);
} else if (json && code == "30") {
json.origin.z = parseFloat(value);
} else if (json && code == "31") {
json.x_axis_direction.z = parseFloat(value);
} else if (json && code == "32") {
json.y_axis_direction.z = parseFloat(value);
} else if (json && code == "33") {
json.orthographic_origin.z = parseFloat(value);
} else if (json && code == "71") {
if (value == "1") {
json.orthographic_type = "Top";
} else if (value == "2") {
json.orthographic_type = "Bottom";
} else if (value == "3") {
json.orthographic_type = "Front";
} else if (value == "4") {
json.orthographic_type = "Back";
} else if (value == "5") {
json.orthographic_type = "Left";
} else if (value == "6") {
json.orthographic_type = "Right";
}
} else if (json && code == "146") {
json.elevation = parseFloat(value);
}
} else if (ttype == "VIEW") {
if (code == "100" && value == "AcDbViewTableRecord") {
if (json) this.tables.VIEW.push(json);
json = {hasUCS: false};
} else if (json && code == "0" && value == "ENDTAB") {
this.tables.VIEW.push(json);
json = null;
} else if (json && code == "2") {
json.name = value;
} else if (json && code == "10") {
json.center = {x : parseFloat(value)};
} else if (json && code == "11") {
json.direction = {x : parseFloat(value)};
} else if (json && code == "12") {
json.target_point = {x: parseFloat(value)};
} else if (json && code == "20") {
json.center.y = parseFloat(value);
} else if (json && code == "21") {
json.direction.y = parseFloat(value);
} else if (json && code == "22") {
json.target_point.y = parseFloat(value);
} else if (json && code == "31") {
json.direction.z = parseFloat(value);
} else if (json && code == "32") {
json.target_point.z = parseFloat(value);
} else if (json && code == "40") {
json.height = parseFloat(value);
} else if (json && code == "41") {
json.width = parseFloat(value);
} else if (json && code == "42") {
json.lens_angle = parseFloat(value);
} else if (json && code == "50") {
json.twist_angle = parseFloat(value);
} else if (json && code == "70") {
if (value == "1") {
json.type = "Paper space view";
}
} else if (json && code == "72") {
if (value == "1") {
json.hasUCS = true;
}
} else if (json && code == "79") {
if (value == "0") {
json.orthographic_type = "N/A";
} else if (value == "1") {
json.orthographic_type = "Top";
} else if (value == "2") {
json.orthographic_type = "Bottom";
} else if (value == "3") {
json.orthographic_type = "Front";
} else if (value == "4") {
json.orthographic_type = "Back";
} else if (value == "5") {
json.orthographic_type = "Left";
} else if (value == "6") {
json.orthographic_type = "Right";
}
} else if (json && code == "110") {
json.origin = {x: parseFloat(value)};
} else if (json && code == "111") {
json.ucs_x = {x: parseFloat(value)};
} else if (json && code == "112") {
json.ucs_y = {x: parseFloat(value)};
} else if (json && code == "120") {
json.origin.y = parseFloat(value);
} else if (json && code == "121") {
json.ucs_x.y = parseFloat(value);
} else if (json && code == "122") {
json.ucs_y.y = parseFloat(value);
} else if (json && code == "130") {
json.origin.z = parseFloat(value);
} else if (json && code == "131") {
json.ucs_x.z = parseFloat(value);
} else if (json && code == "132") {
json.ucs_y.z = parseFloat(value);
} else if (json && code == "146") {
json.elevation = parseFloat(value);
}
} else if (ttype == "VPORT") {
if (code == "100" && value == "AcDbViewportTableRecord") {
if (json) this.tables.VPORT.push(json);
json = {};
} else if (json && code == "0" && value == "ENDTAB") {
this.tables.VPORT.push(json);
json = null;
} else if (json && code == "2") {
json.name = value;
} else if (json && code == "10") {
json.lower_left_corner = {x : parseFloat(value)};
} else if (json && code == "11") {
json.upper_right_corner = {x : parseFloat(value)};
} else if (json && code == "12") {
json.center = {x: parseFloat(value)};
} else if (json && code == "13") {
json.snap_base_point = {x: parseFloat(value)};
} else if (json && code == "14") {
json.snap_spacing = {x: parseFloat(value)};
} else if (json && code == "15") {
json.grid_spacing = {x: parseFloat(value)};
} else if (json && code == "16") {
json.view_direction = {x: parseFloat(value)};
} else if (json && code == "17") {
json.target_point = {x: parseFloat(value)};
} else if (json && code == "20") {
json.lower_left_corner.y = parseFloat(value);
} else if (json && code == "21") {
json.upper_right_corner.y = parseFloat(value);
} else if (json && code == "22") {
json.center.y = parseFloat(value);
} else if (json && code == "23") {
json.snap_base_point.y = parseFloat(value);
} else if (json && code == "24") {
json.snap_spacing.y = parseFloat(value);
} else if (json && code == "25") {
json.grid_spacing.y = parseFloat(value);
} else if (json && code == "26") {
json.view_direction.y = parseFloat(value);
} else if (json && code == "27") {
json.target_point.y = parseFloat(value);
} else if (json && code == "36") {
json.view_direction.z = parseFloat(value);
} else if (json && code == "37") {
json.target_point.z = parseFloat(value);
} else if (json && code == "45") {
json.height = parseFloat(value);
} else if (json && code == "42") {
json.lens_length = parseFloat(value);
} else if (json && code == "50") {
json.snap_rotation_angle = parseFloat(value);
} else if (json && code == "51") {
json.twist_angle = parseFloat(value);
} else if (json && code == "72") {
json.circle_sides = value;
} else if (json && code == "79") {
if (value == "0") {
json.orthographic_type = "N/A";
} else if (value == "1") {
json.orthographic_type = "Top";
} else if (value == "2") {
json.orthographic_type = "Bottom";
} else if (value == "3") {
json.orthographic_type = "Front";
} else if (value == "4") {
json.orthographic_type = "Back";
} else if (value == "5") {
json.orthographic_type = "Left";
} else if (value == "6") {
json.orthographic_type = "Right";
}
} else if (json && code == "110") {
json.origin = {x: parseFloat(value)};
} else if (json && code == "111") {
json.ucs_x = {x: parseFloat(value)};
} else if (json && code == "112") {
json.ucs_y = {x: parseFloat(value)};
} else if (json && code == "120") {
json.origin.y = parseFloat(value);
} else if (json && code == "121") {
json.ucs_x.y = parseFloat(value);
} else if (json && code == "122") {
json.ucs_y.y = parseFloat(value);
} else if (json && code == "130") {
json.origin.z = parseFloat(value);
} else if (json && code == "131") {
json.ucs_x.z = parseFloat(value);
} else if (json && code == "132") {
json.ucs_y.z = parseFloat(value);
} else if (json && code == "146") {
json.elevation = parseFloat(value);
}
}
COUNT = COUNT + 2;
}
}
getBlocks = (array, COUNT) => {
let json, json2, blockBegan = false, entityStarted = false;
while (COUNT < array.length - 1) {
const code = array[COUNT].trim();
const value = array[COUNT + 1].trim();
if (code == "0" && value == "BLOCK") {
json = {};
} else if (code == "0" && value == "ENDSEC") {
this.blocks.push(json);
return COUNT + 2;
} else if (code == "0" && value == "ENDBLK") {
if (json.entities && json2) json.entities.push(json2);
this.blocks.push(json);
blockBegan = false;
} else if (code == "100" && value == "AcDbBlockBegin") {
blockBegan = true;
entityStarted = false;
}
if (blockBegan && code == "0") {
if (!json.entities) json.entities = [];
json2 = {etype: value};
entityStarted = true;
} else if (blockBegan && json.entities && code == "330") {
json.entities.push(json2);
} else if (blockBegan && code == "2") {
json.name = value;
} else if (blockBegan && code == "4") {
json.description = value;
} else if (!blockBegan && code == "8") {
json.layer = value;
} else if (!entityStarted && code == "10") {
json.base_point = { x : parseFloat(value) };
} else if (!entityStarted && code == "20") {
json.base_point.y = parseFloat(value);
} else if (!entityStarted && code == "30") {
json.base_point.z = parseFloat(value);
} else if (blockBegan && json2) {
this.insertEntity(code, value, json2);
}
COUNT = COUNT + 2;
}
}
getEntities = (array, COUNT) => {
let json, json2;
while (COUNT < array.length - 1) {
const code = array[COUNT].trim();
const value = array[COUNT + 1].trim();
if (code == "0" && value == "ENDSEC" && json.etype != "SEQEND") {
if (json.subclass == "AcDbDimension" && (json.specific_type == 'AcDbRotatedDimension' || json.specific_type == 'AcDbAlignedDimension')) {
this.getDimLineCoordinates(json);
}
this.entities.push(json);
return COUNT + 2;
}
if (value == "DSTYLE") {
let ds_code = code, ds_value = value;
while (ds_value != "}" && ds_code != "0") {
COUNT = COUNT + 2;
ds_code = array[COUNT].trim();
ds_value = array[COUNT + 1].trim();
if (DIMSTYLE_CODES[ds_value] !== undefined) {
const temp = array[COUNT + 3].trim();
const key = DIMSTYLE_CODES[ds_value];
const actualValue = this.getDimStyleParams(ds_value, temp, key);
json[key] = actualValue;
COUNT = COUNT + 2;
}
}
}
if (code == "0" && (!json || (json.subclass && json.subclass != "AcDb3dPolyline" && json.etype != "SEQEND"))) {
if (json) {
if (json.subclass == "AcDbDimension" && (json.specific_type == 'AcDbRotatedDimension' || json.specific_type == 'AcDbAlignedDimension')) {
this.getDimLineCoordinates(json);
}
this.entities.push(json);
}
json = {};
this.insertEntity(code, value, json);
} else if (code == "0" && json && json.subclass == "AcDb3dPolyline" && value == "SEQEND") {
if (json2 && json.vertices) json.vertices.push(json2);
if (json) this.entities.push(json);
json = {};
json2 = undefined;
while (array[COUNT + 2].trim() != "0") {
COUNT = COUNT + 2;
}
} else if (code == "0" && json && json.subclass == "AcDb3dPolyline") {
if (!json.vertices) json.vertices = [];
if (json2) json.vertices.push(json2);
json2 = {};
this.insertEntity(code, value, json2);
} else if (json2) {
this.insertEntity(code, value, json2);
} else {
this.insertEntity(code, value, json);
}
COUNT = COUNT + 2;
}
}
insertEntity = (code, value, json) => {
if (json && !json.etype && code == "0") {
json.etype = value;
json.line_type = "ByLayer";
json.color = "ByLayer";
} else if (code == "1") {
if (json.subclass == "AcDbText" || json.subclass == "AcDbMText") {
const regex = /(\\P|\\L|\{|\}|\\*\\*a\d+;|\\H\d+\.?\d*x;|\+\/\-|%%u|\\Fromanc\||\\f.*p\d+;|t\d+;|c\d+;|\\fFutura Md BT\||\\Fsimplex\||\\fitalic.*c.*\d+;|scale.*\d+:\d+)/gim;
json.text = value.replace(regex, "");
json.style = "STANDARD";
json.rotation = 0;
} else if (json.subclass == "AcDbDimension") {
const regex = /(\\P|\\L|\{|\}|\\*\\*a\d+;|\\H\d+\.?\d*x;|\+\/\-|%%u|\\Fromanc\||\\f.*p\d+;|t\d+;|c\d+;|\\fFutura Md BT\||\\Fsimplex\||\\fitalic.*c.*\d+;|scale.*\d+:\d+)/gim;
json.text_override = value.replace(regex, "");
} else if (json.subclass == "AcDbModelerGeometry") {
if (!json.proprietary_data) json.proprietary_data = [];
json.proprietary_data.push(value);
} else if (json.subclass == "AcDbFcf") {
json.visual_representation = value;
}
} else if (code == "2") {
if (json.subclass == "AcDbShape" || json.subclass == "AcDbMline" || json.subclass == "AcDbHatch") {
json.style_name = value;
} else if (json.subclass == "AcDbBlockReference") {
json.block_name = value;
}
} else if (code == "3") {
if (json.subclass == "AcDbDimension" || json.subclass == "AcDbLeader" || json.subclass == "AcDbFcf") {
json.dimension_style = value;
} else if (json.subclass == "AcDbModelerGeometry") {
const temp = json.proprietary_data[json.proprietary_data.length - 1];
json.proprietary_data[json.proprietary_data.length - 1] = temp + value;
}
} else if (code == "6") {
json.line_type = value;
} else if (code == "7") {
if (json.subclass == "AcDbMText") {
json.style = value;
} if (json.etype == "ACAD_TABLE" && json.subclass == "AcDbBlockReference") {
if (json.cells && json.cells[json.cells.length - 1]) {
json.cells[json.cells.length - 1].text_style = value;
} else {
json.text_style = value;
}
}
} else if (code == "8") {
json.layer = value;
} else if (code == "10") {
if (json.subclass == "AcDbLine" || json.subclass == "AcDbRay" || json.subclass == "AcDbMline") {
json.start_x = parseFloat(value);
} else if (json.subclass == "AcDbPolyline" || json.subclass == "AcDbLeader") {
if (!json.vertices) json.vertices = [];
json.vertices.push({x: parseFloat(value)});
} else if (json.subclass == "AcDbSpline") {
if (!json.control_points) json.control_points = [];
json.control_points.push({x: parseFloat(value)});
} else if (json.subclass == "AcDbTrace" || json.subclass == "AcDbFace") {
if (!json.corners) json.corners = [];
json.corners.push({x: parseFloat(value)});
} else if (json.subclass == "AcDbHatch") {
if (!json.seed_points) json.seed_points = [];
json.seed_points.push({x: parseFloat(value)});
} else if (json.subclass == "AcDbHelix") {
if (!json.axis_base_point) json.axis_base_point = [];
json.axis_base_point.push({x: parseFloat(value)});
} else if (json.subclass == "AcDbRasterImage") {
if (!json.insertion_point) json.insertion_point = [];
json.insertion_point.push({x: parseFloat(value)});
} else if (json.subclass == "AcDbXline") {
if (!json.first_point) json.first_point = {};
json.first_point.x = parseFloat(value);
} else if (json.subclass == "AcDbFcf") {
if (!json.insertion_point) json.insertion_point = {};
json.insertion_point.x = parseFloat(value);
} else {
json.x = parseFloat(value);
}
} else if (code == "11") {
if (json.subclass == "AcDbLine") {
json.end_x = parseFloat(value);
} else if (json.subclass == "AcDbSpline") {
if (!json.fit_points) json.fit_points = [];
json.fit_points.push({x: parseFloat(value)});
} else if (json.subclass == "AcDbEllipse") {
json.major_end_dx = parseFloat(value);
} else if (json.subclass == "AcDbDimension") {
json.x_text = parseFloat(value);
} else if (json.subclass == "AcDbTrace" || json.subclass == "AcDbFace") {
if (!json.corners) json.corners = [];
json.corners.push({x: parseFloat(value)});
} else if (json.subclass == "AcDbRay") {
json.unit_direction_x = parseFloat(value);
} else if (json.subclass == "AcDbHelix") {
if (!json.start_point) json.start_point = [];
json.start_point.push({x: parseFloat(value)});
} else if (json.subclass == "AcDbMline") {
if (!json.vertices) json.vertices = [];
json.vertices.push({x: parseFloat(value)});
} else if (json.subclass == "AcDbXline") {
if (!json.unit_direction_vector) json.unit_direction_vector = {};
json.unit_direction_vector.x = parseFloat(value);
} else if (json.subclass == "AcDbRasterImage") {
if (!json.u_vector) json.u_vector = [];
json.u_vector.push({x: parseFloat(value)});
} else if (json.subclass == "AcDbModelerGeometry" && json.specific_type == "AcDbRevolvedSurface") {
if (!json.axis_vector) json.axis_vector = [];
json.axis_vector.push({x: parseFloat(value)});
} else if (json.subclass == "AcDbModelerGeometry" && (json.specific_type == "AcDbExtrudedSurface" || json.specific_type == "AcDbSweptSurface")) {
if (!json.ref_vector) json.ref_vector = [];
json.ref_vector.push({x: parseFloat(value)});
} else if (json.subclass == "AcDbBlockReference" && json.specific_type == "AcDbTable") {
json.direction_vector = {x: parseFloat(value)};
} else if (json.subclass == "AcDbFcf") {
if (!json.x_axis_direction) json.x_axis_direction = {};
json.x_axis_direction.x = parseFloat(value);
}
} else if (code == "12") {
if (json.subclass == "AcDbTrace" || json.subclass == "AcDbFace") {
if (!json.corners) json.corners = [];
json.corners.push({x: parseFloat(value)});
} else if (json.subclass == "AcDbMline") {
if (json.vertices && json.vertices.length > 0) {
for (let i = 0; i < json.vertices.length; i++) {
if (json.vertices[i].segment_dir_vector_x !== undefined) continue;
json.vertices[i].segment_dir_vector_x = parseFloat(value);
break;
}
}
} else if (json.subclass == "AcDbHelix") {
if (!json.axis_vector) json.axis_vector = [];
json.axis_vector.push({x: parseFloat(value)});
} else if (json.subclass == "AcDbRasterImage") {
if (!json.v_vector) json.v_vector = [];
json.v_vector.push({x: parseFloat(value)});
} else if (json.subclass == "AcDbSpline") {
if (!json.start_tangent) json.start_tangent = {};
json.start_tangent.x = parseFloat(value);
}
} else if (code == "13") {
if (json.specific_type == "AcDbAlignedDimension" || json.specific_type == "AcDb3PointAngularDimension" || json.specific_type == "AcDb2LineAngularDimension") {
json.ext_line1_x = parseFloat(value);
} else if (json.specific_type == "AcDbOrdinateDimension") {
json.location_x = parseFloat(value);
} else if (json.subclass == "AcDbTrace" || json.subclass == "AcDbFace") {
if (!json.corners) json.corners = [];
json.corners.push({x: parseFloat(value)});
} else if (json.subclass == "AcDbMline") {
if (json.vertices && json.vertices.length > 0) {
for (let i = 0; i < json.vertices.length; i++) {
if (json.vertices[i].miter_dir_vector_x !== undefined) continue;
json.vertices[i].miter_dir_vector_x = parseFloat(value);
break;
}
}
} else if (json.subclass == "AcDbRasterImage") {
json.u_value = parseFloat(value);
} else if (json.subclass == "AcDbSpline") {
if (!json.end_tangent) json.end_tangent = {};
json.end_tangent.x = parseFloat(value);
}
} else if (code == "14") {
if (json.specific_type == "AcDbAlignedDimension" || json.specific_type == "AcDb3PointAngularDimension" || json.specific_type == "AcDb2LineAngularDimension") {
json.ext_line2_x = parseFloat(value);
} else if (json.specific_type == "AcDbOrdinateDimension") {
json.leader_end_x = parseFloat(value);
} else if (json.subclass == "AcDbRasterImage") {
if (!json.clip_vertex) json.clip_vertex = [];
json.clip_vertex.push({x: parseFloat(value)});
}
} else if (code == "15") {
if (json.specific_type == "AcDb3PointAngularDimension") {
json.vertex_x = parseFloat(value);
} else if (json.specific_type == "AcDbRadialDimension" || json.specific_type == "AcDbDiametricDimension" || json.specific_type == "AcDb2LineAngularDimension") {
json.dim_first_point_x = parseFloat(value);
}
} else if (code == "16") {
if (json.specific_type == "AcDb3PointAngularDimension") {
json.arc_dim_line_x = parseFloat(value);
}
} else if (code == "20") {
if (json.subclass == "AcDbLine" || json.subclass == "AcDbRay" || json.subclass == "AcDbMline") {
json.start_y = parseFloat(value);
} else if (json.subclass == "AcDbPolyline" || json.subclass == "AcDbLeader") {
json.vertices[json.vertices.length - 1]["y"] = parseFloat(value);
} else if (json.subclass == "AcDbSpline") {
json.control_points[json.control_points.length - 1]["y"] = parseFloat(value);
} else if (json.subclass == "AcDbTrace" || json.subclass == "AcDbFace") {
if (json.corners && json.corners[0]) {
json.corners[0]["y"] = parseFloat(value);
}
} else if (json.subclass == "AcDbHatch") {
json.seed_points[json.seed_points.length - 1]["y"] = parseFloat(value);
} else if (json.subclass == "AcDbHelix") {
json.axis_base_point[json.axis_base_point.length - 1]["y"] = parseFloat(value);
} else if (json.subclass == "AcDbRasterImage") {
json.insertion_point[json.insertion_point.length - 1]["y"] = parseFloat(value);
} else if (json.subclass == "AcDbXline") {
json.first_point.y = parseFloat(value);
} else if (json.subclass == "AcDbFcf") {
json.insertion_point.y = parseFloat(value);
} else {
json.y = parseFloat(value);
}
} else if (code == "21") {
if (json.subclass == "AcDbLine") {
json.end_y = parseFloat(value);
} else if (json.subclass == "AcDbSpline") {
json.fit_points[json.fit_points.length - 1]["y"] = parseFloat(value);
} else if (json.subclass == "AcDbEllipse") {
json.major_end_dy = parseFloat(value);
} else if (json.subclass == "AcDbDimension") {
json.y_text = parseFloat(value);
} else if (json.subclass == "AcDbTrace" || json.subclass == "AcDbFace") {
if (json.corners && json.corners[1]) {
json.corners[1]["y"] = parseFloat(value);
}
} else if (json.subclass == "AcDbRay") {
json.unit_direction_y = parseFloat(value);
} else if (json.subclass == "AcDbHelix") {
json.start_point[json.start_point.length - 1]["y"] = parseFloat(value);
} else if (json.subclass == "AcDbMline") {
if (json.vertices && json.vertices.length > 0) {
json.vertices[json.vertices.length - 1]["y"] = parseFloat(value);
}
} else if (json.subclass == "AcDbXline") {
json.unit_direction_vector.y = parseFloat(value);
} else if (json.subclass == "AcDbRasterImage") {
json.u_vector[json.u_vector.length - 1]["y"] = parseFloat(value);
} else if (json.subclass == "AcDbModelerGeometry" && json.specific_type == "AcDbRevolvedSurface") {
json.axis_vector[json.axis_vector.length - 1]["y"] = parseFloat(value);
} else if (json.subclass == "AcDbModelerGeometry" && (json.specific_type == "AcDbExtrudedSurface" || json.specific_type == "AcDbSweptSurface")) {
json.ref_vector[json.ref_vector.length - 1]["y"] = parseFloat(value);
} else if (json.subclass == "AcDbBlockReference" && json.specific_type == "AcDbTable") {
json.direction_vector["y"] = parseFloat(value);
} else if (json.subclass == "AcDbFcf") {
json.x_axis_direction.y = parseFloat(value);
}
} else if (code == "22") {
if (json.subclass == "AcDbTrace" || json.subclass == "AcDbFace") {
if (json.corners && json.corners[2]) {
json.corners[2]["y"] = parseFloat(value);
}
} else if (json.subclass == "AcDbMline") {
if (json.vertices && json.vertices.length > 0) {
for (let i = 0; i < json.vertices.length; i++) {
if (json.vertices[i].segment_dir_vector_y !== undefined) continue;
json.vertices[i].segment_dir_vector_y = parseFloat(value);
break;
}
}
} else if (json.subclass == "AcDbHelix") {
json.axis_vector[json.axis_vector.length - 1]["y"] = parseFloat(value);
} else if (json.subclass == "AcDbRasterImage") {
json.v_vector[json.v_vector.length - 1]["y"] = parseFloat(value);
} else if (json.subclass == "AcDbSpline") {
if (!json.start_tangent) json.start_tangent = {};
json.start_tangent.y = parseFloat(value);
}
} else if (code == "23") {
if (json.specific_type == "AcDbAlignedDimension" || json.specific_type == "AcDb3PointAngularDimension" || json.specific_type == "AcDb2LineAngularDimension") {
json.ext_line1_y = parseFloat(value);
} else if (json.specific_type == "AcDbOrdinateDimension") {
json.location_y = parseFloat(value);
} else if (json.subclass == "AcDbTrace" || json.subclass == "AcDbFace") {
if (json.corners && json.corners[3]) {
json.corners[3]["y"] = parseFloat(value);
}
} else if (json.subclass == "AcDbMline") {
if (json.vertices && json.vertices.length > 0) {
for (let i = 0; i < json.vertices.length; i++) {
if (json.vertices[i].miter_dir_vector_y !== undefined) continue;
json.vertices[i].miter_dir_vector_y = parseFloat(value);
break;
}
}
} else if (json.subclass == "AcDbRasterImage") {
json.v_value = parseFloat(value);
} else if (json.subclass == "AcDbSpline") {
if (!json.end_tangent) json.end_tangent = {};
json.end_tangent.y = parseFloat(value);
}
} else if (code == "24") {
if (json.specific_type == "AcDbAlignedDimension" || json.specific_type == "AcDb3PointAngularDimension" || json.specific_type == "AcDb2LineAngularDimension") {
json.ext_line2_y = parseFloat(value);
} else if (json.specific_type == "AcDbOrdinateDimension") {
json.leader_end_y = parseFloat(value);
} else if (json.subclass == "AcDbRasterImage") {
json.clip_vertex[json.clip_vertex.length - 1]["y"] = parseFloat(value);
}
} else if (code == "25") {
if (json.specific_type == "AcDb3PointAngularDimension") {
json.vertex_y = parseFloat(value);
} else if (json.specific_type == "AcDbRadialDimension" || json.specific_type == "AcDbDiametricDimension" || json.specific_type == "AcDb2LineAngularDimension") {
json.dim_first_point_y = parseFloat(value);
}
} else if (code == "26") {
if (json.specific_type == "AcDb3PointAngularDimension") {
json.arc_dim_line_y = parseFloat(value);
}
} else if (code == "30") {
if (json.subclass == "AcDbLine" || json.subclass == "AcDbRay" || json.subclass == "AcDbMline") {
json.start_z = parseFloat(value);
} else if (json.subclass == "AcDbPolyline" || json.subclass == "AcDbLeader") {
json.vertices[json.vertices.length - 1]["z"] = parseFloat(value);
} else if (json.subclass == "AcDbSpline") {
json.control_points[json.control_points.length - 1]["z"] = parseFloat(value);
} else if (json.subclass == "AcDbTrace" || json.subclass == "AcDbFace") {
if (json.corners && json.corners[0]) {
json.corners[0]["z"] = parseFloat(value);
}
} else if (json.subclass == "AcDbHatch") {
json.seed_points[json.seed_points.length - 1]["z"] = parseFloat(value);
} else if (json.subclass == "AcDbHelix") {
json.axis_base_point[json.axis_base_point.length - 1]["z"] = parseFloat(value);
} else if (json.subclass == "AcDbRasterImage") {
json.insertion_point[json.insertion_point.length - 1]["z"] = parseFloat(value);
} else if (json.subclass == "AcDbXline") {
json.first_point.z = parseFloat(value);
} else if (json.subclass == "AcDbFcf") {
json.insertion_point.z = parseFloat(value);
} else {
json.z = parseFloat(value);
}
} else if (code == "31") {
if (json.subclass == "AcDbLine") {
json.end_z = parseFloat(value);
json.length = this.length(json);
} else if (json.subclass == "AcDbSpline") {
json.fit_points[json.fit_points.length - 1]["z"] = parseFloat(value);
} else if (json.subclass == "AcDbEllipse") {
json.major_end_dz = parseFloat(value);
} else if (json.subclass == "AcDbDimension") {
json.z_text = parseFloat(value);
} else if (json.subclass == "AcDbTrace" || json.subclass == "AcDbFace") {
if (json.corners && json.corners[1]) {
json.corners[1]["z"] = parseFloat(value);
}
} else if (json.subclass == "AcDbRay") {
json.unit_direction_z = parseFloat(value);
} else if (json.subclass == "AcDbHelix") {
json.start_point[json.start_point.length - 1]["z"] = parseFloat(value);
} else if (json.subclass == "AcDbMline") {
if (json.vertices && json.vertices.length > 0) {
json.vertices[json.vertices.length - 1]["z"] = parseFloat(value);
}
} else if (json.subclass == "AcDbXline") {
json.unit_direction_vector.z = parseFloat(value);
} else if (json.subclass == "AcDbRasterImage") {
json.u_vector[json.u_vector.length - 1]["z"] = parseFloat(value);
} else if (json.subclass == "AcDbModelerGeometry" && json.specific_type == "AcDbRevolvedSurface") {
json.axis_vector[json.axis_vector.length - 1]["z"] = parseFloat(value);
} else if (json.subclass == "AcDbModelerGeometry" && (json.specific_type == "AcDbExtrudedSurface" || json.specific_type == "AcDbSweptSurface")) {
json.ref_vector[json.ref_vector.length - 1]["z"] = parseFloat(value);
} else if (json.subclass == "AcDbBlockReference" && json.specific_type == "AcDbTable") {
json.direction_vector["z"] = parseFloat(value);
} else if (json.subclass == "AcDbFcf") {
json.x_axis_direction.z = parseFloat(value);
}
} else if (code == "32") {
if (json.subclass == "AcDbTrace" || json.subclass == "AcDbFace") {
if (json.corners && json.corners[2]) {
json.corners[2]["z"] = parseFloat(value);
}
} else if (json.subclass == "AcDbMline") {
if (json.vertices && json.vertices.length > 0) {
for (let i = 0; i < json.vertices.length; i++) {
if (json.vertices[i].segment_dir_vector_z !== undefined) continue;
json.vertices[i].segment_dir_vector_z = parseFloat(value);
break;
}
}
} else if (json.subclass == "AcDbHelix") {
json.axis_vector[json.axis_vector.length - 1]["z"] = parseFloat(value);
} else if (json.subclass == "AcDbRasterImage") {
json.v_vector[json.v_vector.length - 1]["z"] = parseFloat(value);
} else if (json.subclass == "AcDbSpline") {
if (!json.start_tangent) json.start_tangent = {};
json.start_tangent.z = parseFloat(value);
}
} else if (code == "33") {
if (json.specific_type == "AcDbAlignedDimension" || json.specific_type == "AcDb3PointAngularDimension" || json.specific_type == "AcDb2LineAngularDimension") {
json.ext_line1_z = parseFloat(value);
} else if (json.specific_type == "AcDbOrdinateDimension") {
json.location_z = parseFloat(value);
} else if (json.subclass == "AcDbTrace" || json.subclass == "AcDbFace") {
if (json.corners && json.corners[3]) {
json.corners[3]["z"] = parseFloat(value);
}
} else if (json.subclass == "AcDbMline") {
if (json.vertices && json.vertices.length > 0) {
for (let i = 0; i < json.vertices.length; i++) {
if (json.vertices[i].miter_dir_vector_z !== undefined) continue;
json.vertices[i].miter_dir_vector_z = parseFloat(value);
break;
}
}
} else if (json.subclass == "AcDbSpline") {
if (!json.end_tangent) json.end_tangent = {};
json.end_tangent.z = parseFloat(value);
}
} else if (code == "34") {
if (json.specific_type == "AcDbAlignedDimension" || json.specific_type == "AcDb3PointAngularDimension" || json.specific_type == "AcDb2LineAngularDimension") {
json.ext_line2_z = parseFloat(value);
} else if (json.specific_type == "AcDbOrdinateDimension") {
json.leader_end_z = parseFloat(value);
} else if (json.subclass == "AcDbRasterImage") {
json.clip_vertex[json.clip_vertex.length - 1]["z"] = parseFloat(value);
}
} else if (code == "35") {
if (json.specific_type == "AcDb3PointAngularDimension") {
json.vertex_z = parseFloat(value);
} else if (json.specific_type == "AcDbRadialDimension" || json.specific_type == "AcDbDiametricDimension" || json.specific_type == "AcDb2LineAngularDimension") {
json.dim_first_point_z = parseFloat(value);
}
} else if (code == "36") {
if (json.specific_type == "AcDb3PointAngularDimension") {
json.ext_line1_p1_x = json.ext_line1_x;
json.ext_line1_p2_x = json.ext_line2_x;
json.ext_line2_p1_x = json.x;
json.ext_line2_p2_x = json.vertex_x;
json.ext_line1_p1_y = json.ext_line1_y;
json.ext_line1_p2_y = json.ext_line2_y;
json.ext_line2_p1_y = json.y;
json.ext_line2_p2_y = json.vertex_y;
json.ext_line1_p1_z = json.ext_line1_z;
json.ext_line1_p2_z = json.ext_line2_z;
json.ext_line2_p1_z = json.z;
json.ext_line2_p2_z = json.vertex_z;
json.arc_dim_line_z = parseFloat(value);
delete json.ext_line1_x;
delete json.ext_line2_x;
delete json.x;
delete json.vertex_x;
delete json.ext_line1_y;
delete json.ext_line2_y;
delete json.y;
delete json.vertex_y;
delete json.ext_line1_z;
delete json.ext_line2_z;
delete json.z;
delete json.vertex_z;
}
} else if (code == "40") {
if (json.subclass == "AcDbCircle") {
json.radius = parseFloat(value);
let A = this.area(json);
const C = this.length(json);
json.area = A.area;
json.circumference = C;
} else if (json.subclass == "AcDbEllipse") {
json.minorToMajor = parseFloat(value);
} else if (json.subclass == "AcDbSpline") {
if (!json.knot_values) json.knot_values = [];
json.knot_values.push(parseFloat(value));
} else if (json.subclass == "AcDbText" || json.subclass == "AcDbMText") {
json.height = parseFloat(value);
} else if (json.subclass == "AcDbVertex") {
json.start_width = parseFloat(value);
} else if (json.subclass == "AcDbShape") {
json.size = parseFloat(value);
} else if (json.subclass == "AcDbMline") {
json.scale_factor = parseFloat(value);
} else if (json.subclass == "AcDbDimension") {
json.leader_length = parseFloat(value);
} else if (json.subclass == "AcDbHelix") {
json.radius = parseFloat(value);
} else if (json.subclass == "AcDbLeader") {
json.text_height = parseFloat(value);
} else if (json.subclass == "AcDbPolyline") {
json.vertices[json.vertices.length - 1]["start_width"] = parseFloat(value);
} else if (json.subclass == "AcDbModelerGeometry" && json.specific_type == "AcDbRevolvedSurface") {
json.revolve_angle = parseFloat(value);
} else if (json.subclass == "AcDbModelerGeometry" && json.specific_type == "AcDbExtrudedSurface") {
if (!json.transform_matrix_revolved) json.transform_matrix_revolved = [];
json.transform_matrix_revolved.push(parseFloat(value));
} else if (json.subclass == "AcDbModelerGeometry" && json.specific_type == "AcDbLoftedSurface") {
if (!json.transform_matrix) json.transform_matrix = [];
json.transform_matrix.push(parseFloat(value));
} else if (json.subclass == "AcDbModelerGeometry" && json.specific_type == "AcDbSweptSurface") {
if (!json.transform_matrix_sweep2) json.transform_matrix_sweep2 = [];
json.transform_matrix_sweep2.push(parseFloat(value));
} else if (json.etype == "ACAD_TABLE" && json.subclass == "AcDbBlockReference") {
json.horizontal_margin = parseFloat(value);
}
} else if (code == "41") {
if (json.subclass == "AcDbEllipse") {
json.start_parameter = parseFloat(value);
if (!isNaN(json.end_parameter)) {
this.getEllipseAngles(json);
}
} else if (json.subclass == "AcDbText") {
json.width = parseFloat(value);
} else if (json.subclass == "AcDbVertex") {
json.end_width = parseFloat(value);
} else if (json.subclass == "AcDbMline") {
if (json.vertices && json.vertices.length > 0) {
if (!json.vertices[json.vertices.length - 1].parameters) {
json.vertices[json.vertices.length - 1].parameters = [];
}
json.vertices[json.vertices.length - 1].parameters.push(parseFloat(value));
}
} else if (json.subclass == "AcDbSpline") {
if (!json.weights) json.weights = [];
json.weights.push(parseFloat(value));
} else if (json.subclass == "AcDbHatch") {
json.pattern_scale = parseFloat(value);
} else if (json.subclass == "AcDbBlockReference") {
json.scale_x = parseFloat(value);
} else if (json.subclass == "AcDbHelix") {
json.number_of_turns = parseFloat(value);
} else if (json.subclass == "AcDbLeader") {
json.text_width = parseFloat(value);
} else if (json.subclass == "AcDbPolyline") {
json.vertices[json.vertices.length - 1]["end_width"] = parseFloat(value);
} else if (json.subclass == "AcDbModelerGeometry" && json.specific_type == "AcDbRevolvedSurface") {
json.start_angle = parseFloat(value);
} else if (json.subclass == "AcDbModelerGeometry" && json.specific_type == "AcDbLoftedSurface") {
json.start_draft_angle = parseFloat(value);
} else if (json.subclass == "AcDbModelerGeometry" && json.specific_type == "AcDbSweptSurface") {
if (!json.transform_matrix_path2) json.transform_matrix_path2 = [];
json.transform_matrix_path2.push(parseFloat(value));
} else if (json.etype == "ACAD_TABLE" && json.subclass == "AcDbBlockReference") {
json.vertical_margin = parseFloat(value);
}
} else if (code == "42") {
if (json.subclass == "AcDbEllipse") {
json.end_parameter = parseFloat(value);
if (!isNaN(json.start_parameter)) {
this.getEllipseAngles(json);
}
} else if (json.subclass == "AcDbText") {
json.character_width = parseFloat(value);
} else if (json.subclass == "AcDbDimension") {
json.actual_measurement = parseFloat(value);
if (json.text_override == "<>") {
json.text_override = value;
}
} else if (json.subclass == "AcDbBlockReference") {
json.scale_y = parseFloat(value);
} else if (json.subclass == "AcDbHelix") {
json.turn_height = parseFloat(value);
} else if (json.subclass == "AcDbPolyline") {
json.vertices[json.vertices.length - 1]["bulge"] = parseFloat(value);
} else if (json.subclass == "AcDbMline") {
if (json.vertices && json.vertices.length > 0) {
if (!json.vertices[json.vertices.length - 1].area_fill_parameters) {
json.vertices[json.vertices.length - 1].area_fill_parameters = [];
}
json.vertices[json.vertices.length - 1].area_fill_parameters.push(parseFloat(value));
}
} else if (json.subclass == "AcDbModelerGeometry" && json.specific_type == "AcDbRevolvedSurface") {
if (!json.transform_matrix) json.transform_matrix = [];
json.transform_matrix.push(parseFloat(value));
} else if (json.subclass == "AcDbModelerGeometry" && (json.specific_type == "AcDbExtrudedSurface" || json.specific_type == "AcDbSweptSurface")) {
json.draft_angle = parseFloat(value);
} else if (json.subclass == "AcDbModelerGeometry" && json.specific_type == "AcDbLoftedSurface") {
json.end_draft_angle = parseFloat(value);
}
} else if (code == "43") {
if (json.subclass == "AcDbBlockReference") {
json.scale_z = parseFloat(value);
} else if (json.subclass == "AcDbModelerGeometry" && json.specific_type == "AcDbRevolvedSurface") {
json.draft_angle = parseFloat(value);
} else if (json.subclass == "AcDbModelerGeometry" && (json.specific_type == "AcDbExtrudedSurface" || json.specific_type == "AcDbSweptSurface")) {
json.start_draft_distance = parseFloat(value);
} else if (json.subclass == "AcDbModelerGeometry" && json.specific_type == "AcDbLoftedSurface") {
json.start_draft_magnitude = parseFloat(value);
}
} else if (code == "44") {
if (json.subclass == "AcDbBlockReference") {
json.column_spacing = parseFloat(value);
} else if (json.subclass == "AcDbModelerGeometry" && json.specific_type == "AcDbRevolvedSurface") {
json.start_draft_distance = parseFloat(value);
} else if (json.subclass == "AcDbModelerGeometry" && (json.specific_type == "AcDbExtrudedSurface" || json.specific_type == "AcDbSweptSurface")) {
json.end_draft_distance = parseFloat(value);
} else if (json.subclass == "AcDbModelerGeometry" && json.specific_type == "AcDbLoftedSurface") {
json.end_draft_magnitude = parseFloat(value);
}
} else if (code == "45") {
if (json.subclass == "AcDbBlockReference") {
json.row_spacing = parseFloat(value);
} else if (json.subclass == "AcDbModelerGeometry" && json.specific_type == "AcDbRevolvedSurface") {
json.end_draft_distance = parseFloat(value);