このページについて | ||||||||||||||||||||||||||
このページは、mura's home の AutoCAD掲示板 で、当方の発言(書込み)がある以下の掲示板の内容です。
タイトルおよび質問内容は上記より引用しています。 引用した質問内容は、バックカラーが となっています。 当方の発言は、バックカラーが となっています。 その他の著作権者の掲載許可を得ていない発言内容は削除(リンクを除く)しています。 また、当方では、削除部分の正当な著作権保持者を判断出来ませんので、 ご連絡を頂いても、復活させることは出来ません。ご了承下さい。
|
LISPでフィレットコマンドを記述したいのですが、
フィレットの向き(曲がり方向??)を
指定することはできるのでしょうか。
下図のように、垂直線と水平線が引いてあります。
|
|
|
−−−−−
画面上(AutoCADコマンド)でフィレットをかける時、
(1)フィレットのボタンを選択
(2)1つ目の線(垂直線)を選択
(3)2つ目の線(水平線)を選択
とすると思います。(3)で、
水平線の右の方を選択 → 右側へ曲がったフィレット
水平線の左の方を選択 → 左側へ曲がったフィレット
となりますよね。
LISPではそれをどう指定したらよいでしょうか。
--------------
(command
"_line" [垂直線開始座標] [垂直線終了座標])
(setq objV (entlast))
(command "_line"
[水平線開始座標] [水平線終了座標])
(setq objH (entlast))
(command "_fillet" objV
objH
[フィレット半径])
--------------
としてLISPを動かしたところ、右側へ曲がってほしいのに、
左側へ曲がったフィレットができてしまいました。
何かよい方法はないでしょうか。
よろしくお願いいたします。
著作権者の許可を得ていないため削除
VBAの例ですが、LISPでも方法は同じはず?です。
http://tech.autodesk.jp/faq/user/result_dd.asp?QA_ID=1615
上記は"Trim"の例ですが、objHに座標のリストを含めることで
可能ではないかと・・・
ただし当方LISPは組めませんので、出来なかったらすいませんです、、、
>下図のように、垂直線と水平線が引いてあります。
であれは、VBAの例ですが以下で出来ます。
#線も作成するのであれば、修正が必要ですが・・・
#残したい側の端点座標をリストにすれば良いかと。
Option Explicit 'VBAでオブジェクトをフィレット Public Sub FilletByVBA() Dim ptPick As Variant Dim boundObj As AcadEntity Dim trimedObj As AcadEntity Dim Radius As Double Dim returnReal As Double Dim strCommand As String On Error Resume Next returnReal = ThisDrawing.Utility.GetReal("フィレットの半径: ") If Err Or returnReal < 0 Then Exit Sub Else Radius = returnReal End If ThisDrawing.Utility.GetEntity boundObj, ptPick, "最初のオブジェクトを選択:" If Err Then Exit Sub End If ThisDrawing.Utility.GetEntity trimedObj, ptPick, "2つ目のオブジェクトを選択:" If Err Then Exit Sub End If strCommand = "(command " strCommand = strCommand & Chr(34) & "_fillet" & Chr(34) & " " strCommand = strCommand & Chr(34) & "R" & Chr(34) & " " strCommand = strCommand & Chr(34) & CStr(Radius) & Chr(34) & ") " & Chr(3) ThisDrawing.SendCommand (strCommand) strCommand = "(command " strCommand = strCommand & Chr(34) & "_fillet" & Chr(34) & " " strCommand = strCommand & "(handent " & Chr(34) & boundObj.Handle & Chr(34) & ") " strCommand = strCommand & Chr(34) & Chr(34) & " " strCommand = strCommand & "(list " & "(handent " & Chr(34) & trimedObj.Handle & Chr(34) & ") " strCommand = strCommand & "(list " & ptPick(0) & " " & ptPick(1) & " " & ptPick(2) & ")) " strCommand = strCommand & Chr(34) & Chr(34) & ") " & Chr(3) ThisDrawing.SendCommand (strCommand) End Sub |
著作権者の許可を得ていないため削除
すいません訂正です。
Option Explicit 'VBAでオブジェクトをフィレット Public Sub FilletByVBA() Dim ptPick As Variant Dim boundObj As AcadEntity Dim trimedObj As AcadEntity Dim Radius As Double Dim returnReal As Double Dim strCommand1 As String Dim strCommand2 As String On Error Resume Next returnReal = ThisDrawing.Utility.GetReal("フィレットの半径: ") If Err Or returnReal < 0 Then Exit Sub Else Radius = returnReal End If strCommand1 = "(command " strCommand1 = strCommand1 & Chr(34) & "_fillet" & Chr(34) & " " strCommand1 = strCommand1 & Chr(34) & "R" & Chr(34) & " " strCommand1 = strCommand1 & Chr(34) & CStr(Radius) & Chr(34) & ") " & Chr(3) ThisDrawing.Utility.GetEntity boundObj, ptPick, "最初のオブジェクトを選択:" If Err Then Exit Sub End If strCommand2 = "(command " strCommand2 = strCommand2 & Chr(34) & "_fillet" & Chr(34) & " " strCommand2 = strCommand2 & "(list " & "(handent " & Chr(34) & boundObj.Handle & Chr(34) & ") " strCommand2 = strCommand2 & "(list " & ptPick(0) & " " & ptPick(1) & " " & ptPick(2) & ")) " Erase ptPick ThisDrawing.Utility.GetEntity trimedObj, ptPick, "2つ目のオブジェクトを選択:" If Err Then Exit Sub End If strCommand2 = strCommand2 & Chr(34) & Chr(34) & " " strCommand2 = strCommand2 & "(list " & "(handent " & Chr(34) & trimedObj.Handle & Chr(34) & ") " strCommand2 = strCommand2 & "(list " & ptPick(0) & " " & ptPick(1) & " " & ptPick(2) & ")) " strCommand2 = strCommand2 & Chr(34) & Chr(34) & ") " & Chr(3) ThisDrawing.SendCommand (strCommand1) ThisDrawing.SendCommand (strCommand2) End Sub |
著作権者の許可を得ていないため削除
>trimコマンドでできるんですね。(fillet=trimなのは??ですが。)
違います、fillet=trimではありません。
(Autodeskのサンプルは、"trim"なので)アップしたサンプルVBAは、
"fillet"様に修正していますので、お間違えなきように。
お、書き込みがかぶりました。
>「オブジェクト名」の代わりに、「オブジェクト名+座標(リスト形式)」
その通りです。
何度もすいません。多少見栄えよく変更しました。
Option Explicit 'VBAでオブジェクトをフィレット Public Sub FilletByVBA() Dim filletObj As AcadEntity Dim Radius As Double Dim strCommand As String Dim ptPick As Variant On Error Resume Next Radius = ThisDrawing.Utility.GetReal("フィレットの半径: ") If Err Or Radius < 0 Then Exit Sub End If 'AutoLISP式作成(その1/半径設定) strCommand = "" strCommand = strCommand & "(command" strCommand = strCommand & " " & Chr(34) & "_fillet" & Chr(34) strCommand = strCommand & " " & Chr(34) & "R" & Chr(34) strCommand = strCommand & " " & Chr(34) & CStr(Radius) & Chr(34) strCommand = strCommand & ") " ' ThisDrawing.Utility.GetEntity filletObj, ptPick, "最初のオブジェクトを選択: " If Err Then Exit Sub End If 'AutoLISP式作成(その2−1/コマンド+最初のオブジェクトリスト) strCommand = strCommand & "(command" strCommand = strCommand & " " & Chr(34) & "_fillet" & Chr(34) strCommand = strCommand & " " & "(list " & "(handent " & Chr(34) & filletObj.Handle & Chr(34) & ")" strCommand = strCommand & " " & "(list " & ptPick(0) & " " & ptPick(1) & " " & ptPick(2) & "))" ' Erase ptPick ThisDrawing.Utility.GetEntity filletObj, ptPick, "2つ目のオブジェクトを選択: " If Err Then Exit Sub End If 'AutoLISP式作成(その2−2/2つ目のオブジェクトリスト) strCommand = strCommand & " " & "(list " & "(handent " & Chr(34) & filletObj.Handle & Chr(34) & ")" strCommand = strCommand & " " & "(list " & ptPick(0) & " " & ptPick(1) & " " & ptPick(2) & "))" strCommand = strCommand & ") " ' ThisDrawing.SendCommand (strCommand) 'AutoLISP式送信 ThisDrawing.SendCommand (Chr(3)) 'ESC送信 End Sub |
著作権者の許可を得ていないため削除
著作権者の許可を得ていないため削除