FC2ブログ
07/25.Sat   外部変形:円外消去 
07:59
本家 掲示板に 図面の一部を丸く切り取りたい(円外消去)


確かに 部分詳細の抜き出しとかで見ますね。
 スレッドを全部読んで見ました。
 最後のrubyのソースが有りました。

sugiさんに感謝し利用させて頂きます。

以下をテキストでコピーして 適当に名前をつける。
 拡張子は .bat

@REM jww 外部変形
@REM 円外消去.BAT
@REM ruby 1.8.1 以降に対応
@REM 文字列を処理
@REM SJIS で保存してください
@echo off
REM #jww
REM #cd
REM #ht10
REM #ht20
REM #ht40
REM #zz
goto %1
REM #hm【円外消去】 |円外消去|等倍複写|2倍複写|N倍複写|回転複写|基準指示|
REM #:1
REM #h2
REM #hc 【円外消去】処理範囲を指定してください
REM #g1
REM #bz
REM #9ci 【円外消去】円を指示
REM #e
REM #:2
REM #h2
REM #hc 【等倍複写】処理範囲を指定してください
REM #g1
REM #bz
REM #9ci 【等倍複写】円を指示
REM #0%d 【等倍複写】複写先指示
REM #e
REM #:3
REM #h2
REM #hc 【2倍複写】処理範囲を指定してください
REM #g1
REM #bz
REM #9ci 【2倍複写】円を指示
REM #0%d 【2倍複写】複写先指示
REM #e
REM #:4
REM #h2
REM #hc 【N倍複写】処理範囲を指定してください
REM #g1
REM #bz
REM #9ci 【N倍複写】円を指示
REM #0%d 【N倍複写】複写先指示
REM #c 【N倍複写】倍率指定(無指定:1) : /_N
REM #e
REM #:5
REM #h2
REM #hc 【回転複写】処理範囲を指定してください
REM #g1
REM #bz
REM #9ci 【回転複写】円を指示
REM #0%d 【回転複写】複写先指示
REM #c 【回転複写】倍率指定(無指定:1) : /_N
REM #e
REM #:6
REM #h2
REM #hc 【基準指示】処理範囲を指定してください
REM #g1
REM #bz
REM #9ci 【基準指示】円を指示
REM #8ln 【基準指示】基準線を指示
REM #0%d 【基準指示】複写先指示
REM #c 【基準指示】倍率指定(無指定:1) : /_N
REM #e

:1
:2
:4
:5
:6
copy jwc_temp.txt jwc_bak.txt
rubyw -Ks -x %~f0 %1 %2
GOTO END
:3
copy jwc_temp.txt jwc_bak.txt
rubyw -Ks -x %~f0 %1 N2
GOTO END

【円外消去】指定した円の外側を消去
【等倍複写】指定した円の外側を消去して複写
【2倍複写】倍率2倍
【N倍複写】倍率N倍
【回転複写】意味はないけどランダムに回転させてみる
【基準指示】回転複写で基準線が水平になるように回転

#! ruby
# encoding: SJIS

# 座標値を取り込む際に円の中心からの相対座標に直す
# 座標値を出力する際
# 【円外消去】では座標を元に戻す
# 他は行列を使って倍率をかけたり回転させたり

include Math
require 'matrix'

$stdout=open("jwc_temp.txt","w")
$stderr=open("tmp_err.txt","w")

def kouten(a,c,b,d) #外積を使って二線(ab,cd)の交点を求める
cp1=(d-b)[0]*(b-a)[1]-(d-b)[1]*(b-a)[0]
cp2=(d-b)[0]*(c-b)[1]-(d-b)[1]*(c-b)[0]
k=cp1/(cp1+cp2)
p=(c-a)*k+a
end

