Page 39 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼伸縮コマンドで直角に交わらない線の突出寸法について mori 15/07/07(火) 17:24 ┣Re(1):伸縮コマンドで直角に交わらない線の突出寸法について 96saka 15/07/07(火) 18:57 ┣Re(1):伸縮コマンドで直角に交わらない線の突出寸法について kojima 15/07/08(水) 14:54 ┗Re(1):伸縮コマンドで直角に交わらない線の突出寸法について cozy 15/07/09(木) 9:15 ┣Re(2):伸縮コマンドで直角に交わらない線の突出寸法について 住職 15/07/09(木) 19:35 ┗1本ずつの伸縮時と一括伸縮時で突出寸法が相違 kojima 15/07/09(木) 21:01 ─────────────────────────────────────── ■題名 : 伸縮コマンドで直角に交わらない線の突出寸法について ■名前 : mori ■日付 : 15/07/07(火) 17:24 -------------------------------------------------------------------------
初めての投稿となります。よろしくお願いいたします。 右ダブルクリックで基準線を指定し、突出寸法を100mmとした場合 伸縮線は基準線を複線で100mmスライドさせた分延長されますが、 これを伸縮線を基準線から100mm延長させた値にすることはできな いのでしょうか?直角で交わる場合は良いのですが、それ以外の 角度で交わる場合は突出し値が当方目的値と異なります。 具体的にいうと 基準線を0°で引き(真横方向)、伸縮したい線を45°で引いた (右斜め上方向)、突出し距離を100mmとして伸縮した場合 突出した線の端点の距離は基準線からの垂直距離は100mmですが 伸縮線自体は基準線から141.421mm突き出します。 これを100mmとしたいのですが、、、(基準線から70.71mmなので そうすれば良いのですが種類が多い為) |
▼moriさん: > 右ダブルクリックで基準線を指定し、突出寸法を100mmとした場合 > 伸縮線は基準線を複線で100mmスライドさせた分延長されますが、 > これを伸縮線を基準線から100mm延長させた値にすることはできな > いのでしょうか?直角で交わる場合は良いのですが、それ以外の > 角度で交わる場合は突出し値が当方目的値と異なります。 残念ながら右ダブルクリックの基準線先指定の操作では 直交している線も直交していない線も一律となる仕様のようですので mirrorさんが紹介されている、交点を指定する方法によるのが良いと思います。 ---ヘルプより抜粋--- !基準線までの伸縮では基準線が指定寸法分平行移動した位置に対して伸縮される。したがって、円と基準線と直交していない線は、その線と基準線との交点から端部までの距離が突出寸法とはならない。 |
Rubyの外部変形が使える環境下であれば、以下のbatファイルで可能です。 (batファイルにRubyスクリプトを記述するタイプの外部変形) 以下の文をコピペ後、全角スペースを半角スペースに一括置換して 適当なフォルダに保存してください。 ファイル名:一括伸縮.bat ↓この下から(この行はコピペしない) @REM 直線を基準線との交点まで一括伸縮(突出寸法指定) @echo off REM #jww REM #cd REM #zz REM #zw REM #c突出寸法の入力 無指定:0 /_/a REM #1ln基準線を指示してください REM #2ln伸縮線を指示してください REM #99# REM #e copy jwc_temp.txt temp.txt> nul ruby -x %~f0 temp.txt %1> jwc_temp.txt exit #!ruby -Ks t_sun=0 while ARGV.size>1 case argument=ARGV.pop when /\/a/ t_sun=argument[2..-1].to_f end end puts "hd" include Math #sen1の線上とsen2の延長線上の交点を返す def sen_sen_kouten(sen1,sen2) sen1x=sen1[2]-sen1[0] sen1y=sen1[3]-sen1[1] sen1xy=sqrt(sen1x**2+sen1y**2) sen1_arg=atan2(sen1y,sen1x) x1_1=sen1[0] x1_2=sen1[0]+sen1xy y1_1=sen1[1] y1_2=sen1[1] x=sen2[0]-sen1[0] y=sen2[1]-sen1[1] xy=sqrt(x**2+y**2) arg=atan2(y,x) henkaku=arg-sen1_arg x2_1=sen1[0]+xy*cos(henkaku) y2_1=sen1[1]+xy*sin(henkaku) x=sen2[2]-sen1[0] y=sen2[3]-sen1[1] xy=sqrt(x**2+y**2) arg=atan2(y,x) henkaku=arg-sen1_arg x2_2=sen1[0]+xy*cos(henkaku) y2_2=sen1[1]+xy*sin(henkaku) x=x2_2-x2_1 y=y2_2-y2_1 delta=y/x y=y1_1-y2_1 dx=y/delta kouten_x=x2_1+dx kouten_y=y1_1 if x1_1<kouten_x && x1_2>kouten_x x=kouten_x-x1_1 kouten_xt=x1_1+x*cos(sen1_arg) kouten_yt=y1_1+x*sin(sen1_arg) return [kouten_xt,kouten_yt] else return nil end end def ika3(x) a=(((x.to_f)*1000).to_i/1000.to_f) return a end hp=[];n=0 while ARGF.gets xy=$_.split if xy[0] =~ /^hq/ elsif xy[0]=~/^hp(\d+)ln/ hp<<[xy[1].to_f,xy[2].to_f] elsif xy[0]=~/^\d|^-/ n += 1 xy.collect!{|item|item.to_f} if n==1 print $_ ki_sen=xy else if sen_sen_kouten(ki_sen,xy) x,y=hp[n-1] l=hypot(y-xy[1],x-xy[0]) arg=atan2(y-xy[1],x-xy[0]) sen_arg=atan2(xy[3]-xy[1],xy[2]-xy[0]) l2=l*cos(arg-sen_arg) hp_x=xy[0]+l2*cos(sen_arg) hp_y=xy[1]+l2*sin(sen_arg) kouten_x,kouten_y=sen_sen_kouten(ki_sen,xy) arg1=atan2(hp_y-kouten_y,hp_x-kouten_x) if ika3(arg1)==ika3(sen_arg) x1=kouten_x-t_sun*cos(sen_arg) y1=kouten_y-t_sun*sin(sen_arg) x2,y2=xy[2],xy[3] else x1,y1=xy[0],xy[1] x2=kouten_x+t_sun*cos(sen_arg) y2=kouten_y+t_sun*sin(sen_arg) end printf(" %.11f %.11f %.11f %.11f\n",x1,y1,x2,y2) else print $_ end end else print $_ end end ↑この上まで(この行はコピペしない) Rubyは以下でダウンロードできます。 http://rubyinstaller.org/ |
いつも大変お世話になっております。 ▼moriさん: 伸縮コマンドから、突出寸法を記入(100mm)、45°線を選択(任意の位置左1クリック)後、 伸縮したい先端を右クリックで、45°右斜め上方向に(100mm)伸びました。 (突出寸法と、45°線の選択を逆に操作しても同じ結果です。) 外していたらすみません。 応用で操作していたら出来ました。 |
▼cozyさん: >伸縮コマンドから、突出寸法を記入(100mm)、45°線を選択(任意の位置左1クリック)後、 >伸縮したい先端を右クリックで、45°右斜め上方向に(100mm)伸びました。 >(突出寸法と、45°線の選択を逆に操作しても同じ結果です。) > >外していたらすみません。 >応用で操作していたら出来ました。 動作、確認しました。 端点右クリックは、お見事です。 |
1本ずつの伸縮時と一括伸縮時では、突出寸法に相違があるようです。 一括伸縮または、基準線右ダブルクリックの時は、基準線の仮想複線(突出寸法相当)まで伸縮されるようです。 |