このページについて
 
このページは、mura's homeAutoCAD掲示板 で、当方の発言(書込み)がある以下の掲示板の内容です。
http://www.mura.sh/bbs/wwwbbs.cgi?print+200803/08030013.txt
 
タイトルおよび質問内容は上記より引用しています。
 
引用した質問内容は、バックカラーが

   

となっています。
 
当方の発言は、バックカラーが

   

となっています。
 
その他の著作権者の掲載許可を得ていない発言内容は削除(リンクを除く)しています
 
また、当方では、削除部分の正当な著作権保持者を判断出来ませんので、
ご連絡を頂いても、復活させることは出来ません。ご了承下さい。
 
 
掲示板の著作権について
 
掲示板への匿名の書き込みであっても、著作権(著作権法)で保護されています。
また、判例(確定した判決)もあります。
 
裁判所 判例検索システム

ホテルジャンキーズ事件

知的財産裁判例
知的財産裁判例
平成13(ワ)22066  著作権 民事訴訟
平成14年04月15日 東京地方裁判所
全文 控訴
付帯控訴
知的財産裁判例
知的財産裁判例
平成14(ネ)2887  著作権 民事訴訟
平成14年10月29日 東京高等裁判所
全文 確定

ただし、あらかじめ取り決めがある場合は、その取り決めが優先します
 ※たとえば、OKWave の掲示板 (利用規約/第10条(投稿内容の利用権))

 
 
 

LISPでフィレットの方向を指定できますか?

sa 2008/03/03(月) 14:25:02

LISPでフィレットコマンドを記述したいのですが、
フィレットの向き(曲がり方向??)を
指定することはできるのでしょうか。

下図のように、垂直線と水平線が引いてあります。

  |
  |
  |
−−−−−

画面上(AutoCADコマンド)でフィレットをかける時、
 (1)フィレットのボタンを選択
 (2)1つ目の線(垂直線)を選択
 (3)2つ目の線(水平線)を選択
とすると思います。(3)で、
水平線の右の方を選択 → 右側へ曲がったフィレット
水平線の左の方を選択 → 左側へ曲がったフィレット
となりますよね。

LISPではそれをどう指定したらよいでしょうか。
--------------
(command "_line" [垂直線開始座標] [垂直線終了座標])
(setq objV (entlast))

(command "_line" [水平線開始座標] [水平線終了座標])
(setq objH (entlast))

(command "_fillet" objV objH [フィレット半径])
--------------

としてLISPを動かしたところ、右側へ曲がってほしいのに、
左側へ曲がったフィレットができてしまいました。

何かよい方法はないでしょうか。
よろしくお願いいたします。

星鈴 2008/03/03(月) 15:00:21

著作権者の許可を得ていないため削除
 
 
 
 
 
 
 
 
 
 
 
 
 
 

kamegai [HOMEPAGE] 2008/03/03(月) 15:06:40

VBAの例ですが、LISPでも方法は同じはず?です。
http://tech.autodesk.jp/faq/user/result_dd.asp?QA_ID=1615

kamegai [HOMEPAGE] 2008/03/03(月) 15:15:24

上記は"Trim"の例ですが、objHに座標のリストを含めることで
可能ではないかと・・・
ただし当方LISPは組めませんので、出来なかったらすいませんです、、、

kamegai [HOMEPAGE] 2008/03/03(月) 16:00:47

>下図のように、垂直線と水平線が引いてあります。
であれは、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
 

sa 2008/03/03(月) 16:20:47

著作権者の許可を得ていないため削除
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

kamegai [HOMEPAGE] 2008/03/03(月) 16:34:52

すいません訂正です。
|2つのオブジェクトとも座標リストが必要でした
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
 

sa 2008/03/03(月) 17:05:37

著作権者の許可を得ていないため削除
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

kamegai [HOMEPAGE] 2008/03/03(月) 17:06:40

>trimコマンドでできるんですね。(fillet=trimなのは??ですが。)
違います、fillet=trimではありません。

(Autodeskのサンプルは、"trim"なので)アップしたサンプルVBAは、
"fillet"様に修正していますので、お間違えなきように。

kamegai [HOMEPAGE] 2008/03/03(月) 17:09:06

お、書き込みがかぶりました。
>「オブジェクト名」の代わりに、「オブジェクト名+座標(リスト形式)」
その通りです。

kamegai [HOMEPAGE] 2008/03/03(月) 19:50:21

何度もすいません。多少見栄えよく変更しました。

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
 

sa 2008/03/03(月) 20:25:47

著作権者の許可を得ていないため削除
 
 
 
 
 

sa 2008/03/10(月) 09:36:03

≪ 解決 ≫

著作権者の許可を得ていないため削除