I was scratching my head thinking this could be done better...
Previous version would add a draw command for every 4m of parcel line leading to a large command list for osSetDynamicTextureDataBlendFace(). I was concerned this could become unmanageable for large vars with many parcels. In this version where lines join (be it horizontally or vertically) they are described as one long line leading to a much reduced command list length.
Untested on windows or on large vars with many parcels.
{L_CODE}:
//Sim Parcel Mapping v2
//Total Sorbet Jan 2019
integer resolution=256; //use power 2 ie..128, 256, 512, 1024 - on higher resolutions it might be useful to change PenSize to something greater than 1
integer timer_chunksize=26;
string cmd;
integer ii1;
integer ii2;
integer hor=-1;
integer ver=-1;
integer pwidth;
integer ppixel;
addline(integer x1,integer y1,integer x2,integer y2)
{
cmd+="MoveTo "+(string)(x1*ppixel)+","+(string)((pwidth-y1)*ppixel)+";LineTo "+(string)(x2*ppixel)+","+(string)((pwidth-y2)*ppixel)+";";
}
default
{
on_rez(integer p){llResetScript();}
state_entry()
{
llSetTexture(osGetMapTexture(),0);
vector s=osGetRegionSize();
pwidth=(integer)(s.x/4.0);
ppixel=resolution/pwidth;
llSetTimerEvent(0.5);
}
timer()
{
llSetTimerEvent(0);
llResetTime();
while(ii2<pwidth-1 && llGetTime()<timer_chunksize)
{
string h1=llList2String(llGetParcelDetails(<ii1<<2,ii2<<2,0>,[PARCEL_DETAILS_ID]),0);
string h2=llList2String(llGetParcelDetails(<ii1<<2,(ii2+1)<<2,0>,[PARCEL_DETAILS_ID]),0);
string v1=llList2String(llGetParcelDetails(<ii2<<2,ii1<<2,0>,[PARCEL_DETAILS_ID]),0);
string v2=llList2String(llGetParcelDetails(<(ii2+1)<<2,ii1<<2,0>,[PARCEL_DETAILS_ID]),0);
if(h1!=h2 && !~hor)hor=ii1;else if (h1==h2 && ~hor){addline(hor,ii2+1,ii1,ii2+1);hor=-1;}
if(v1!=v2 && !~ver)ver=ii1;else if(v1==v2 && ~ver){addline(ii2+1,ver,ii2+1,ii1);ver=-1;}
++ii1;
if(ii1==pwidth)
{
if(~hor)addline(hor,ii2+1,ii1,ii2+1);
if(~ver)addline(ii2+1,ver,ii2+1,ii1);
hor=-1;ver=-1;ii1=0;++ii2;
}
}
if(ii2<pwidth-1)llSetTimerEvent(0.5);
else
{
osSetDynamicTextureDataBlendFace("","vector","PenSize 1;PenColor FFFFFF00;"+cmd,"width:"+(string)resolution+",height:"+(string)resolution+",alpha:0",TRUE,2,0,255,0);
cmd="";
llSay(0,"done");
}
}
}