CyberChaos(さいばかおす)

プログラミング言語、トランスパイラ、RPA、ChatGPT、データマイニング、リバースエンジニアリングのための忘備録

Autolisp言語で簡易CADチャットボットのプログラムを書いてもらった。

2023-05-19 19:30:25 | Autocad

Pythonで簡易CADチャットボットを作った - CyberChaos(さいばかおす) (goo.ne.jp)

でChatGPTにPythonで書いてもらったCADチャットボットプログラムを

今度はAutolisp言語で書き換えてもらった。

さて結果はどうなることやら。以下がそのコード。

(defun create-line ()
(setq start-x (atoi (vl-string->list (getstring "始点のX座標を入力してください。"))))
(setq start-y (atoi (vl-string->list (getstring "始点のY座標を入力してください。"))))
(setq end-x (atoi (vl-string->list (getstring "終点のX座標を入力してください。"))))
(setq end-y (atoi (vl-string->list (getstring "終点のY座標を入力してください。"))))

(command "_line" (list start-x start-y) (list end-x end-y))
)

(defun create-circle ()
(setq center-x (atoi (vl-string->list (getstring "中心のX座標を入力してください。"))))
(setq center-y (atoi (vl-string->list (getstring "中心のY座標を入力してください。"))))
(setq radius (atoi (vl-string->list (getstring "半径を入力してください。"))))

(setq x1 (- center-x radius))
(setq y1 (- center-y radius))
(setq x2 (+ center-x radius))
(setq y2 (+ center-y radius))

(command "_circle" (list center-x center-y) radius)
)

(defun process-user-input ()
(setq user-input (getstring "何をしましょうか?"))
(setq has-line (vl-string-search "直線" user-input))
(setq has-circle (vl-string-search "円" user-input))

(if has-line
(create-line)
(if has-circle
(create-circle)
(alert "そのような操作はできません。"))
)
)

