火曜日, 9月 30, 2025

Visual Studio Basic_43 
同一階層内のファイル名入れ替え

同一階層内のファイル名を入れ替える処理をすることが多いので、安全を考えてプログラムしてみました。なお、同種類のファイルに限定していますが、そのうち別階層対応版を考えてみます。

レイアウトは上の様にしました。
L=Label
B=Button

ソースの「-----------------」は区切り線なので記述の必要はありません。

青字は自動入力部分で修正の必要はありません。 黒字が入力部分です。 緑字はコメント文なので記述の必要はありません。

------------------
Public Class Form1
' Button1: ファイルAを選択してLabel1に表示
Private Sub Button1_Click(sender As Object, _
        e As EventArgs) Handles Button1.Click
Using ofd As New OpenFileDialog
ofd.Title = "ファイルAを選択してください"
If ofd.ShowDialog() = DialogResult.OK Then
Label1.Text = ofd.FileName
End If
End Using
End Sub

' Button2: ファイルBを選択してLabel2に表示
Private Sub Button2_Click(sender As Object, _
        e As EventArgs) Handles Button2.Click
Using ofd As New OpenFileDialog
ofd.Title = "ファイルBを選択してください"
If ofd.ShowDialog() = DialogResult.OK Then
Label2.Text = ofd.FileName
End If
End Using
End Sub

' Button3: ファイル名を入れ替える
Private Sub Button3_Click(sender As Object, _
        e As EventArgs) Handles Button3.Click
Dim fileA = Label1.Text
Dim fileB = Label2.Text

If String.IsNullOrWhiteSpace(fileA) _
            OrElse String.IsNullOrWhiteSpace(fileB) Then
MessageBox.Show("ファイルを選択してください。")
Exit Sub
End If

If Not File.Exists(fileA) OrElse Not File.Exists(fileB) Then
MessageBox.Show("指定されたファイルが存在しません。")
Exit Sub
End If

' A と B が同じフォルダ内か確認
Dim dirA = Path.GetDirectoryName(fileA)
Dim dirB = Path.GetDirectoryName(fileB)
If dirA <> dirB Then
MessageBox.Show _
            ("同じフォルダ内のファイルである必要があります。")
Exit Sub
End If

Try
Dim tempFile = Path.Combine(dirA, "TempFile.tmp")

' A → Temp
File.Move(fileA, tempFile)
' B → A
File.Move(fileB, fileA)
' Temp → B
File.Move(tempFile, fileB)

MessageBox.Show("ファイル名を入れ替えました。")
Catch ex As Exception
MessageBox.Show("エラー: " & ex.Message)
End Try
End Sub

Private Sub Button4_Click(sender As Object, _
        e As EventArgs) Handles Button4.Click
Label1.ResetText()
Label2.ResetText()
End Sub

Private Sub Button5_Click(sender As Object, _
        e As EventArgs) Handles Button5.Click
End
End Sub
End Class
------------------

起動直後の画面。
用意した2つのファイルの名称を変更します。

[File A]と[File B]をクリックしてファイルを指定して[ファイル名入れ替え]をクリックして問題がなければ・・・

上のアラートが表示され・・・

ファイル名は入れ替わります。

TCDW8540 
他に誰もいないので混んでいるわけではないのです

散歩中、市街地のそこそこ大きな交差点で信号待ちしていたら、突然右横に違和感を感じ、視線を送ると知らない女性が立っていてビックリ。パーソナルゾーンが狂っているとしか思えない3cmもない距離。他に誰もいないので混んでいるわけではないのです。もしかして変な空間に紛れ込んだのかな〜?

月曜日, 9月 29, 2025

modoローポリモデリング 64 
対称処理時の頂点ベベルは慎重に

対称処理時の頂点ベベルは慎重にしましょう。

いつものように立方体を[D]キーで2回でポリゴン数を96にし・・・

目を作成したいので、[TAB]キーでサブディビジョン設定としてから対象設定で頂点転宅して・・・

ベベルを2度実行して押し込みます。

ここで目頭の部分を調整しようとしても・・・

上手くいきません。