class Vector #ruby 1.8.1対策
def dot(a)
self[0]*a[0]+self[1]*a[1]
end
def -@
collect {|e| -e }
end
def /(x)
els = @elements.collect{|e| e / x}
self.class.elements(els, false)
end
end
class Array
def each_slice(num)
arr=[]
self.each_with_index{|e,i|
arr[i/num]=[] unless arr[i/num]
arr[i/num][i%num]=e}
arr
end
end
class String
def each_char
scan(/./){|c| yield(c)}
end
def bsize
begin
self.bytesize
rescue
self.size
end
end
end

opt=ARGV[0].to_i #1:【円外消去】
jwc=open("jwc_bak.txt").read
n=ARGV.grep(/^N/)[0].to_s.gsub(/^N/,"").to_f
n=1.0 if n==0
mx=Matrix[[n,0],[0,n]]
rd=(opt==5 ? rand(360.0) :0)
if opt==6 #【基準指示】
ln8s,ln8e=jwc.match(/hhp8ln\n (-?[\d.]+) (-?[\d.]+) (-?[\d.]+) (-?[\d.]+)/m).
to_a.map{|e| e.to_f}[1..4].each_slice(2).map{|e| Vector.elements(e)}
ln8p=Vector.elements(jwc.match(/hp8ln (-?[\d.]+) (-?[\d.]+)/).
to_a.map{|e| e.to_f}[1..2])
ln8s,ln8e=ln8e,ln8s if (ln8p-ln8s).r>(ln8p-ln8e).r
rd=-atan2((ln8e-ln8s)[1],(ln8e-ln8s)[0])*180.0/PI
end
mk=Matrix[[cos(rd*PI/180.0),-sin(rd*PI/180.0)],
[sin(rd*PI/180.0),cos(rd*PI/180.0)]] #回転用行列
mx=mk*mx
vo=Vector[0,0]

