UNPKG

qwc2

Version:
16 lines 8.73 kB
function _typeof(o){"@babel/helpers - typeof";return _typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(o){return typeof o}:function(o){return o&&"function"==typeof Symbol&&o.constructor===Symbol&&o!==Symbol.prototype?"symbol":typeof o},_typeof(o)}function ownKeys(e,r){var t=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);r&&(o=o.filter(function(r){return Object.getOwnPropertyDescriptor(e,r).enumerable})),t.push.apply(t,o)}return t}function _objectSpread(e){for(var r=1;r<arguments.length;r++){var t=null!=arguments[r]?arguments[r]:{};r%2?ownKeys(Object(t),!0).forEach(function(r){_defineProperty(e,r,t[r])}):Object.getOwnPropertyDescriptors?Object.defineProperties(e,Object.getOwnPropertyDescriptors(t)):ownKeys(Object(t)).forEach(function(r){Object.defineProperty(e,r,Object.getOwnPropertyDescriptor(t,r))})}return e}function _defineProperty(e,r,t){return(r=_toPropertyKey(r))in e?Object.defineProperty(e,r,{value:t,enumerable:!0,configurable:!0,writable:!0}):e[r]=t,e}function _toPropertyKey(t){var i=_toPrimitive(t,"string");return"symbol"==_typeof(i)?i:i+""}function _toPrimitive(t,r){if("object"!=_typeof(t)||!t)return t;var e=t[Symbol.toPrimitive];if(void 0!==e){var i=e.call(t,r||"default");if("object"!=_typeof(i))return i;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===r?String:Number)(t)}/** * Copyright 2025 Sourcepole AG * All rights reserved. * * This source code is licensed under the BSD-style license found in the * LICENSE file in the root directory of this source tree. */var END_MARKERS={SECTION:"ENDSEC",TABLE:"ENDTAB",BLOCK:"ENDBLK"};export function explodeDxf(text){var tuples=text.replace(/\s+$/,"").split(/\r\n|\r|\n/g).flatMap(function(_,i,a){return i%2?[]:[a.slice(i,i+2).map(function(x){return x.trim()})]});var maxHandle=100;// Value in QGIS var _explode=function explode(pairs){var _toplevelTuples$find;var toplevelTuples=[];var sectionTuples;var marker;var expectEndMarker;var children=pairs.reduce(function(acc,tuple){if(tuple[0]==="5"&&tuple[1]!=="9999999"){maxHandle=Math.max(parseInt(tuple[1],16),maxHandle)}if(tuple[0]==="0"){if(expectEndMarker&&tuple[1]===expectEndMarker){acc.push(_objectSpread({type:marker},_explode(sectionTuples)));sectionTuples=undefined;marker=undefined;expectEndMarker=undefined}else if(expectEndMarker&&tuple[1]!==expectEndMarker){sectionTuples.push(tuple)}else if(!expectEndMarker){if(sectionTuples){acc.push(_objectSpread({type:marker},_explode(sectionTuples)))}sectionTuples=[];marker=tuple[1];expectEndMarker=END_MARKERS[marker]}}else if(sectionTuples){sectionTuples.push(tuple)}else if(acc.length>0){acc[acc.length-1].tailValues.push(tuple)}else{toplevelTuples.push(tuple)}return acc},[]);if(marker&&sectionTuples&&!expectEndMarker){children.push(_objectSpread({type:marker},_explode(sectionTuples)))}var name=(_toplevelTuples$find=toplevelTuples.find(function(tuple){return tuple[0]==="2"}))===null||_toplevelTuples$find===void 0?void 0:_toplevelTuples$find[1];return{name:name,values:toplevelTuples,children:children,tailValues:[]}};var result=_explode(tuples);result.maxHandle=maxHandle;return result}export function implodeDxf(exploded){var output="";var handleSeed=100;var dumpValues=function dumpValues(values){return values.forEach(function(tuple){if(tuple[0]==="5"&&parseInt(tuple[0],16)>=100){output+="5\n".concat((handleSeed++).toString(16),"\n")}else{output+="".concat(tuple[0],"\n").concat(tuple[1],"\n")}})};var _implode=function implode(data){dumpValues(data.values);data.children.forEach(function(child){output+="0\n".concat(child.type,"\n");_implode(child);if(END_MARKERS[child.type]){output+="0\n".concat(END_MARKERS[child.type],"\n")}dumpValues(child.tailValues)})};_implode(exploded);return output}export function mergeDxf(documents){var _mergedBlockRecords$c,_mergedBlockRecords$c2,_mergedBlockRecords$c3;// Merge blockRecords, Blocks, Layers and Entities of dxf documents var mergedEntities=documents[0].children.find(function(child){return child.type==="SECTION"&&child.name==="ENTITIES"});var mergedLayers=documents[0].children.find(function(child){return child.type==="SECTION"&&child.name==="TABLES"}).children.find(function(child){return child.type==="TABLE"&&child.name==="LAYER"});var mergedBlockRecords=documents[0].children.find(function(child){return child.type==="SECTION"&&child.name==="TABLES"}).children.find(function(child){return child.type==="TABLE"&&child.name==="BLOCK_RECORD"});var mergedBlocks=documents[0].children.find(function(child){return child.type==="SECTION"&&child.name==="BLOCKS"});// Reference the common block handles of the first document in subsequent documents var commonBlockHandles={"*Model_Space":(_mergedBlockRecords$c=mergedBlockRecords.children.find(function(br){return br.name==="*Model_Space"}))===null||_mergedBlockRecords$c===void 0||(_mergedBlockRecords$c=_mergedBlockRecords$c.values)===null||_mergedBlockRecords$c===void 0||(_mergedBlockRecords$c=_mergedBlockRecords$c.find(function(t){return t[0]==="5"}))===null||_mergedBlockRecords$c===void 0?void 0:_mergedBlockRecords$c[1],"*Paper_Space":(_mergedBlockRecords$c2=mergedBlockRecords.children.find(function(br){return br.name==="*Paper_Space"}))===null||_mergedBlockRecords$c2===void 0||(_mergedBlockRecords$c2=_mergedBlockRecords$c2.values)===null||_mergedBlockRecords$c2===void 0||(_mergedBlockRecords$c2=_mergedBlockRecords$c2.find(function(t){return t[0]==="5"}))===null||_mergedBlockRecords$c2===void 0?void 0:_mergedBlockRecords$c2[1],"*Paper_Space0":(_mergedBlockRecords$c3=mergedBlockRecords.children.find(function(br){return br.name==="*Paper_Space0"}))===null||_mergedBlockRecords$c3===void 0||(_mergedBlockRecords$c3=_mergedBlockRecords$c3.values)===null||_mergedBlockRecords$c3===void 0||(_mergedBlockRecords$c3=_mergedBlockRecords$c3.find(function(t){return t[0]==="5"}))===null||_mergedBlockRecords$c3===void 0?void 0:_mergedBlockRecords$c3[1]};var maxHandle=documents[0].maxHandle;documents.slice(1).forEach(function(document){// Get items to merge var entities=document.children.find(function(child){return child.type==="SECTION"&&child.name==="ENTITIES"});var layers=document.children.find(function(child){return child.type==="SECTION"&&child.name==="TABLES"}).children.find(function(child){return child.type==="TABLE"&&child.name==="LAYER"});var blockRecords=document.children.find(function(child){return child.type==="SECTION"&&child.name==="TABLES"}).children.find(function(child){return child.type==="TABLE"&&child.name==="BLOCK_RECORD"});var blocks=document.children.find(function(child){return child.type==="SECTION"&&child.name==="BLOCKS"});var handleMapping={};// Merge items, adjusting handles as necessary to avoid conflicting handles blockRecords.children.forEach(function(blockRecord){var handleTuple=blockRecord.values.find(function(tuple){return tuple[0]==="5"});if(["*Model_Space","*Paper_Space","*Paper_Space0"].includes(blockRecord.name)){handleMapping[handleTuple[1]]=commonBlockHandles[blockRecord.name]}else{var newHandle=(++maxHandle).toString(16);handleMapping[handleTuple[1]]=newHandle;handleTuple[1]=newHandle;mergedBlockRecords.children.push(blockRecord)}});blocks.children.forEach(function(block){// Note: Don't merge common blocks if(!["*Model_Space","*Paper_Space","*Paper_Space0"].includes(block.name)){var handleRefTuple=block.values.find(function(tuple){return tuple[0]==="330"});if(handleRefTuple){handleRefTuple[1]=handleMapping[handleRefTuple[1]]}block.values.find(function(tuple){return tuple[0]==="5"})[1]=(++maxHandle).toString(16);mergedBlocks.children.push(block)}});layers.children.forEach(function(layer){// Note: Don't merge dummy layer 0 if(layer.name!=="0"){layer.values.find(function(tuple){return tuple[0]==="5"})[1]=(++maxHandle).toString(16);mergedLayers.children.push(layer)}});entities.children.forEach(function(entity){var handleRefTuple=entity.values.find(function(tuple){return tuple[0]==="330"});if(handleRefTuple){handleRefTuple[1]=handleMapping[handleRefTuple[1]]}var handleTuple=entity.values.find(function(tuple){return tuple[0]==="5"});var newHandle=(++maxHandle).toString(16);handleMapping[handleTuple[1]]=newHandle;handleTuple[1]=newHandle;// VERTEX, SEQEND entity.children.forEach(function(child){child.values.find(function(tuple){return tuple[0]==="5"})[1]=(++maxHandle).toString(16);var childHandleRefTuple=child.values.find(function(tuple){return tuple[0]==="330"});if(childHandleRefTuple){childHandleRefTuple[1]=handleMapping[childHandleRefTuple[1]]}});mergedEntities.children.push(entity)})});// Update layer count mergedLayers.values.find(function(tuple){return tuple[0]==="70"})[1]=String(mergedLayers.children.length);return documents[0]}