[TAB]キーでサブディビジョン設定をOFFにすると目頭部分がくっ付いていることが解ります。ちなみに上の様にポリゴンが抜けて表示されることがありますが、コレは多分バグでしょう。


アウトライン表示にすると理解できます。

こんな場合は[D]キーでポリゴン数を増やすことで問題は解決します。

[D]キーでポリゴン数を増やし手から調整した状態です。

ポリゴン数を増やしたくない場合は、[TAB]キーでサブディビジョン設定をOFFにしてからベベル処理することで目頭部分がくっ付いてしまうことを防ぐことが出来ます。

ベベルを2度実行して押し込みます。

押し込む長さによっては交差する場合があるので、対象処理の動きを逆にする必要があります。

コレでポリゴンを増やすこと無く調整することが出来ます。

modo 17.1v1 

TCDW8539 
昭和で絶滅していたと思っているので

営業車の側面にロゴタイプが入っていることがありますが・・・例えば「ユキダルマ」という会社で説明すると、反対側が「マルダキユ」の場合を見かけますが、昭和で絶滅していたと思っているので、見かけると驚いてしまいます。読めないよ〜。

日曜日, 9月 28, 2025

Let's start JavaScript 83 
HTMLで総画素数から4:3または16:9のピクセル数を計算

総画素数から4:3または16:9のピクセル数を計算します。今は1億2千万画素のデジタルカメラも出ていて驚きですが、その画素数がデジタルカメラの4:3または16:9の比率の時のピクセル異数が気になったアノで作って見ました。

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>アスペクト比別ピクセル計算</title>
<style>
body {
font-family: sans-serif;
padding: 20px;
display: flex;
flex-direction: column;
align-items: center;
background: black;
color: white;
}
input {
width: 200px;
padding: 5px;
}
</style>
</head>
<body>
<h3>総画素数から4:3または16:9のピクセル数を計算</h3>
<p>総画素数を入力(例:2073600 は 1920×1080):</p>
<span>
<input type="number" id="totalPixels" value="2073600">
&ensp;
<button onclick="calculateResolutions()">計算</button>
</span>
<h3>結果</h3>
<div id="results"></div>

<script>
function calculateResolutions() {
const total =
        parseInt(document.getElementById("totalPixels").value);
const output = document.getElementById("results");
if (isNaN(total) || total <= 0) {
output.innerHTML = "有効な正の数を入力してください。";
return;
}

function calcPixels(ratioW, ratioH) {
const aspect = ratioW / ratioH;
const height = Math.sqrt(total / aspect);
const width = aspect * height;
return {
w: Math.round(width),
h: Math.round(height)
};
}

const res4_3 = calcPixels(4, 3);
const res16_9 = calcPixels(16, 9);

output.innerHTML = `
<strong>アスペクト比 4:3</strong><br>
幅: ${res4_3.w} px, 高さ: ${res4_3.h} px<br><br>
<strong>アスペクト比 16:9</strong><br>
幅: ${res16_9.w} px, 高さ: ${res16_9.h} px
`;
}
</script>
</body>
</html>

実行直後の画面。

デフォルト設定の画素数を珪砂した結果。

1億2千万画素を珪砂した結果。

TCDW8538 
残念度は「怒り」より「悲しみ」に近いですね

何分間もCM見ないと求める情報が読めないサイトや、ニュースだと思ったらPR広告だったときの残念度は「怒り」より「悲しみ」に近いですね。

土曜日, 9月 27, 2025

JavaScriptでAI遊び 70 
Illustratorで指定サイズ内にランダムな矩形生成(CMYK版)

指定したサイズ内にランダムな矩形を敷き詰めます。CMYK版ですが、RGBモードでも機能します。ちなみにCMYK版ではBlackは未使用で処理しています。

#target illustrator

function randomCMYKColor() {
var cmyk = new CMYKColor();
cmyk.cyan = Math.random() * 100;
cmyk.magenta = Math.random() * 100;
cmyk.yellow = Math.random() * 100;
cmyk.black = Math.random() * 0;
return cmyk;
}