cir=jwc.match(/hhp9ci\nci (-?[\d.]+) (-?[\d.]+) (-?[\d.]+)/m).
to_a.map{|e| e.to_f}[1..3]
v0=Vector.elements(cir[0..1])
r1=cir[2]
hcw,hch,hcd,hcc=[],[],[],[]
fcw,fch,fcd,fcc=0,0,0,0
jwc.split("\n").each{|jw|
if jw.match(/^hq/)
puts "hd" if opt==1
elsif jw.match(/^hc[whdc]/)
hcw=jw.split(" ").map{|e| e.to_f} if /^hcw/=~jw
hch=jw.split(" ").map{|e| e.to_f} if /^hch/=~jw
hcd=jw.split(" ").map{|e| e.to_f} if /^hcd/=~jw
hcc=jw.split(" ").map{|e| e.to_f} if /^hcc/=~jw
puts jw
elsif jw.match(/^cn0 (.*)/)
fcw,fch,fcd,fcc=$1.split(" ").map{|e| e.to_f}
puts jw
elsif jw.match(/^cn([1-9]0?)/)
cn=$1.to_i
fcw,fch,fcd,fcc=hcw[cn],hch[cn],hcd[cn],hcc[cn]
puts jw
elsif jw.match(/^pt (.*)/) #点と点マーカの処理
pp=$1.split(" ").map{|f| f.to_f}
vp=Vector.elements([pp[0],pp[1]])
vp=vp-v0
if vp.r vpn=(opt==1 ? vp+v0 : mx*vp)
puts "pt "+vpn.to_a.join(" ") if pp.size==2 #点
puts "pt "+vpn.to_a.join(" ")+" #{pp[2]*n} "+
"#{(pp[3]+rd)%360.0} #{pp[4].to_i}" if pp.size==5 #点マーカ
end
elsif jw.match(/^( -?[\d.]+){4}/) #線の処理
vs,ve=$&.split(" ").map{|e| e.to_f}.
each_slice(2).map{|e| Vector.elements(e)}
vs,ve=vs-v0,ve-v0
vs,ve=ve,vs if vs.r>ve.r
vb=Matrix[[0,-1],[1,0]]*(ve-vs) #90°回転
vh=kouten(vo,vb,vs,ve) #円の中心から線への垂点
if vh.r vp=(ve-vs)*sqrt(r1**2-(vh.r)**2)/(ve-vs).r+vh
vq=(vs-ve)*sqrt(r1**2-(vh.r)**2)/(ve-vs).r+vh
vsn,ven,vpn,vqn=vs+v0,ve+v0,vp+v0,vq+v0 if opt==1
vsn,ven,vpn,vqn=mx*vs,mx*ve,mx*vp,mx*vq if opt!=1
if vs.r puts " "+(vsn.to_a+ven.to_a).join(" ")
elsif vs.r puts " "+(vsn.to_a+vpn.to_a).join(" ")
elsif (vq-vs).dot(ve-vs)>0 && (vp-vs).dot(ve-vs)>0 #円を横切る
puts " "+(vqn.to_a+vpn.to_a).join(" ")
end
end
elsif jw.match(/^ci (.*)/) #円の処理
ci=$1.split(" ").map{|f| f.to_f}
cc=Vector.elements(ci[0,2])
cc=cc-v0 #円弧中心
r2=ci[2] #半径
d=cc.r #円と円の距離
ch=(ci[5] ? ci[5] :1.0) #扁平率
cj=(ci[6] ? ci[6] :0.0) #軸角
ccn=(opt==1 ? cc+v0 : mx*cc)
if d>r1+r2 #円が離れている場合
next
elsif d if ci[3] #円弧か楕円
puts "ci "+ccn.to_a.join(" ")+" #{r2*n} "+
ci[3..5].join(" ")+" #{(cj+rd)%360.0}"
else
puts "ci "+ccn.to_a.join(" ")+" #{r2*n}"
end
else #交点が存在する場合
if ch<1.0 #楕円の場合はそのまま出力
puts "ci "+ccn.to_a.join(" ")+" #{r2*n} "+
ci[3..5].join(" ")+" #{(cj+rd)%360.0}"
else
begin
rad=acos((d**2+r1**2-r2**2)/(2*d*r1)) #余弦定理
rescue
next #(d**2+r1**2-r2**2)/(2*d*r1)が範囲外なら次へ
end
ma=Matrix[[cos(rad),sin(rad)],[-sin(rad),cos(rad)]]
mb=Matrix[[cos(rad),-sin(rad)],[sin(rad),cos(rad)]]
vp=ma*cc*(r1/d) #交点1
vq=mb*cc*(r1/d) #交点2
vc=Vector[r2,0]
dp=atan2((vp-cc)[1],(vp-cc)[0])*180/PI
dq=atan2((vq-cc)[1],(vq-cc)[0])*180/PI
dp,dq=(dp+360.0)%360.0,(dq+360.0)%360.0
dp,dq=[dp,dq].sort
if ci.size==3 #円の場合
dp,dq=dq,dp if (vc+cc).r puts "ci "+ccn.to_a.join(" ")+" #{r2*n} #{dp} #{dq} 1.0 #{rd}"
else #円弧の場合
ds,de=ci[3]+cj,ci[4]+cj #始角と終角
de=(de-ds<0 ? de-ds+360.0 : de-ds)
dp,dq=[dp,dq].map{|e| (e-ds+360.0)%360.0}.sort
ms=Matrix[[cos(ds*PI/180),-sin(ds*PI/180)],[sin(ds*PI/180),cos(ds*PI/180)]]
if dq if (ms*vc+cc).r dp,dq,de=[dp,dq,de].map{|e| (e+ds)%360}
puts "ci "+ccn.to_a.join(" ")+" #{r2*n} #{ds} #{dp} 1.0 #{rd}"
puts "ci "+ccn.to_a.join(" ")+" #{r2*n} #{dq} #{de} 1.0 #{rd}"
else
dp,dq,de=[dp,dq,de].map{|e| (e+ds)%360}
puts "ci "+ccn.to_a.join(" ")+" #{r2*n} #{dp} #{dq} 1.0 #{rd}"
end
elsif dp dp,dq,de=[dp,dq,de].map{|e| (e+ds)%360}
if (ms*vc+cc).r puts "ci "+ccn.to_a.join(" ")+" #{r2*n} #{ds} #{dp} 1.0 #{rd}"
else
puts "ci "+ccn.to_a.join(" ")+" #{r2*n} #{dp} #{de} 1.0 #{rd}"
end
else de dp,dq,de=[dp,dq,de].map{|e| (e+ds)%360}
if (ms*vc+cc).r puts "ci "+ccn.to_a.join(" ")+" #{r2*n} #{ds} #{de} 1.0 #{rd}"
end
end
end
end
end
elsif jw.match(/^(c[hvsroptkz2])/) #文字列の処理
#円の内外に関わらず文字列を削除したい場合は
#次の行の先頭の#を削除してコメントアウトを解除する
#next
jch=jw.scan(/([^\s]+) ([^\s]+) ([^\s]+) ([^\s]+) ([^\s]+) (.*)$/).flatten
vs,ve=jch[1..4].map{|e| e.to_f}.each_slice(2).map{|e| Vector.elements(e)}
vs=vs-v0
jc0,jc5=jch[0],jch[5][1..-1]
vb=Matrix[[0,-1],[1,0]]*ve #90°回転
vh=kouten(vo,vb,vs,vs+ve) #円の中心から線への垂点
if vh.r vp= ve*sqrt(r1**2-(vh.r)**2)/ve.r+vh
vq=-ve*sqrt(r1**2-(vh.r)**2)/ve.r+vh
dq,dp,jc5n=0,0,""
if vs.r jc5n=jc5
vsn=vs
elsif vs.r jc5.each_char{|e|
if (vp-vs).r>dp
dp+=(e.bsize==1 ? fcw*0.5+fcd*0.5 : fcw+fcd)
jc5n+=e
end}
vsn=vs
elsif (vs+ve).r jc5.each_char{|e|
if (vq-vs).r>dq
dq+=(e.bsize==1 ? fcw*0.5+fcd*0.5 : fcw+fcd)
else
jc5n+=e
end}
vsn=vs+ve*dq/(ve.r)
elsif ve.dot(vq-vs)>0 && ve.dot(vp-vs)>0 #始点と終点が円を横切る(s,q,p,e)
jc5.each_char{|e|
if (vq-vs).r>dq
dq+=(e.bsize==1 ? fcw*0.5+fcd*0.5 : fcw+fcd)
dp=dq
elsif (vp-vs).r>dp
dp+=(e.bsize==1 ? fcw*0.5+fcd*0.5 : fcw+fcd)
jc5n+=e
end}
vsn=vs+ve*dq/(ve.r)
end
if vsn #円外の文字は書き出さない
vsn,ven=vsn+v0,mk*ve if opt==1
vsn,ven=mx*vsn,mx*ve if opt!=1
puts "cn0 #{fcw*n} #{fch*n} #{fcd*n} #{fcc.to_i}" unless n==1.0
puts %Q|#{jc0} #{vsn[0]} #{vsn[1]} #{ven[0]} #{ven[1]} "#{jc5n}|
end
end
else
puts jw unless jw.match(/^s[lceog]/) #ソリッドデータは書き出さない
end}
__END__
:END






