PROCEDURE Second_Kuraidori; CONST {ForEachObjectInLayer} objOptions=2; {Selected} travOptions=0; {Shallow} layerOptions=0; {Current} FUNCTION Second_Change(O_hd:HANDLE):BOOLEAN; CONST tDIMENSION=63; {寸法線} vDimensionType=26; {寸法の種類} dtAngular=5; {角度寸法線} vPrimDimPrecision=20; {精度(主単位)} vSecondDimPrecision=21; {精度(補助単位)} vShowSecondDimText=23; {寸法値の表示(補助単位)} vSecondLeadText=24; {前記号(補助単位)} Max_DP=10; S_adjust=' '; VAR dt,lt :STRING; i,bp :INTEGER; FUNCTION Second_Comma(dp:INTEGER; s:STRING):STRING; CONST pPrimUnitsPerInch=152; {単位/インチ(主単位)} pPrimUnitMark=154; {単位記号(主単位)} pSecondUnitsPerInch=202; {単位/インチ(補助単位)} pSecondUnitMark=204; {単位記号(補助単位)} pSecondShowUnitMark=213; {単位記号の表示(補助単位)} pSecondDisplayTrailZero=215; {有効桁数の0を表示(補助単位)} VAR um :STRING; i :INTEGER; { r :REAL;} BEGIN um:=GetPrefString(pPrimUnitMark); i:=Pos(um,s); IF i<>0 THEN Delete(s,i,Len(um)); IF dp>9 THEN dp:=9; {decPlace has a range of -1 to 9} { IF ValidNumStr(s,r) THEN} s:=Num2Str(dp,Str2Num(s)/GetPrefReal(pPrimUnitsPerInch)*GetPrefReal(pSecondUnitsPerInch)); IF ( NOT GetPref(pSecondDisplayTrailZero) ) & ( Pos('.',s)<>0 )THEN BEGIN WHILE Copy(s,Len(s),1)='0' DO Delete(s,Len(s),1); IF Copy(s,Len(s),1)='.' THEN Delete(s,Len(s),1); END; i := Pos ( '.', s ); IF i = 0 THEN BEGIN i := Len ( s ) + 1; END; WHILE i > 4 DO BEGIN i := i - 3; Insert ( ',', s, i ); END; IF GetPref(pSecondShowUnitMark) THEN s:=Concat(s,GetPrefString(pSecondUnitMark)); Second_comma:=s; END; BEGIN IF ( GetType(O_hd)=tDIMENSION ) & ( GetObjectVariableInt(O_hd,vDimensionType)<>dtAngular ) THEN BEGIN bp:=GetObjectVariableLongint(O_hd,vPrimDimPrecision); SetObjectVariableLongint(O_hd,vPrimDimPrecision,Max_DP); {変換誤差対策、最高精度で取得} dt:=Second_comma(GetObjectVariableLongint(O_hd,vSecondDimPrecision),GetDimText(O_hd)); SetObjectVariableLongint(O_hd,vPrimDimPrecision,bp); lt:=GetObjectVariableString(O_hd,vSecondLeadText); i:=Pos(dt,lt); IF i=0 THEN BEGIN SetObjectVariableString(O_hd,vSecondLeadText,Concat(S_adjust,lt,dt)); SetObjectVariableBoolean(O_hd,vShowSecondDimText,FALSE); ResetObject(O_hd); END ELSE BEGIN Delete(lt,i,Len(dt)); i:=Pos(S_adjust,lt); IF i<>0 THEN Delete(lt,i,Len(S_adjust)); SetObjectVariableString(O_hd,vSecondLeadText,lt); SetObjectVariableBoolean(O_hd,vShowSecondDimText,TRUE); ResetObject(O_hd); END; END; ReDrawAll; Second_Change:=FALSE; END; BEGIN ForEachObjectInLayer(Second_Change,objOptions,travOptions,layerOptions); END; RUN(Second_Kuraidori);