CyberChaos(さいばかおす)

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

Autolispくりぬきプログラム

2023-05-28 08:07:07 | Autocad
User
任意の大きさの立方体の中心から任意の大きさの円柱をくり貫くAutolispコードを書いて

ChatGPT
以下は、AutoLISPで立方体の中心から円柱をくり抜くコードの例です。立方体と円柱のサイズ、位置などは、実際の要件に合わせて変更してください。


(defun c:cutCylinder ()
(setq pt1 (getpoint " Enter the center point of the cube: "))
(setq length (getreal " Enter the length of the cube: "))
(setq width (getreal " Enter the width of the cube: "))
(setq height (getreal " Enter the height of the cube: "))
(setq pt2 (getpoint " Enter the center point of the cylinder: "))
(setq radius (getreal " Enter the radius of the cylinder: "))
(setq height-cyl (getreal " Enter the height of the cylinder: "))
(command "._box" pt1 (polar pt1 0 (* 0.5 length)) (polar pt1 90 (* 0.5 width)) (* 0.5 height))
(setq pt3 (list (car pt2) (cadr pt2) (+ (caddr pt2) (/ height-cyl 2))))
(command "._cylinder" pt2 pt3 radius height-cyl)
(command "._subtract" "L" "" "P")
(princ)
)


上記のコードでは、c:cutCylinder関数を定義しています。実行すると、ユーザーに対していくつかのパラメータを入力するように要求します。

pt1:立方体の中心点を指定します。
length:立方体の長さを指定します。
width:立方体の幅を指定します。
height:立方体の高さを指定します。
pt2:円柱の中心点を指定します。
radius:円柱の半径を指定します。
height-cyl:円柱の高さを指定します。
次に、._boxコマンドを使用して立方体を作成し、._cylinderコマンドを使用して円柱を作成します。最後に、._subtractコマンドを使用して立方体から円柱をくり抜きます。

注意事項:

このコードはAutoCADで使用することを想定しています。
このコードはテストされておらず、すべてのシナリオで正常に動作することを保証するものではありません。要件に応じて適宜変更や調整を行ってください。
AutoLISPはAutoCADの独自のプログラミング言語であり、その他の環境では動作しない可能性があります。



【具体例】
User
中心の座標が(x,y,z)=(0,0,0)で一辺が200の大きさの立方体を描き、その中心からZ軸に平行で直径100の立方体をくり貫くAutolispコードを書いて

ChatGPT
以下は、AutoLISPで中心座標が (x, y, z) = (0, 0, 0) で一辺が 200 の立方体を描き、その中心から Z 軸に平行で直径 100 の立方体をくり抜くコードの例です。


(defun c:cutCube ()
(setq cubeCenter (list 0.0 0.0 0.0))
(setq cubeSize 200.0)
(setq cutDiameter 100.0)
(setq cutHeight cubeSize)
(setq cubeMinPt (mapcar '- cubeCenter (list (/ cubeSize 2.0) (/ cubeSize 2.0) (/ cubeSize 2.0))))
(setq cubeMaxPt (mapcar '+ cubeCenter (list (/ cubeSize 2.0) (/ cubeSize 2.0) (/ cubeSize 2.0))))
(command "._box" cubeMinPt cubeMaxPt)
(setq cutMinPt (mapcar '- cubeCenter (list (/ cutDiameter 2.0) (/ cutDiameter 2.0) 0.0)))
(setq cutMaxPt (mapcar '+ cubeCenter (list (/ cutDiameter 2.0) (/ cutDiameter 2.0) cutHeight)))
(command "._box" cutMinPt cutMaxPt)
(command "._subtract" "L" "" "P")
(princ)
)

上記のコードでは、c:cutCube 関数を定義しています。実行すると、立方体の中心座標 (x, y, z)、立方体の一辺の長さ cubeSize、くり抜く立方体の直径 cutDiameter、くり抜く立方体の高さ cutHeight を指定するようにユーザーに求めます。

次に、._box コマンドを使用して立方体を作成し、._subtract コマンドを使用してくり抜く立方体を適用します。

注意事項:

このコードは AutoCAD の AutoLISP で使用することを想定しています。
このコードはテストされておらず、すべてのシナリオで正常に動作することを保証するものではありません。要件に応じて適宜変更や調整を行ってください。
AutoLISP は AutoCAD の独自のプログラミング言語であり、その他の環境では動作しない可能性があります。

マジか?
押し出しくりぬき系は難しい操作の一つなんだが、これが自動化できればほとんどの操作の自動化の目処が立つ。



最新の画像もっと見る