07/07.Tue   【外部変形】シンプルグラデーションソリッド 
07:12
Solid0.jpg

Jw_cad用外部変形「シンプルグラデーションソリッド」は、ソリッド図形による疑似グラデーションを作図するソフトウエアです。

指定した複数の色を連続的に変化させて疑似グラデーションを作図します。
グラデーションの方向は水平・垂直・対角(右、左)の4方向が選択できます。

「autolayer」オプションを使うと、レイヤ名が「ペイント」「テクスチャ」のレイヤを自動で探して作図します。




ダウンロードはこちらから
 MISCELLANEOUS DATA STORAGE 2 for CAD Drawings
05/18.Mon   SketchUp無料版 ’20/5/18 
12:06
2020/5/18現在の記事です
 一ヶ月程前、You Tube等みていてSketchUp2017(30日後)→SketchUpMakeとして 使える。

 というのを見て、人柱になってみた。
 結果
SketchUp2017からSketchUpMakeにはならない。(30日経過したが ライセンス購入を促される)

なので、我社の新入社員たちには、SketchUp8日本語版を入れることにした。
 SketchUp8はGoogleSketchUpの最終盤かな?


  
 2020/5/18現在 SketchUp無料版は TrimbleのサイトからDL出来ます。
 探すのが大変かと思うので、直リンです。32bit版ですが、64bitマシンでも動きますから。

 我社の新入社員には、SketchUp8を入れて 時間のある時に練習させています。


 アーカイブがなくなる前に、興味ある人はDownloadしてみてはどうでしょうか?

 SketchUp 8 日本語 無料版 (Windows)