(defun cad ()
(setq root (vlax-get-or-create-object "AutoCAD.Application"))
(setq doc (vla-get-ActiveDocument root))
(setq model-space (vla-get-ModelSpace doc))

(setq canvas (vla-AddCanvas model-space (vlax-3d-point '(0 0 0)) 400 400))

(setq button (vla-AddButton canvas "操作を入力" '(0 0 0) "process-user-input"))
(vla-put_Enabled button :vlax-true)

(vla-ShowBalloon button "CAD" "CAD" "操作を入力してください。" 1)
)

(defun c:cad ()
(cad)
(princ)
)

上記のコードは、AutoCADのカスタムコマンドとして実行することを想定しています。c:cadというコマンドを呼び出すことで、CAD環境が起動し、操作を受け付けます。

このコードをAutoCADのLISPエディタに貼り付け、保存してからc:cadというコマンドを実行すると、CADアプリケーションが起動し、指定された操作を行うことができます。

ご注意ください。

P.S.

全く動かんorz

やはり苦楽したAutocad2020ではダメなのか?

禿臆で更新できるAutocad2023とかを扱ってる輩から買い直すしかないのか?


Pythonで簡易CADチャットボットを作った

2023-05-19 17:00:40 | python

VBA版をPython版にしてみた。

ChatGPTにVBA版のソースコードをPythonに変換してくれと頼んだら一発で成功!

Bardの登場がChatGPTに大きな影響を与えているのが実感できる。

使い物にならなかったのが全く別物といってよい程の改善が行われたようだ。

import tkinter as tk
from tkinter import messagebox

def create_line():
    start_x = int(tk.simpledialog.askstring("直線", "始点のX座標を入力してください。"))
    start_y = int(tk.simpledialog.askstring("直線", "始点のY座標を入力してください。"))
    end_x = int(tk.simpledialog.askstring("直線", "終点のX座標を入力してください。"))
    end_y = int(tk.simpledialog.askstring("直線", "終点のY座標を入力してください。"))

    canvas.create_line(start_x, start_y, end_x, end_y, width=2)

def create_circle():
    center_x = int(tk.simpledialog.askstring("円", "中心のX座標を入力してください。"))
    center_y = int(tk.simpledialog.askstring("円", "中心のY座標を入力してください。"))
    radius = int(tk.simpledialog.askstring("円", "半径を入力してください。"))

    x1 = center_x - radius
    y1 = center_y - radius
    x2 = center_x + radius
    y2 = center_y + radius

    canvas.create_oval(x1, y1, x2, y2, width=2, outline="red")

def process_user_input():
    user_input = tk.simpledialog.askstring("CAD", "何をしましょうか?")
    has_line = "直線" in user_input
    has_circle = "円" in user_input

    if has_line:
        create_line()
    elif has_circle:
        create_circle()
    else:
        tk.messagebox.showerror("エラー", "そのような操作はできません。")

root = tk.Tk()
root.title("CAD")

canvas = tk.Canvas(root, width=400, height=400)
canvas.pack()

button = tk.Button(root, text="操作を入力", command=process_user_input)
button.pack()

root.mainloop()

もちろんこれは簡易プロトタイプである。

こんなもん現場では全然実用にならない。もっと複雑な操作が要求される。

次の段階はAutocadにこの機能を組み込むことが目標である。

それが成功したら、どんどんいろんな操作・機能を追加していこうと思っている。

Autolispのソースコード内でPythonを呼び出して組み込み、自動で描画できれば開発が早まるだろう。

もしそれができなければ、Autolispで全て書かなければならない。

はたしてAutolisp言語にはチャットボットを作るための機能や関数はあるのだろうか?

Lisp言語の本では人工知能について言及があったからAutolispでも可能なのではないかと考えているが・・・


任意のソースコードをQRコード化するPythonアプリ

2023-05-19 14:46:45 | python

import tkinter as tk
import qrcode

def generate_qrcode():
python_code = code_entry.get("1.0", tk.END)

qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4,
)
qr.add_data(python_code)
qr.make(fit=True)

filename = filename_entry.get()
image = qr.make_image(fill_color="black", back_color="white")
image.save(filename)

# TKinterウィンドウの作成
window = tk.Tk()
window.title("QR Code Generator")

# テキスト入力フォーム
code_label = tk.Label(window, text="Python Code:")
code_label.pack()
code_entry = tk.Text(window, height=10, width=50)
code_entry.pack()

# ファイル名入力フォーム
filename_label = tk.Label(window, text="Filename:")
filename_label.pack()
filename_entry = tk.Entry(window)
filename_entry.pack()

# 保存ボタン
generate_button = tk.Button(window, text="Generate and Save QR Code", command=generate_qrcode)
generate_button.pack()

# TKinterウィンドウの実行
window.mainloop()

↑このQRコードを読み取るとwww




任意のソースコードをQRコード化するPythonプログラム

2023-05-18 03:11:51 | python
任意のPythonコードをQRコード化するPythonプログラムを書いて

import qrcode

def generate_qrcode(data, filename):
qr = qrcode.QRCode(
version=1,
error_correction=qrcode.constants.ERROR_CORRECT_H,
box_size=10,
border=4,
)
qr.add_data(data)
qr.make(fit=True)

image = qr.make_image(fill_color="black", back_color="white")
image.save(filename)

# QRコード化したいPythonコード
python_code = '''
import math

def calculate_area(radius):
return math.pi * radius ** 2

r = float(input("Enter the radius: "))
area = calculate_area(r)
print("The area of the circle is:", area)
'''

# QRコードを生成して保存
generate_qrcode(python_code, 'python_code_qr.png')




楽譜生成AI「Piano Transcription」

2023-05-15 20:56:42 | 音楽・楽器
 
ピアノの耳コピはもうAIに任せられる。チート級解析フリーソフトByteDance「Piano Transcription」使い方解説 | ロゴスとレンマのI/O

ピアノの耳コピはもうAIに任せられる。チート級解析フリーソフトByteDance「Piano Transcription」使い方解説 | ロゴスとレンマのI/O

はじめに 対象読者・想定読者 楽譜が欲しいピアノ曲があるが、楽譜が売ってない(CDなどの音源はある) 楽曲解析したいピアノ曲があるが、1から耳コピはしんどい ソルフェージ...

ロゴスとレンマのI/O

楽譜生成AIがついに登場した!!!
ただしピアノだけ。
 
それにしてもピアノだけでも十分凄すぎる。
 
今まで有料の耳コピソフトを試してきたが、まともなソフトは全くなかった。
 
ミシェル・ルグランと羽田健太郎が共演したシェルブールの雨傘とか楽譜化してみたい!
 
参考までに。
https://youtu.be/5U-WL0QvKCg
 
P.S.
↑この曲をPiano Transcriptionで楽譜化してみたら・・・www
エラいことにwww
 
グチャグチャでわけわからんwww
 
使い物にならんwww
 
こんなの読めるか、ボケ!
 
誇大広告すんな!ボケ!
 

VBAで簡易CADチャットボットを作った

2023-05-13 20:12:31 | VBA

https://blog.goo.ne.jp/nichikon2/e/bc53b832fb46b2466196b41cc1cdf2ff

の記事で作ったプログラムをちょっと改造してみた。

ユーザーが入力した文字の中に「円」または「直線」が含まれているかどうか判定し、

もし含まれていた場合のみ直線または円を描くプログラムを実行するようにした。

ちなみにbardでは何回も修正するように依頼したのだが、

全く直らないどころか同じ返答を繰り返すばかりだったので、

ChatGPTに頼んでみたら、一発で直った。

それが次のコードである。

Sub CAD()
Dim userInput As String
Dim hasLine As Boolean
Dim hasCircle As Boolean
userInput = InputBox("何をしましょうか?")
hasLine = InStr(userInput, "直線") > 0
hasCircle = InStr(userInput, "円") > 0

If hasLine Then
    MsgBox "始点と終点の座標を指定してください。"
    
    Dim StartX As Integer
    Dim StartY As Integer
    Dim EndX As Integer
    Dim EndY As Integer
    
    StartX = InputBox("始点のX座標を入力してください。")
    StartY = InputBox("始点のY座標を入力してください。")
    EndX = InputBox("終点のX座標を入力してください。")
    EndY = InputBox("終点のY座標を入力してください。")
    
    With ActiveSheet.Shapes.AddLine(StartX, StartY, EndX, EndY)
        .Line.Weight = 2 ' Set the line thickness to 2 points
    End With
ElseIf hasCircle Then
    MsgBox "中心の座標と半径を入力してください。"
    
    Dim centerX As Variant
    Dim centerY As Variant
    Dim radius As Variant
    Dim drawingSheet As Worksheet
    Dim newCircle As Shape
    
    Set drawingSheet = ActiveSheet
    centerX = Application.InputBox("Enter the x-coordinate of the center of the circle", "Center X", Type:=1)
    centerY = Application.InputBox("Enter the y-coordinate of the center of the circle", "Center Y", Type:=1)
    radius = Application.InputBox("Enter the radius of the circle", "Radius", Type:=1)
    Set newCircle = drawingSheet.Shapes.AddShape(msoShapeOval, _
     -radius, centerY - radius, radius * 2, radius * 2)
    
    With newCircle.Line
        .Weight = 2 ' Set the line thickness to 2 points
        .DashStyle = msoLineSolid ' Set the line style to solid
        .ForeColor.RGB = RGB(255, 0, 0) ' Set the line color to red
    End With
    newCircle.Fill.Visible = msoFalse ' Set the fill to transparent
Else
    MsgBox "そのような操作はできません。"
End If
End Sub

てなわけで今回はChatGPTの勝ち。


autolispでpythonを呼び出して自動でautocadでモデリング

2023-05-13 12:36:45 | Autocad
autolispでpythonを呼び出して自動でautocadでモデリングをしたい

はい、Autolispを使用してPythonを呼び出してAutoCADで自動モデリングを行うことができます。AutolispはAutoCADで使用できるプログラミング言語であり、Pythonは強力で用途の広いプログラミング言語です。 Autolispを使用してPythonを呼び出すと、AutoCADで複雑なモデリングタスクを自動化できます。

Autolispを使用してPythonを呼び出すには、Autolisp関数acedEval()を使用する必要があります。acedEval()関数は、Pythonコード文字列を実行するために使用されます。たとえば、次のAutolispコードは、Pythonコード文字列print("Hello, world!")を実行します。

(acedEval "print('Hello, world!')")

詳細
Autolispを使用してPython関数を呼び出すこともできます。たとえば、次のAutolispコードは、Python関数math.sqrt()を呼び出して2の平方根を計算します。

(acedEval "(math.sqrt 2)")

詳細
Autolispを使用してPythonライブラリをロードすることもできます。たとえば、次のAutolispコードは、Pythonライブラリnumpyをロードします。

(acedEval "import numpy")

詳細
Autolispを使用してPythonオブジェクトを作成することもできます。たとえば、次のAutolispコードは、Pythonオブジェクトnumpy.array([1, 2, 3])を作成します。

(acedEval "arr = numpy.array([1, 2, 3])")

詳細
Autolispを使用してPythonオブジェクトを操作することもできます。たとえば、次のAutolispコードは、Pythonオブジェクトarrの要素の合計を計算します。

(acedEval "print(arr.sum())")

詳細
Autolispを使用してPythonオブジェクトを保存することもできます。たとえば、次のAutolispコードは、Pythonオブジェクトarrをファイルoutput.csvに保存します。

(acedEval "arr.tofile('output.csv')")

詳細
Autolispを使用してPythonオブジェクトを読み込むこともできます。たとえば、次のAutolispコードは、ファイルinput.csvからPythonオブジェクトarrを読み込みます。

(acedEval "arr = numpy.loadtxt('input.csv', delimiter=',')")

詳細
Autolispを使用してPythonオブジェクトを表示することもできます。たとえば、次のAutolispコードは、Pythonオブジェクトarrを図面に表示します。

(acedEval "arr.plot()")

詳細
これらは、Autolispを使用してPythonを呼び出してAutoCADで自動モデリングを行う方法のほんの一例です。Autolispを使用してPythonを呼び出す方法は他にもたくさんあります。Autolispを使用してPythonを呼び出す具体的な方法は、実行しようとしている特定のタスクによって異なります。

…だとよ。マジか?
これが本当だったらChatGPT死亡確定だぞwww
めちゃくちゃ応答が早いし。


CATIAのマクロまたはVBA、VBSでPythonを呼び出す方法は?

2023-05-13 12:28:48 | CATIA
CATIAのマクロまたはVBA、VBSでPythonを呼び出す方法は?

CATIAのマクロまたはVBA、VBSでPythonを呼び出すには、次の手順に従います。

Pythonをインストールします。
Pythonインタープリターのパスを環境変数に追加します。
CATIAマクロまたはVBA、VBSコードで、次のコマンドを使用してPythonインタープリターを起動します。

CreateObject("WScript.Shell").Run "python.exe"
コードは慎重に使用してください。詳細
Pythonインタープリターが起動したら、次のコマンドを使用してPythonコードを実行できます。

python your_python_code.py

詳細
たとえば、次のコードは「hello_world.py」という名前のPythonファイルを作成し、そのファイルを実行します。

CreateObject("WScript.Shell").Run "python.exe" "hello_world.py"

詳細
「hello_world.py」ファイルの内容は次のとおりです。

print("Hello, world!")

詳細
これにより、次の出力が表示されます。

Hello, world!

詳細
ここにメッセージを入力してください
Bard で生成される情報は不正確または不適切な場合がありますが、Google の見解を述べるものではありません。


MQL4でPythonを呼び出す方法

2023-05-13 12:23:31 | FX

MQL4でPythonを呼び出す方法

MQL4 から Python を呼び出す方法はいくつかあります。1 つの方法は、Python プログラムをコンパイルして DLL ファイルにしてから、MQL4 から DLL ファイルをロードすることです。もう 1 つの方法は、Python スクリプトを実行するサーバーを使用して、MQL4 から Python スクリプトを呼び出すことです。

DLL ファイルを使用して MQL4 から Python を呼び出すには、次の手順に従います。

Python プログラムをコンパイルして DLL ファイルにします。
DLL ファイルを MQL4 のインストールディレクトリにコピーします。
MQL4 のソースファイルで、次の行を使用して DLL ファイルをロードします。


#include

HMODULE hModule = LoadLibrary("python.dll");

if (hModule == NULL) {
// エラー処理
}


DLL 内の関数を呼び出すには、次の構文を使用します。

FARPROC pFunc = GetProcAddress(hModule, "FunctionName");

if (pFunc == NULL) {
// エラー処理
}

int result = (int)pFunc();

サーバーを使用して MQL4 から Python スクリプトを呼び出すには、次の手順に従います。

Python スクリプトを実行するサーバーをセットアップします。
MQL4 のソースファイルで、次の行を使用してサーバーに接続します。


#include
#include

using namespace std;

int main() {
// サーバーに接続
string host = "localhost";
int port = 5000;

Socket socket(host, port);

if (!socket.isConnected()) {
// エラー処理
}

// Python スクリプトを実行する
string command = "python myscript.py";

socket.write(command.c_str());

// 応答を待つ
char buffer[1024];

int bytesReceived = socket.read(buffer, 1024);

if (bytesReceived == -1) {
// エラー処理
}

// 応答を出力する
cout <

// サーバーを切断する
socket.close();

return 0;
}


VBAからPythonを呼び出す方法をbardに訊いてみた

2023-05-13 10:44:31 | VBA
VBAのソースコード内でPython言語を呼び出す方法は?

VBA は Microsoft Office アプリケーション用に開発されたマクロ言語です。 Python は、データ分析、機械学習、Web 開発など、さまざまなタスクに使用できる汎用プログラミング言語です。 VBA から Python を呼び出すには、xlwings ライブラリを使用できます。 xlwings は、VBA から Python コードを簡単に実行できるようにする COM アドインです。

xlwings を使用するには、まずライブラリをインストールする必要があります。 Windows の場合は、Microsoft Visual Studio からインストールできます。 macOS の場合は、Homebrew からインストールできます。

ライブラリをインストールしたら、VBA プロジェクトで参照する必要があります。これを行うには、プロジェクトの参照設定ウィンドウを開き、xlwings.xlam ライブラリを選択します。

ライブラリを参照したら、VBA コードで Python コードを呼び出すことができます。これを行うには、RunPython 関数を使用します。RunPython 関数には、呼び出す Python コードの文字列を引数として渡します。

たとえば、次の VBA コードは、Python の組み込みの print() 関数を呼び出します。

Sub CallPython()

Dim result As String
result = RunPython("print('Hello, world!')")

MsgBox result

End Sub

このコードを実行すると、次のメッセージボックスが表示されます。

Hello, world!

xlwings は、VBA から Python を呼び出すための強力なツールです。データ分析、機械学習、Web 開発など、さまざまなタスクに使用できます。

なるほど。んじゃやってみるわ。








VBAでチャットボットを作ってみた

2023-05-12 21:17:06 | VBA

最近発表されたgoogle のAIチャットで質問をしてみた。

VBAでチャットボットを作りたいと。

早速ソースコードの例が生成されたが、

Bard AI 「What would you like to talk about?」

俺様「hello」の場合、Bard AI「Hello there!」

俺様「goodbye」の場合、Bard AI「Goodbye!」

俺様「上記以外」の場合、Bard AI「I don't understand. Please try again.」

というショボいものだった。

あまりにもショボいので改造してみた。

Sub ChatBot()
Dim userInput As String
userInput = InputBox("何をしましょうか?")
Select Case userInput
Case "直線"
MsgBox "始点と終点の座標を指定してください。"

Dim StartX As Integer
Dim StartY As Integer
Dim EndX As Integer
Dim EndY As Integer
StartX = InputBox("始点のX座標を入力してください。")
StartY = InputBox("始点のY座標を入力してください。")
EndX = InputBox("終点のX座標を入力してください。")
EndY = InputBox("終点のY座標を入力してください。")

With ActiveSheet.Shapes.AddLine(StartX, StartY, EndX, EndY)
.Line.Weight = 2 ' Set the line thickness to 2 points
End With
Case "円"
MsgBox "中心の座標と半径を入力してください。"

Dim centerX As Variant
Dim centerY As Variant
Dim radius As Variant
Dim drawingSheet As Worksheet
Dim newCircle As Shape
Set drawingSheet = ActiveSheet
centerX = Application.InputBox("Enter the x-coordinate of the center of the circle", "Center X", Type:=1)
centerY = Application.InputBox("Enter the y-coordinate of the center of the circle", "Center Y", Type:=1)
radius = Application.InputBox("Enter the radius of the circle", "Radius", Type:=1)
Set newCircle = drawingSheet.Shapes.AddShape(msoShapeOval, _
-radius, centerY - radius, radius * 2, radius * 2)
With newCircle.Line
.Weight = 2 ' Set the line thickness to 2 points
.DashStyle = msoLineSolid ' Set the line style to solid
.ForeColor.RGB = RGB(255, 0, 0) ' Set the line color to red
End With
newCircle.Fill.Visible = msoFalse ' Set the fill to transparent
Case Else
MsgBox "そのような操作はできません。"
End Select
End Sub

結果はバッチリ!

次はセレクトボックスを表示させ、やりたい操作を選ばせて、数字を入力する形式にしてみたい。


プロシージャとは何ぞや?

2023-05-07 10:48:19 | VBA
Wikipediaより引用。
プロシージャ (procedure)とは、プログラミングにおいて複数の処理を一つにまとめたものをいう。手続きとするのが定訳である。一連の処理を意味を持った一まとまりにすることで、再利用性が高まり、プログラム中に繰り返して現れる処理を1ヶ所で記述でき、プログラムの保守、管理を容易にする。

繰り返し利用されることから、ルーチンとも言う。呼び出し関係は通常階層構造をなし、その最上位にある、プログラム全体のエントリーポイントを含むルーチンをメインルーチン、呼び出されるものをサブルーチンと言う。また、関数と呼ばれることもある(通常、数学における関数とは違ったものであるので、注意が必要である)。

プログラミング言語により、プロシージャのような構文の分類や呼称はさまざまである。詳細はサブルーチンの記事を参照のこと。