Shade3D 公式

接線について


#1

Shade 3D Standard ver.16.1.0で接線を引きたいのですが、何かよい方法はございますか?
ご指導お願い致します。

http://help.shade3d.jp/ja/support/ShadeHelp18/
の説明書には「接線ハンドル」になっているので最近のは対応されているみたいですね。


#2

Shade15でもすでにオブジェクトスナップの「接線ハンドル」のチェックは存在するので
今更ですが16.1.0のバグか名称変更でしょうか?

Shade15のスナップ設定
17

なお「接線ハンドル」は下記の図のコントロールポイントの左右に出てる
線が「接線ハンドル」だと思うのでお望みのこととはちょっと違うきがします。
(ライン上のチェックが入ってればオブジェクトにスナップするんではなかろうかと)
02

お望みであろう、滑らかに円の曲線と線形状を補完する形での
接線機能はShade17以降のNURBSモデラーで対応しているようです。
(マニュアルの 「円の外接線」参照)
16以前ですと、標準機能では厳しそうです。どなたか3rdパーティの方がスクリプトを
作られていれば可能かもしれません。

別途2D-CADソフト、illustratorなどのベクトルベースのソフトをお持ちでしたら、
そちらで作成したものをeps,dxfなどでインポートすることができます。

ものすごい誤差のある近似でよければ線形状をコントロールポイントの選択状態にしておき
片方のエンドポイントを円に近づければそれっぽくは出来るのかなと。

他にベターな回答があることを期待しつつ。

15%E3%81%AE%E3%82%B3%E3%83%92%E3%82%9A%E3%83%BC


#3

ご回答ありがとうございます。
開いた線で接線ハンドルの練習をしたほうがよさそうですね:thinking:
それとスクリプトの練習をしてみたのですが、挫折しそうです:confounded:
拡大していくとあいませんでした:sob:

#正面図XYで作業
#円1を作成しておく
#円1外に任意の点Aを指定しておく
#Aから円1に引いた接線の交点をSとTとする

import math
A=xshade.scene().current_cursor_position #円1の中心点Pを調べる
P=xshade.scene().active_shape().center #ベクトルAP
dotA=(P[0]-A[0],P[1]-A[1], P[2]-A[2])
dotQP=(dotA[0]/2.0,dotA[1]/2.0,dotA[2]/2.0) #点QをAPの中点としてベクトルQP
AP=math.sqrt(dotA[0]**2.0+dotA[1]**2.0+dotA[2]**2.0) #APの長さを求める
r=xshade.scene().active_shape().radius[0] #円1の半径
Q=(A[0]+dotA[0]/2.0, A[1]+dotA[1]/2.0, A[2]+dotA[2]/2.0) #点Qの座標

kSQP=math.acos( (((AP/2.0)2.0)*2.0-r2.0)/(2.0*((AP/2.0)**2.0)))

dotQS=( dotQP[0]*math.cos(kSQP)-dotQP[1]*math.sin(kSQP),dotQP[0]*math.sin(kSQP)+dotQP[1]*math.cos(kSQP),0)
print AP/2.0,r,kSQP
S=( Q[0]+dotQS[0],Q[1]+dotQS[1],Q[2]+dotQS[2])
print S

xshade.scene().begin_creating()
xshade.scene().begin_line(None, 0)
xshade.scene().append_point(A, None, None, None, None)
xshade.scene().append_point(P, None, None, None, None)
xshade.scene().end_line()
xshade.scene().end_creating()

xshade.scene().create_disk(None, Q, AP/2.0, 2)

xshade.scene().begin_creating()
xshade.scene().begin_line(None, 0)
xshade.scene().append_point(A, None, None, None, None)
xshade.scene().append_point(S, None, None, None, None)
xshade.scene().end_line()
xshade.scene().end_creating()

#xshade.scene().begin_creating()
#xshade.scene().begin_line(None, 0)
#xshade.scene().append_point([-110, -20, 0], None, None, None, None)
#xshade.scene().append_point([8.98413, 241.425, 0], None, None, None, None)
#xshade.scene().append_point([170.711, 270.711, 0], [67.8224, 347.021, 0], [273.6, 194.4, 0], None, None)
#xshade.scene().end_line()
#xshade.scene().end_creating()

%E3%82%AD%E3%83%A3%E3%83%97%E3%83%81%E3%83%A3


#4

アナログに昔ながらの図学の作図法で試みましたが、交点がオブジェクトスナップされないせいなのか
若干ずれますねー。

やってることはスクリプトと同じだと思いますが。

1.円の中心点Pから任意の点Aを通る線分を引く。
2.引いた線の2等分線の垂線を引いて点Qを出す。
3.点Qから接点Sを結ぶ円を作る。
4.点Sと点Aを結ぶ。

【点Aの拡大図】