https://dl.trimble.com/sketchup/gsu8/FW-3-0-16950-JA.exe

SketchUp 8 日本語 無料版 (Mac)
https://dl.trimble.com/sketchup/gsu8/FM-3-0-16943-JA.dmg

05/04.Mon   RSJww(Jw_cad→SketchUpの外部変形) ’20/5/4 
13:29
SketchUpdでモデリングするのに役立つ外部変形。
 僕は基本的に、Jwで2D作図して それらをSketchUpにインポートし3Dにしています。
 (2Dでの作図は 圧倒的に使い慣れたCadが早い)

 但し、そうでない ときもあります。 それはJw_cadの2.5Dという機能を利用しSketchUpにインポートします。
 Jw_cadの2.5Dという機能は、Jw_cadインストール時
 "C:\JWW\Test6.jww"にある テストファイルを参照してください。
 (グループ毎に いろいろあります。 それらを2.5Dの 透視図・鳥瞰図・アイソメ等で見て下さい。
  なんとなく、分かるかと思います。)

  このJw_cadの2.5Dのデーターも SketchUpにインポート出来るわけです。
さて 説明は もう いいですね。
 以下の動画は、RSJwwに同梱されている サンプルファイルが
どうなるのかを 動画にしました。












こんな ことが出来ます。

2006年6月 有志によって、無料のGoogleSketchUpの日本語入替化がされ、その後 日本語版もできました。
 現在も GoogleSketchUp8日本語版が まだDownloadできます。
 
 無償のJw_cad、無償のRSJww、無償のSketchUpで 出来ることがたくさんあります。
 
高価なソフトを購入しなくても 出来ることがあります。 スペックの低いPCでも3Dは出来ます。
 そして、現場担当の僕でも出来るのです。 
 
 ツールを どんな使い方をするかは、使う側 次第。
