markuno_lib 1.2.75 → 1.2.78
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/markcad.js +6 -3
- package/package.json +1 -1
- package/types/markcad.d.ts +2 -0
package/bin/markcad.js
CHANGED
|
@@ -538,7 +538,7 @@ function calcoladivisioni(ff,notused,shape2,oggetti){return makedivisions(ff,sha
|
|
|
538
538
|
* @param {THREE.Material} [mat=null] - Materiale da applicare
|
|
539
539
|
* @param {number} [size=5] - Dimensione della sfera
|
|
540
540
|
* @returns {THREE.Mesh} Punto 3D
|
|
541
|
-
*/function getpoint(p,id,mat=null,size=5){let tm;const pointgeom=new THREE.SphereGeometry(size,8,8);if(tm=new THREE.Mesh(pointgeom,mat||randombasemat()),id){let sp=getspriteid(id||"",size);sp.position.set(1.2*size,0,1.2*size),tm.add(sp)}return tm.position.set(p.x,0,p.y),tm}async function smat(gcad,file,op={}){op||(op={});let ky=hash(file+JSON.stringify(op));return gcad.smats[ky]||(gcad.smats[ky]=await async function smat0(gcad,file,op={}){let fileini=file,paramstr="",isColore=!1;file.startsWith("#")&&(isColore=!0,/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})(?=$|[[(])/.test(file)||(file=file.slice(1)));let basefile=file;const paramMatch=file.match(/^(.*)\[([^\]]+)\]$/);paramMatch&&(basefile=paramMatch[1],paramstr=paramMatch[2]);const p={};paramstr&¶mstr.split(/[,;]/).forEach((kv=>{let[k,v]=kv.split("=").map((x=>x.trim()));void 0!==v&&(["e"].includes(k)?p[k]=v.startsWith("0x")?parseInt(v):parseFloat(v):isNaN(parseFloat(v))?p[k]=v:p[k]=parseFloat(v))}));const mappaParam={s:["sx","sy"],sx:["sx"],sy:["sy"],rot:["rot"],br:["brightness"],r:["roughness"],m:["metalness"],h:["bumpScale"],n:["normalScale"],d:["bumpScale"],b:["bumpScale"],e:["emissiveIntensity"],ec:["emissive"],env:["envMapIntensity"],o:["opacity"],t:["transparent"],at:["alphaTest"]};let rot0=op.rot,scale0=parseFloat(op.s)||1;delete op.s;let optot={...op};for(let k in p)if(mappaParam[k])for(let t of mappaParam[k])optot[t]=p[k];let transparent=!!optot?.transparent,sx=(optot.sx??optot.s??p.sx??p.s??1)*scale0,sy=(optot.sy??optot.s??p.sy??p.s??1)*scale0,rot=Number((
|
|
541
|
+
*/function getpoint(p,id,mat=null,size=5){let tm;const pointgeom=new THREE.SphereGeometry(size,8,8);if(tm=new THREE.Mesh(pointgeom,mat||randombasemat()),id){let sp=getspriteid(id||"",size);sp.position.set(1.2*size,0,1.2*size),tm.add(sp)}return tm.position.set(p.x,0,p.y),tm}async function smat(gcad,file,op={}){op||(op={});let ky=hash(file+JSON.stringify(op));return gcad.smats[ky]||(gcad.smats[ky]=await async function smat0(gcad,file,op={}){let fileini=file,paramstr="",isColore=!1;file.startsWith("#")&&(isColore=!0,/^#([0-9a-fA-F]{3}|[0-9a-fA-F]{6}|[0-9a-fA-F]{8})(?=$|[[(])/.test(file)||(file=file.slice(1)));let basefile=file;const paramMatch=file.match(/^(.*)\[([^\]]+)\]$/);paramMatch&&(basefile=paramMatch[1],paramstr=paramMatch[2]);const p={};paramstr&¶mstr.split(/[,;]/).forEach((kv=>{let[k,v]=kv.split("=").map((x=>x.trim()));void 0!==v&&(["e"].includes(k)?p[k]=v.startsWith("0x")?parseInt(v):parseFloat(v):isNaN(parseFloat(v))?p[k]=v:p[k]=parseFloat(v))}));const mappaParam={s:["sx","sy"],sx:["sx"],sy:["sy"],rot:["rot"],br:["brightness"],r:["roughness"],m:["metalness"],h:["bumpScale"],n:["normalScale"],d:["bumpScale"],b:["bumpScale"],e:["emissiveIntensity"],ec:["emissive"],env:["envMapIntensity"],o:["opacity"],t:["transparent"],at:["alphaTest"]};let rot0=op.rot,scale0=parseFloat(op.s)||1;delete op.s;let optot={...op};for(let k in p)if(mappaParam[k])for(let t of mappaParam[k])optot[t]=p[k];let transparent=!!optot?.transparent,sx=(optot.sx??optot.s??p.sx??p.s??1)*scale0,sy=(optot.sy??optot.s??p.sy??p.s??1)*scale0,rot=Number((p.rot??0)+(rot0??0))*PIF;try{let tm={roughness:optot.roughness??.5,metalness:optot.metalness??0,side:THREE.DoubleSide,envMapIntensity:optot.env??.6};if(void 0!==optot.normalScale){let ns=Number(optot.normalScale);isNaN(ns)||0===ns||(tm.normalScale=new THREE.Vector2(ns,ns))}let hasNormal=!1,hasBump=!1;if(file.includes("(")||isColore){let{base:base,files:files,transparent:t2}=function getFilesToLoad(isColore,basefile){let files=[],m=basefile.match(/^([^(]+)\((([a-zA-Z0-9_\-/]+)_([a-z]+)|([a-z]+))\)$/);if(!m)return{base:basefile,files:files};let base=m[1],transparent=!1,mapalias=m[3]||base,suffstr=m[4]||m[5]||"";isColore||files.push({suff:"",file:`${base}.webp`,cs:!0});for(let s of suffstr)"t"==s?(transparent=!0,m[3]&&suffissoMap[s]&&files.push({suff:s,file:`${mapalias}_${s}.webp`,cs:!1})):suffissoMap[s]&&files.push({suff:s,file:`${mapalias}_${s}.webp`,cs:!!["","n","e"].includes(s)});return{base:base,files:files,transparent:transparent}}(isColore,basefile);if(transparent=t2,files.some((f=>"n"===f.suff))&&(files=files.filter((f=>"h"!==f.suff))),0===optot.roughness&&(files=files.filter((f=>"r"!==f.suff))),0===optot.metalness&&(files=files.filter((f=>"m"!==f.suff))),0===optot.emissiveIntensity&&(files=files.filter((f=>"e"!==f.suff))),files&&files.length){let textures=await Promise.all(files.map((f=>gcad.tex(f.file,sx,sy,rot).catch((()=>null)))));for(let i=0;i<files.length;i++){let t=textures[i];if(!t)continue;t&&t.isTexture&&(t.colorSpace=files[i].cs?THREE.SRGBColorSpace:THREE.LinearSRGBColorSpace);let suff=files[i].suff,{prop:prop,extra:extra}=suffissoMap[suff];tm[prop]=t,"normalMap"===extra?(hasNormal=!0,tm.normalMap=t,tm.normalScale=tm.normalScale??new THREE.Vector2(1,1)):"bumpScale"===extra?(hasBump=!0,tm.bumpMap=t):Array.isArray(extra)&&extra.includes("emissive")&&void 0!==optot.emissiveIntensity&&0!==optot.emissiveIntensity&&(tm.emissive=optot.emissive||16777215,tm.emissiveIntensity=optot.emissiveIntensity??1)}}isColore&&(tm.color=new THREE.Color(base))}else if(basefile.includes(".")){let tx=await gcad.tex(basefile,sx,sy,rot);if(!tx)return mwhite;tm.map=tx}if(hasNormal&&hasBump?delete tm.bumpMap:hasBump&&(tm.bumpScale=optot.bumpScale??.03),tm.transparent=!!transparent,tm.transparent&&(tm.depthWrite=!1,tm.opacity=optot?.opacity??1),void 0!==optot.brightness){let bf=Number(optot.brightness);!isNaN(bf)&&bf>0&&1!==bf&&(tm.color||(tm.color=new THREE.Color(1,1,1)),tm.color.multiplyScalar(bf))}return new THREE.MeshStandardMaterial(tm)}catch(error){return console.log("errore mat:",error.message,fileini),mwhite}}
|
|
542
542
|
/**
|
|
543
543
|
* Estrae tutte le texture usate nella scena glb e le converte in file WEBP.
|
|
544
544
|
* @param {THREE.Object3D} root - nodo root (es: gltf.scene)
|
|
@@ -603,6 +603,9 @@ function getriferimento(dati,x=0,y=0,z=0,id="rif"){"string"==typeof dati&&(dati=
|
|
|
603
603
|
* @param {Object} options - Opzioni aggiuntive
|
|
604
604
|
* @returns {THREE.Group} Gruppo contenente la quota
|
|
605
605
|
*/function getquota(gcad,testo,x1,y1,x2,y2,options={}){const{altezza:altezza=30,offset:offset=0,piano:piano="xy",layer:layer=22,delta:delta=5,spessoreLinea:spessoreLinea=3}=options,pp=(x,y)=>"xz"===piano?[x,0,y]:"yz"===piano?[0,x,y]:[x,y,0],quotaGroup=new THREE.Group;quotaGroup.name="quota";const dx=x2-x1,dy=y2-y1,distanza=Math.sqrt(dx*dx+dy*dy),angolo=Math.atan2(dy,dx);testo||(testo="$$"),testo.includes("$$")&&(testo=testo.replace("$$",`${distanza.toFixed(1)}`));let linee=testo.split("\n").length;const offsetX=-Math.sin(angolo)*offset,offsetY=Math.cos(angolo)*offset,targhetta=gettarghetta(gcad,testo,2*altezza*linee,{noSfondo:!0,layer:layer,forcey:!0}),{dimx:dimx,dimy:dimy}=targhetta.userData;function getCilindro(puntoInizio,puntoFine,spessore){const direzione=(new THREE.Vector3).subVectors(puntoFine,puntoInizio),lunghezza=direzione.length();let geometria,ky=hash(`c:${spessore}|${lunghezza}`);gcad.geo[ky]?geometria=gcad.geo[ky]:(geometria=new THREE.CylinderGeometry(spessore/2,spessore/2,lunghezza,3,1,!0),gcad.geo[ky]=geometria);const cilindro=new THREE.Mesh(geometria,mblack);cilindro.position.copy(puntoInizio).add(direzione.multiplyScalar(.5));const punto=(new THREE.Vector3).copy(puntoFine);return cilindro.lookAt(punto),cilindro.rotateX(Math.PI/2),cilindro}if(dimx>distanza-delta){targhetta.position.set(distanza/2,altezza,0);const lineaOrizzontale=getCilindro(new THREE.Vector3(...pp(0,0)),new THREE.Vector3(...pp(distanza,0)),spessoreLinea);quotaGroup.add(lineaOrizzontale)}else{const spazioTarghetta=dimx+delta,inizioTarghetta=(distanza-spazioTarghetta)/2,fineTarghetta=inizioTarghetta+spazioTarghetta,lineaOrizzontale1=getCilindro(new THREE.Vector3(...pp(0,0)),new THREE.Vector3(...pp(inizioTarghetta,0)),spessoreLinea);quotaGroup.add(lineaOrizzontale1);const lineaOrizzontale2=getCilindro(new THREE.Vector3(...pp(fineTarghetta,0)),new THREE.Vector3(...pp(distanza,0)),spessoreLinea);quotaGroup.add(lineaOrizzontale2),targhetta.position.set(...pp(distanza/2,0))}const h1=offset>altezza/2?-offset:-altezza/2,h2=-offset>altezza/2?-offset:altezza/2,puntoInizioV1=new THREE.Vector3(...pp(0,h1)),puntoFineV1=new THREE.Vector3(...pp(0,h2)),puntoInizioV2=new THREE.Vector3(...pp(distanza,h1)),puntoFineV2=new THREE.Vector3(...pp(distanza,h2)),lineaVerticale1=getCilindro(puntoInizioV1,puntoFineV1,spessoreLinea);quotaGroup.add(lineaVerticale1);const lineaVerticale2=getCilindro(puntoInizioV2,puntoFineV2,spessoreLinea);return quotaGroup.add(lineaVerticale2),targhetta.userData.updateOrientation=function(camera){camera&&this.quaternion.copy(camera.quaternion)},quotaGroup.add(targhetta),"xy"===piano?(quotaGroup.position.set(x1+offsetX,y1+offsetY,0),quotaGroup.rotation.z=angolo):"xz"===piano?(quotaGroup.position.set(x1+offsetX,0,y1+offsetY),quotaGroup.rotation.y=-angolo):"yz"===piano&&(quotaGroup.position.set(0,x1+offsetX,y1+offsetY),quotaGroup.rotation.x=angolo),quotaGroup.traverse((function(object){object.layers.set(layer)})),quotaGroup}
|
|
606
|
+
/**
|
|
607
|
+
* Perlin noise 2D tileable, RGBA interpolato, con supporto scale e octaves
|
|
608
|
+
*/function fillNoise(data,size,op={}){let{scale:scale=8,octaves:octaves=3,persistence:persistence=.5,seed:seed=0,contrast:contrast=1,color1:color1="#000000",color2:color2="#ffffff",alpha1:alpha1=1,alpha2:alpha2=1}=op;const c1=new THREE.Color(color1),c2=new THREE.Color(color2),fade=t=>t*t*t*(t*(6*t-15)+10),lerp=(a,b,t)=>a+(b-a)*t,period=size,perm=new Uint16Array(2*period);let seedval=0|Math.floor(65536*seed);for(let i=0;i<period;i++)perm[i]=i;for(let i=0;i<period;i++){const j=Math.floor((seedval^=seedval<<13,seedval^=seedval>>17,seedval^=seedval<<5,(seedval<0?1+~seedval:seedval)%65536/65536*period));[perm[i],perm[j]]=[perm[j],perm[i]]}for(let i=0;i<period;i++)perm[period+i]=perm[i];const grad2=[[1,1],[-1,1],[1,-1],[-1,-1],[1,0],[-1,0],[0,1],[0,-1]];function grad(ix,iy){const idx=perm[(perm[ix%period]+iy)%period]%8;return grad2[idx]}function perlin(x,y,periodx,periody){const X=Math.floor(x)%periodx,Y=Math.floor(y)%periody,xf=x-Math.floor(x),yf=y-Math.floor(y),g00=grad(X,Y),g10=grad(X+1,Y),g01=grad(X,Y+1),g11=grad(X+1,Y+1),n00=g00[0]*xf+g00[1]*yf,n10=g10[0]*(xf-1)+g10[1]*yf,n01=g01[0]*xf+g01[1]*(yf-1),n11=g11[0]*(xf-1)+g11[1]*(yf-1),u=fade(xf),v=fade(yf);return lerp(lerp(n00,n10,u),lerp(n01,n11,u),v)}let minv=1/0,maxv=-1/0;const values=new Float32Array(size*size);for(let y=0;y<size;y++)for(let x=0;x<size;x++){let nx=x/size*scale,ny=y/size*scale,amp=1,freq=1,sum=0,norm=0;for(let o=0;o<octaves;o++){sum+=perlin(nx*freq,ny*freq,period/freq,period/freq)*amp,norm+=amp,amp*=persistence,freq*=2}let v=sum/norm;values[y*size+x]=v,v<minv&&(minv=v),v>maxv&&(maxv=v)}const scalev=1/(maxv-minv);for(let y=0;y<size;y++)for(let x=0;x<size;x++){let v=(values[y*size+x]-minv)*scalev;v=Math.pow(v,contrast);const r=c1.r+(c2.r-c1.r)*v,g=c1.g+(c2.g-c1.g)*v,b=c1.b+(c2.b-c1.b)*v,a=0,i=4*(y*size+x);data[i]=Math.floor(255*r),data[i+1]=Math.floor(255*g),data[i+2]=Math.floor(255*b),data[i+3]=Math.floor(255*a)}}function texgen(gcad,type,size=256,op={}){[16,32,64,128,256,512,1024].includes(size)||(size=256);let ky=hash(`gen|${type}|${size}|${JSON.stringify(op)}`);if(!gcad[ky]){const data=new Uint8Array(size*size*4);switch(type){case"wood":let op1={...op};op1.scale=6+seeder(40,op.seed+"a")/10,op1.octaves=op.octaves||3,op1.persistence=.5+seeder(50,op.seed+"b")/100,op1.rings=2+seeder(200,op.seed+"c")/100,op1.distortion=.3+seeder(100,op.seed+"d")/300,op1.color1=op.color1||"#442200",op1.color2=op.color2||"#ffe0a0",fillNoise(data,size,op1);break;case"marble":let op2={...op};op2.scale=op.scale||10,op2.octaves=op.octaves||3,op2.persistence=op.persistence||.6,op2.rings=op.rings||1+seeder(100,op.seed+"m3")/50,op2.distortion=op.distortion||.8+seeder(200,op.seed+"m4")/200,op2.contrast=op.contrast||1.2,op2.color1=op.color1||"#e0e0e0",op2.color2=op.color2||"#909090",fillNoise(data,size,op2);break;case"glass":let opg={...op};opg.scale=op.scale||32,opg.octaves=op.octaves||2,opg.persistence=op.persistence||.8,opg.contrast=op.contrast||1,opg.color1=op.color1||"rgba(255,255,255,0.2)",opg.color2=op.color2||"rgba(255,255,255,0.6)",fillNoise(data,size,opg);break;case"gradient":case"pattern":break;default:fillNoise(data,size,op)}const tex=new THREE.DataTexture(data,size,size,THREE.RGBAFormat);tex.needsUpdate=!0,tex.wrapS=tex.wrapT=THREE.RepeatWrapping,tex.repeat.set(.002,.002),tex.center.set(.5,.5),gcad[ky]=tex}return gcad[ky]}
|
|
606
609
|
/**
|
|
607
610
|
* Crea un cilindro 3D con orientamento personalizzabile
|
|
608
611
|
* @param {string} ori - Orientamento (X/L, Y/A, Z/P)
|
|
@@ -630,7 +633,7 @@ function getcilindro(gcad,ori,h,r1,r2,mats=mwhite,options){options||(options={})
|
|
|
630
633
|
* @param {THREE.Material} mat - materiale della mesh
|
|
631
634
|
* @param {object} [options] - opzioni: {center: boolean, nolines: boolean}
|
|
632
635
|
* @returns {THREE.Group}
|
|
633
|
-
*/function getsphere(gcad,r,mat,options){options||(options={});let{nolines:nolines,segmenti:segmenti=16}=options,grp=new THREE.Group;const sphere=new THREE.SphereGeometry(r,2*segmenti,segmenti);if(scalauv(sphere),!nolines){let segments=edgesfromgeometry(sphere);grp.add(segments)}return grp.add(getmesh(sphere,mat||mwhite)),grp}function extrudelines(grp,pts,holes,h,sy=3){const addring=arr=>{const top=((arr,z)=>{if(!arr||arr.length<2)return null;const n=arr.length,pos=new Float32Array(3*(n+1));for(let i=0;i<=n;i++){const p=arr[i%n],o=3*i;pos[o]=p.x,pos[o+1]=p.y,pos[o+2]=z}const g=new THREE.BufferGeometry;return g.setAttribute("position",new THREE.BufferAttribute(pos,3)),new THREE.Line(g,materialline1)})(arr,-sy);top&&(top.layers.set(30),grp.add(top))};addring(pts);for(const hh of holes)addring(hh)}function getextrude(gcad,pts,h=10,holes=[],mat=void 0,op={}){mat&&mat.isMaterial||(op=mat,mat=void 0),op=op??{};let{stonda:stonda,sx:sx,sy:sy,round:round,nolines:nolines}=op,ky=hash(`${JSON.stringify(pts)}|${h}|${JSON.stringify(op)}|${JSON.stringify(holes)}`);sx=sx??stonda??0,sy=sy??stonda??0;let geom=gcad.geo[ky];if(!geom){const sh=
|
|
636
|
+
*/function getsphere(gcad,r,mat,options){options||(options={});let{nolines:nolines,segmenti:segmenti=16}=options,grp=new THREE.Group;const sphere=new THREE.SphereGeometry(r,2*segmenti,segmenti);if(scalauv(sphere),!nolines){let segments=edgesfromgeometry(sphere);grp.add(segments)}return grp.add(getmesh(sphere,mat||mwhite)),grp}function makeShape(points){const shape=new THREE.Shape;shape.moveTo(points[0].x,points[0].y);for(let i=1;i<points.length;i++)shape.lineTo(points[i].x,points[i].y);return shape.closePath(),shape}function extrudelines(grp,pts,holes,h,sy=3){const addring=arr=>{const top=((arr,z)=>{if(!arr||arr.length<2)return null;const n=arr.length,pos=new Float32Array(3*(n+1));for(let i=0;i<=n;i++){const p=arr[i%n],o=3*i;pos[o]=p.x,pos[o+1]=p.y,pos[o+2]=z}const g=new THREE.BufferGeometry;return g.setAttribute("position",new THREE.BufferAttribute(pos,3)),new THREE.Line(g,materialline1)})(arr,-sy);top&&(top.layers.set(30),grp.add(top))};addring(pts);for(const hh of holes)addring(hh)}function getextrude(gcad,pts,h=10,holes=[],mat=void 0,op={}){mat&&mat.isMaterial||(op=mat,mat=void 0),op=op??{};let{stonda:stonda,sx:sx,sy:sy,round:round,nolines:nolines}=op,ky=hash(`${JSON.stringify(pts)}|${h}|${JSON.stringify(op)}|${JSON.stringify(holes)}`);sx=sx??stonda??0,sy=sy??stonda??0;let geom=gcad.geo[ky];if(!geom){const sh=makeShape(pts);holes.forEach((hh=>sh.holes.push(function makePath(points){const path=new THREE.Path;path.moveTo(points[0].x,points[0].y);for(let i=1;i<points.length;i++)path.lineTo(points[i].x,points[i].y);return path.closePath(),path}(hh))));const benabled=sx>0&&sy>0;geom=new THREE.ExtrudeGeometry(sh,{depth:h,bevelEnabled:benabled,bevelSize:sx,bevelThickness:sy,bevelSegments:benabled?round?3:1:0,curveSegments:benabled?10:1}),gcad.geo[ky]=geom,op.uvswap&&uvswap(geom)}let tm=new THREE.Group;return tm.add(new THREE.Mesh(geom,mat||mwhite)),nolines||extrudelines(tm,pts,holes,0,sy),tm}function getthorus(gcad,r,tuber=.2,mat,options){options||(options={});let{center:center,nolines:nolines,segmenti:segmenti=16,tubi:tubi=12}=options,grp=new THREE.Group;const thorus=new THREE.TorusGeometry(r,tuber,tubi,2*segmenti);if(scalauv(thorus),grp.position.set(0,center?0:r,0),!nolines){let segments=edgesfromgeometry(thorus);grp.add(segments)}return grp.add(getmesh(thorus,mat||mwhite)),grp}function getluce(gcad,shape,color="#ffffff",intensity=1){const pt=shape.pt;if(!pt||!pt.length)return null;const ky=hash(`${shape.key}|${color}|${intensity}`);if(!gcad.meshes[ky]){const sh=makeShape(pt),geom=new THREE.ShapeGeometry(sh),mat=new THREE.MeshStandardMaterial({color:new THREE.Color(color),emissive:new THREE.Color(color),emissiveIntensity:intensity,toneMapped:!1,transparent:!0,depthWrite:!1,side:THREE.DoubleSide,polygonOffset:!0,polygonOffsetFactor:-2,polygonOffsetUnits:1}),mesh=new THREE.Mesh(geom,mat);mesh.layers.set(8),mesh.userData.isBloom=!0,gcad.meshes[ky]=mesh,gcad.mustlight=!0}return gcad.meshes[ky]}
|
|
634
637
|
/**
|
|
635
638
|
* @param {BufferGeometry} geometry
|
|
636
639
|
* @param {number} tolerance
|
|
@@ -1115,4 +1118,4 @@ async function clearmat(){for(const key in _textures)if(_textures[key]){const te
|
|
|
1115
1118
|
* @param {THREE.Object3D} gruppo - oggetto root
|
|
1116
1119
|
* @param {Array<{ mats: string[], name?: string }>} matricole - elenco da evidenziare
|
|
1117
1120
|
* @returns {Promise<File[]>}
|
|
1118
|
-
*/async function evidenziaColli(gruppo,matricole,callback){salvaMaterialiOriginali(gruppo);const SIDE=THREE.DoubleSide,mwhite=new THREE.MeshStandardMaterial({color:16777215,roughness:.5,metalness:.4,side:SIDE}),mgreen=new THREE.MeshStandardMaterial({color:36864,roughness:.5,metalness:.4,side:SIDE});let ii=0;try{for(let mts of matricole)ii++,mts.name||(mts.name=`collo_${ii}`),applicaEvidenziazione(gruppo,mts.mats,mwhite,mgreen),await callback(mts)}catch(err){console.error("Errore durante evidenzia:",err)}finally{ripristinaMaterialiOriginali()}}function TODEG(a,dec=1){let C=10**dec;return Math.round(180*a*C/Math.PI)/C}function TORAD(a,dec=3){let C=10**dec;return Math.round(a*PIF*C)/C}const blocked={window:void 0,self:void 0,globalThis:void 0,document:void 0,Function:void 0,eval:void 0,fetch:void 0,XMLHttpRequest:void 0};function getOggetto(obj,exclude=[]){if(Array.isArray(obj))return obj.map((item=>getOggetto(item,exclude)));if(obj&&"object"==typeof obj){const result={};for(const[key,value]of Object.entries(obj))"function"==typeof value||exclude&&exclude.includes(key)||(result[key]=getOggetto(value,exclude));return result}return obj}async function evalcustomfunction(amb,code,values,objects){try{values||(values={}),objects||(objects={});const params={GCAD:!1,...values,A:amb,V:amb.vari,amb:amb,info3d:async function info3d(file,scale=1,scaley=0,scalez=0){if(amb.gcad)return await amb.gcad.info3d(file,scale,scaley,scalez)},gcad:amb.gcad,log:function addlog(...pars){pars.map((p=>getOggetto(p)))},Math:Math,getcolonne:getcolonne,clean:clean,SP:SP,seeder:seeder,seedarray:seedarray,Punto2:Punto2,Linea2:Linea2,clamp:clamp,hash:hash,PIF:PIF,getshape:getshape,shapeclip:shapeclip,...objects},paramNames=[...Object.keys(params),...Object.keys(blocked)],paramValues=[...Object.values(params),...Object.values(blocked)],fn=new Function(...paramNames,`\n try {\n return (async () => {\n ${code}\n })();\n } catch (err) {\n err.stack = '[SCRIPT] ' + err.stack;\n throw err;\n }`);return await fn(...paramValues)}catch(error){throw console.error("Errore durante l'esecuzione:",error),error}}function setLineColorMode(white,isdark){white?(materialline1.color.set(16777215),materialline2.color.set(16777215)):isdark?(materialline1.color.set(7368816),materialline2.color.set(6316128)):(materialline1.color.set(3158064),materialline2.color.set(5263440)),materialline1.needsUpdate=!0,materialline2.needsUpdate=!0}export{Linea2,Matrix3D,PIF,Punto2,SIDE,SP,TODEG,TORAD,Vis2d,Vobject,Vscene,addmovpivot,angle2vec,angle3point,blocked,calcolatasks,clamp,clean,creategroup,deletegroup,dxfbulge,edgesfromgeometry,elaborapercorso,errorescript,estruso,estrusopat,evalcustomfunction,evidenziaColli,extractTextures,get3dshape,getOggetto,getbb,getbordi,getbox,getcilindro,getcyl,getdumpmacro,getemitter,getextrude,getface,getfakeshadow,getfakeshadow2,getline,getlinesgeom,getmesh,getmovimento,getnodebyid,getpannello,getpannello2,getpoint,getptsoffset,getpunto,getquota,getreceiver,getriferimento,getshape,getsphere,getsprite,getsubrules,gettarghetta,getthorus,groupfromgeometry,hash,infoestrudi,isfn,ismacro,joinlinestoshapes,mapvertices,materialline1,materialline2,mblack,mblue,mgray1,mgray2,mgreen,mred,mwhite,newgcad,normal2,posiziona,raccordabezier,randombasemat,revolve,ripristinaMaterialiOriginali,salvaMaterialiOriginali,scalaoggetto,scaleunit,seedarray,seeder,setLineColorMode,setorigine,shapeclip,smat,spritemat,svuotanodo,valutagrafica};
|
|
1121
|
+
*/async function evidenziaColli(gruppo,matricole,callback){salvaMaterialiOriginali(gruppo);const SIDE=THREE.DoubleSide,mwhite=new THREE.MeshStandardMaterial({color:16777215,roughness:.5,metalness:.4,side:SIDE}),mgreen=new THREE.MeshStandardMaterial({color:36864,roughness:.5,metalness:.4,side:SIDE});let ii=0;try{for(let mts of matricole)ii++,mts.name||(mts.name=`collo_${ii}`),applicaEvidenziazione(gruppo,mts.mats,mwhite,mgreen),await callback(mts)}catch(err){console.error("Errore durante evidenzia:",err)}finally{ripristinaMaterialiOriginali()}}function TODEG(a,dec=1){let C=10**dec;return Math.round(180*a*C/Math.PI)/C}function TORAD(a,dec=3){let C=10**dec;return Math.round(a*PIF*C)/C}const blocked={window:void 0,self:void 0,globalThis:void 0,document:void 0,Function:void 0,eval:void 0,fetch:void 0,XMLHttpRequest:void 0};function getOggetto(obj,exclude=[]){if(Array.isArray(obj))return obj.map((item=>getOggetto(item,exclude)));if(obj&&"object"==typeof obj){const result={};for(const[key,value]of Object.entries(obj))"function"==typeof value||exclude&&exclude.includes(key)||(result[key]=getOggetto(value,exclude));return result}return obj}async function evalcustomfunction(amb,code,values,objects){try{values||(values={}),objects||(objects={});const params={GCAD:!1,...values,A:amb,V:amb.vari,amb:amb,info3d:async function info3d(file,scale=1,scaley=0,scalez=0){if(amb.gcad)return await amb.gcad.info3d(file,scale,scaley,scalez)},gcad:amb.gcad,log:function addlog(...pars){const sanitized=pars.map((p=>getOggetto(p)));console.log(...sanitized)},Math:Math,getcolonne:getcolonne,clean:clean,SP:SP,seeder:seeder,seedarray:seedarray,Punto2:Punto2,Linea2:Linea2,clamp:clamp,hash:hash,PIF:PIF,getshape:getshape,shapeclip:shapeclip,...objects},paramNames=[...Object.keys(params),...Object.keys(blocked)],paramValues=[...Object.values(params),...Object.values(blocked)],fn=new Function(...paramNames,`\n try {\n return (async () => {\n ${code}\n })();\n } catch (err) {\n err.stack = '[SCRIPT] ' + err.stack;\n throw err;\n }`);return await fn(...paramValues)}catch(error){throw console.error("Errore durante l'esecuzione:",error),error}}function setLineColorMode(white,isdark){white?(materialline1.color.set(16777215),materialline2.color.set(16777215)):isdark?(materialline1.color.set(7368816),materialline2.color.set(6316128)):(materialline1.color.set(3158064),materialline2.color.set(5263440)),materialline1.needsUpdate=!0,materialline2.needsUpdate=!0}export{Linea2,Matrix3D,PIF,Punto2,SIDE,SP,TODEG,TORAD,Vis2d,Vobject,Vscene,addmovpivot,angle2vec,angle3point,blocked,calcolatasks,clamp,clean,creategroup,deletegroup,dxfbulge,edgesfromgeometry,elaborapercorso,errorescript,estruso,estrusopat,evalcustomfunction,evidenziaColli,extractTextures,get3dshape,getOggetto,getbb,getbordi,getbox,getcilindro,getcyl,getdumpmacro,getemitter,getextrude,getface,getfakeshadow,getfakeshadow2,getline,getlinesgeom,getluce,getmesh,getmovimento,getnodebyid,getpannello,getpannello2,getpoint,getptsoffset,getpunto,getquota,getreceiver,getriferimento,getshape,getsphere,getsprite,getsubrules,gettarghetta,getthorus,groupfromgeometry,hash,infoestrudi,isfn,ismacro,joinlinestoshapes,mapvertices,materialline1,materialline2,mblack,mblue,mgray1,mgray2,mgreen,mred,mwhite,newgcad,normal2,posiziona,raccordabezier,randombasemat,revolve,ripristinaMaterialiOriginali,salvaMaterialiOriginali,scalaoggetto,scaleunit,seedarray,seeder,setLineColorMode,setorigine,shapeclip,smat,spritemat,svuotanodo,texgen,valutagrafica};
|
package/package.json
CHANGED
package/types/markcad.d.ts
CHANGED
|
@@ -468,6 +468,7 @@ export function getfakeshadow(gcad: any, shape: any, alfa: any): any;
|
|
|
468
468
|
export function getfakeshadow2(w: any, h: any, map: any): any;
|
|
469
469
|
export function getline(l: any, id: any, mat?: any): any;
|
|
470
470
|
export function getlinesgeom(edges: any, layer?: number): any;
|
|
471
|
+
export function getluce(gcad: any, shape: any, color?: string, intensity?: number): any;
|
|
471
472
|
export function getmesh(geom: any, material: any, layer?: number, clone?: boolean): any;
|
|
472
473
|
/**
|
|
473
474
|
* Crea un gestore di movimento per animare oggetti 3D.
|
|
@@ -738,6 +739,7 @@ export function shapeclip(): {
|
|
|
738
739
|
export function smat(gcad: any, file: any, op?: {}): Promise<any>;
|
|
739
740
|
export function spritemat(gcad: any, file: any): Promise<any>;
|
|
740
741
|
export function svuotanodo(n: any): void;
|
|
742
|
+
export function texgen(gcad: any, type: any, size?: number, op?: {}): any;
|
|
741
743
|
export function valutagrafica(amb: any, startmacro: any, rulespec: any, progetto: any, fnreload: any): Promise<{
|
|
742
744
|
oo: any;
|
|
743
745
|
vari: any;
|