function main() {
if (app.documents.length == 0) {
alert("ドキュメントを開いてください。");
return;
}

var doc = app.activeDocument;

// サイズ入力
var w =
Number(prompt("埋める領域の幅(mm)", "150"));
var h =
Number(prompt("埋める領域の高さ(mm)", "150"));
if (isNaN(w) || isNaN(h) || w <= 0 || h <= 0) {
alert("正しい数値を入力してください。");
return;
}

var mmToPt = 2.834645;
var totalWidth = w * mmToPt;
var totalHeight = h * mmToPt;

var startX = 0;
var startY = 0;

while (startY < totalHeight - 0.1) {
var remainingHeight = totalHeight - startY;
var rowHeight =
Math.min(remainingHeight, (Math.random() *
remainingHeight * 0.5) + 10);
if (rowHeight > remainingHeight) rowHeight =
remainingHeight;

var currentX = 0;
while (currentX < totalWidth - 0.1) {
var remainingWidth = totalWidth - currentX;
var rectWidth =
Math.min(remainingWidth, (Math.random() *
remainingWidth * 0.5) + 10);
if (rectWidth > remainingWidth) rectWidth =
remainingWidth;

var rect = doc.pathItems.rectangle(
-startY, // Y位置(Illustratorでは上がマイナス)
currentX, // X位置
rectWidth, // 幅
rowHeight // 高さ
);
rect.filled = true;
rect.fillColor = randomCMYKColor();
rect.stroked = false;

currentX += rectWidth;
}

startY += rowHeight;
}
}

main();

実行すると敷き詰める矩形のサイズを指定します。

処理結果。

TCDW8537 
もう完全にオンラインでいいと思うんです

Baby Alien 151
泣きそうなどんぐり系(^o^)
国政調査書類が届いたので速攻でオンラインで対処。もう完全にオンラインでいいと思うんですけどね〜。

金曜日, 9月 26, 2025

modo〜blender互換考 09 
ブーリアン処理の差異とクオリティー

ブーリアン処理の差異とクオリティーを比較してみました。

modoで立方体を[D]キーを2度叩いて96ポリゴンの球体とし、立方体に食い込ませた状態をベースとしました。

[形状]>[ブーリアン]>[ブーリアン]にて[和]を実行

[和]の結果に対して[Tab]キーにてサブディビジョン設定で丸め込んだ状態

[形状]>[ブーリアン]>[ブーリアン]にて[積]を実行

[積]の結果に対して[Tab]キーにてサブディビジョン設定で丸め込んだ状態

[減算]>[ブーリアン]>[ブーリアン]にて[和]を実行

[減算]の結果に対して[Tab]キーにてサブディビジョン設定で丸め込んだ状態

[加算]>[ブーリアン]>[ブーリアン]にて[和]を実行

[加算]の結果に対して[Tab]キーにてサブディビジョン設定で丸め込んだ状態

Blenderで立方体を[サブディビジョンサーフェース]にて[ビューポートのレベル数]を2とshじて96ポリゴンの球体を確定し、立方体に食い込ませた状態をベースとしました。

Blenderで立方体を[モディファイアー]>[モディファイアーを追加]>[生成]>[ブーリアン]にて[差分]を実行した状態。

[加算]の結果に対して右クリックにて[スムースシェード]を実行した状態。

Blenderで立方体を[モディファイアー]>[モディファイアーを追加]>[生成]>[ブーリアン]にて[合成]を実行した状態。

[合成]の結果に対して右クリックにて[スムースシェード]を実行した状態。

Blenderで立方体を[モディファイアー]>[モディファイアーを追加]>[生成]>[ブーリアン]にて[交差]を実行した状態。

[交差]の結果に対して右クリックにて[スムースシェード]を実行した状態。

modoよりもBlenderの方が結果が綺麗でした。 もっともmodoはFusionモードの処理が綺麗なので基本的に問題ないですね。

modo 17.1v1
Blender 4.5.0

TCDW8536 
何だかんだで、やっぱり紙の方が頭に入りますね


教科書をデジタル化した国が次々と印刷した本に戻していますね。オールドタイプだからと感じていたのですが、何だかんだで、やっぱり紙の方が頭に入りますね。まさに「苦しい時の紙頼み〜」ですかね〜。