そして、無料のツールがあるのに、使わないのは ・・・・って ことです。

 次はVRが もっと安く、手の届く プレゼンツールになるでしょうね・・・
 VR化が 普通になる前に、3D化くらいは 出来る現場員でないとね(´・ω・`)
 

 
 
05/02.Sat   ■外部変形■ R平均地盤 2020/5/2 
17:40
 
平均地盤面を求めて、作図 作表する外部変形
 以下からDLしてくださいませ。検索はR平均地盤です。
 記事訂正 2020/05/02


HinoADOHinoADO
http://hinoado.com/tw/index.html







 説明が面倒なので、動画で見て下さい。(´・ω・`)





 敷地測量したデーターがあれば、
 当然各ポイントの高さもわかっているので、データーだけあれば
 高さを入力するだけの作業です。 数分ですよ(´・ω・`)
04/28.Tue   SketchUpPlugin 2020年不要不急時の学習メモ 
12:44
SketchUpのYou Tube見ていて、気になった ものをやっとこさ発見。
 
以下は https://sketchucation.com/
です。 ログインしてからでないと、クリックしたページには行きません。


FredoTools v3.8c


LibFredo6 v10.1a


FredoToolsに含まれるプラグイン

20200429ge01.jpg
20200429ge02.jpg
20200429ge03.jpg
20200429ge04.jpg



GW中の 暇つぶしには 十分な量だと思います。
 だれか 日本語化した人とか いないのかな?
03/31.Tue   Twinmotion無料でどこまで出来るの? 20’3/31 
11:39
 齢 40を超えた 中小企業 現場監督の僕。
 高価なモデリングソフトも買えず、高価なレンダリングソフトも買えず、PCは会社のリース品(まぁまぁ低スペック)。
(BIMソフト高くて、動くPCがない。レンダリングソフトも高くて 動くPCがない。)

 でも お客さんに見せる資料は ある程度の出来栄えにしたいと思い、twitterやFacebookを覗いていました。
 
 で、たどり着いたのが Twinmotionでした。

 2020年3月31日現在、全て無料で出来ます。
 
 無料ソフトだけで どこまで出来るの?

この程度まで出来ます。

 前置きはどうでも いいです。挑戦したい人は 今がチャンスかも
 (SketchUp8Freeもいつまで公開されるか不明。Twinmotion2019だって そのうちDL出来なくなるかも)


【準備するもの】
  ①SketchUp8_Free日本語版
いつまでDL出来るかわかりませんが、無料でのモデリングはSketchUp
 Downloadしてインストールしましょう。(おそらくSU8は32Bitだと思います。64BitPCでも動きます。)


②Twinmotion2020.1体験版 (体験版で静止画レンダリング可能です:静止画のみテストしました。)
 
【Twinmotion2020.1体験版の入手方法。】
 1)   https://www.unrealengine.com/ja/twinmotion  左記にアクセス。
 2)  右上の【サインイン】で アカウント作成します。
 3)  アカウント登録後、サインインして、[Epic Games Launcherをダウンロード]
 4) Epic Games Launcher がダウンロードされたら 画面左側から[Unreal Engine]をクリックします。
    これにより画面右上に[Twinmotion]タブが表示されます。

5)[インストール]をクリックしてTwinmotion2020.1体験版をインストールします。

20200331ge01.jpg

説明に従い インストールします。
  ※ファイルの保存先は慎重に選択してください。デフォルトの保存先を使用することをお勧めします。


Twinmotionの起動は、Epic Games Launcher起動その後、Twinmotion2020.1体験版を選ぶだけです。


Twinmotionも使い方は、たくさんYou Tubeにあがっています。

僕が参考にしたのは 以下のYou Tubeです。

 
 




 




  SketchUpを使っていて、レンダリングソフトは高いし 体験版では 時間がたりない。
 また、高価なレンダリングソフトに 見合うPCが無い。
 でも 出来栄えのする レンダリングしたい。 って方には お勧めです。

 ※※注意※※
 僕は、Twinmotion2019を無償のときに手に入れています。Twinmotion2010.1体験版の入手、レンダリングテストは
 会社のスタッフのPCにて インストールし確認しました。若干操作方法が違う場合は ご了承下さい。

 
03/30.Mon   Twinmotion2020 試作 20’3/30 
22:57
SketchUp→Twinmotionの練習

すこしずつ理解(´・ω・`)

 無料で ここまで出来たら 十分かも。
Jw_cad→SketchUp2019(SketchUpは無料版のVer8でも)→Twinmotion(現在は有料?)
 Twinmotion2019は まだ無料ですかえるのかな?

 使用している PCは 会社でリース DynaBook スペックは低め。
 


20200330ji04.jpg


20200330ji03.jpg


マシンスペックは低いので、アニメーションには不向き(´・ω・`)

FeedBurner

FC2カウンター

プロフィール

盗朱

Author:盗朱
 ご意見は、
mail.png

 
eMachinesJ3210 Core2Duo7200
VistaHB Intel945G
GeForce 9600 GT-DDR3-512MB

Note PC:FMV-C6310仕事用
 リンクフリーですが、ご一報いただければ幸いです。

最近の記事

最近のコメント

カテゴリー

最近のトラックバック

リンク

RSSフィード

CopyRight 2006 ■現場のJW+Web2.0■ All rights reserved.
Photo material by ミントBlue  / Template by Il mio diario
Powered by FC2BLOG /