Indexへ
(16653)//【16655】→(16656)
------------------------
【タイトル】オブジェクトの分割
【記事番号】 16655 (*)
【 日時 】04/05/05 02:02
【 発言者 】マグナム

初歩的な質問かもしれないのですが・・・

2本の直線が交わる交点から、それぞれの直線を分割して4本の直線にいっぺんに変更する方法はありますでしょうか?
実際、直線は何本もあって交点もいくつもあるので、ひとつひとつ分割していくのが非常に面倒なんです。

どなたか力をお貸しください。


Indexへ
(16655)←【16656】→(16658)
------------------------
【タイトル】Re(1):オブジェクトの分割
【記事番号】 16656 (16655)
【 日時 】04/05/05 02:19
【 発言者 】Den
【 リンク 】http://been-den.hp.infoseek.co.jp/



▼マグナムさん:
外部変形を使わないノーマルの方法をいくつか挙げます。
ただし、オートモードでの仕様です。

1)線分を左クリックし、交点を右クリック2回で分割する。
 これは、交点の数だけするので、結構大変です。

2)線分ABを交点CDEで分割(4つに分割)するなら、
 連続線(左PM3時)でAC、CD、DEに線を引き、元の線分ABのB側を左クリック
 して、Eに交差している線分を左クリックして伸縮する。
 (AB→EBに伸縮させる)

2)の方法がお勧めです。
  


Indexへ
(16656)←【16658】→(16682)
------------------------
【タイトル】Re(1):オブジェクトの分割
【記事番号】 16658 (16655)
【 日時 】04/05/05 15:02
【 発言者 】siegel

▼マグナムさん:
>2本の直線が交わる交点から、それぞれの直線を分割して4本の直線にいっぺんに変更する方法はありますでしょうか?

外部変形ですが、sugiさんの「Ruby 外部変形スクリプト集 for jww ver0.98」の中に、線分割(複数の線を線上点または交点で切断)があります。

http://homepage2.nifty.com/igus/starthp/rubysc98.html

当然ながら、ruby が別途必要です。

ご参考までに。


Indexへ
(16658)←【16682】→(16687)
------------------------
【タイトル】Re(1):オブジェクトの分割
【記事番号】 16682 (16655)
【 日時 】04/05/06 12:02
【 発言者 】コジマ

▼マグナムさん:
>初歩的な質問かもしれないのですが・・・
>
>2本の直線が交わる交点から、それぞれの直線を分割して4本の直線にいっぺんに変更する方法はありますでしょうか?
>実際、直線は何本もあって交点もいくつもあるので、ひとつひとつ分割していくのが非常に面倒なんです。
>
>どなたか力をお貸しください。

以下、オリジナルの外部変形です。(ActiveRubyスクリプト)
碁盤目状に交差した複数の直線を交点で切断します。(斜線には未対応)

この外部変形の実行には、ActiveRubyのインストールが必要です。
牛渡さんのサイトで入手できます。
http://www61.tok2.com/home2/gravelroad/tips/install.html

コピペ後、全角スペースを半角スペースに一括置換してください。


◎バッチファイル(ファイル名 交点分割.bat)

REM 交点分割
echo off
REM #jww
REM #cd
REM #h2
REM #c切断間隔(実寸mm) 無指定=0 :/_/a
REM #e
copy jwc_temp.txt temp.txt > nul
cscript //nologo 交点分割.rb temp.txt %1 > jwc_temp.txt


◎スクリプトファイル(ファイル名 交点分割.rb)

# 直線の交点分割 外部変形Rubyスクリプト
BEGIN{
print "hd\n"    # 選択したデータの削除
$kankaku =0  #デフォルト値
while ARGV.length > 1
case argument=ARGV.pop
when/^\/a/
$kankaku=argument[2..-1].to_f
end
end
$tate=Array.new;$tatey1=Array.new
$tatey2=Array.new;$yoko=Array.new
$yokox1=Array.new;$yokox2=Array.new
$lyy=Array.new;$lyt=Array.new
$lcy=Array.new;$lct=Array.new
$lty=Array.new;$ltt=Array.new
}
def main
while ARGF.gets
xy =split   
if xy[0]=~/^ci|^pt|^ch|^cs|^cn/;print $_;end
if xy[0]=~/^ly/;$senly=xy[0];end
if xy[0]=~/^lc/;$senlc=xy[0];end
if xy[0]=~/^lt/;$senlt=xy[0];end
if xy[0]=~ /^[0-9]|^-/
  xy.collect!{ |item| item.to_f }# 数値化
if xy[0]==xy[2]
  if xy[3] < xy[1];y=xy[3];xy[3]=xy[1];xy[1]=y;end
    $tate.push(xy[0]);$tatey1.push(xy[1]);$tatey2.push(xy[3])
    $lyt.push($senly);$lct.push($senlc);$ltt.push($senlt)
end
if xy[1]==xy[3]
  if xy[2] < xy[0];x=xy[2];xy[2]=xy[0];xy[0]=x;end
    $yoko.push(xy[1]);$yokox1.push(xy[0]);$yokox2.push(xy[2])
    $lyy.push($senly);$lcy.push($senlc);$lty.push($senlt)
end
end
end
$ta=$tate.sort;$tay1=$tatey1.sort;$tay2=$tatey2.sort;$x=$tate.size
n=-1;while (n < $yoko.size-1);n += 1
print $lyy[n]+"\n";print $lcy[n]+"\n";print $lty[n]+"\n"
yokosen($yokox1[n],$ta[0]-$kankaku,$yoko[n])
yokosen($yokox2[n],$ta[$x-1]+$kankaku,$yoko[n]);end
m=-1;while (m < $tate.size-2);m +=1
w=-1;while (w < $yoko.size-1);w +=1
print $lyy[w]+"\n";print $lcy[w]+"\n";print $lty[w]+"\n"
yokosen($ta[m]+$kankaku,$ta[m+1]-$kankaku,$yoko[w])
end
end
$yo=$yoko.sort;$yox1=$yokox1.sort;$yox2=$yokox2.sort;$y=$yoko.size
r=-1;while (r < $tate.size-1);r += 1
print $lyt[r]+"\n";print $lct[r]+"\n";print $ltt[r]+"\n"
tatesen($tatey1[r],$yo[0]-$kankaku,$tate[r])
tatesen($tatey2[r],$yo[$y-1]+$kankaku,$tate[r]);end
s=-1;while (s < $yoko.size-2);s +=1
t=-1;while (t < $tate.size-1);t +=1
print $lyt[t]+"\n";print $lct[t]+"\n";print $ltt[t]+"\n"
tatesen($yo[s]+$kankaku,$yo[s+1]-$kankaku,$tate[t]);end;end
end
def yokosen( x1,x2, y1)
printf("%e %e %e %e\n", x1, y1, x2, y1)
end
def tatesen( y1,y2, x1)
printf("%e %e %e %e\n", x1, y1, x1, y2)
end
main()


Indexへ
(16682)←【16687】//(16659)
------------------------
【タイトル】修正
【記事番号】 16687 (16682)
【 日時 】04/05/06 13:40
【 発言者 】コジマ

前のスクリプトでは、交点がない時及び斜線は消去されましたが、
交点がない時及び斜線はそのまま、書き戻すように修正しました。


◎スクリプトファイル(ファイル名 交点分割.rb)

# 直線の交点分割 外部変形Rubyスクリプト
BEGIN{
print "hd\n"    # 選択したデータの削除
$kankaku =0  #デフォルト値
while ARGV.length > 1
case argument=ARGV.pop
when/^\/a/
$kankaku=argument[2..-1].to_f
end
end
$tate=Array.new;$tatey1=Array.new
$tatey2=Array.new;$yoko=Array.new
$yokox1=Array.new;$yokox2=Array.new
$lyy=Array.new;$lyt=Array.new
$lcy=Array.new;$lct=Array.new
$lty=Array.new;$ltt=Array.new
}
def main
while ARGF.gets
xy =split   
if xy[0]=~/^ci|^pt|^ch|^cs|^cn/;print $_;end
if xy[0]=~/^ly/;$senly=xy[0];end
if xy[0]=~/^lc/;$senlc=xy[0];end
if xy[0]=~/^lt/;$senlt=xy[0];end
if xy[0]=~ /^[0-9]|^-/
  xy.collect!{ |item| item.to_f }# 数値化
if xy[0]==xy[2]
  if xy[3] < xy[1];y=xy[3];xy[3]=xy[1];xy[1]=y;end
    $tate.push(xy[0]);$tatey1.push(xy[1]);$tatey2.push(xy[3])
    $lyt.push($senly);$lct.push($senlc);$ltt.push($senlt)
elsif xy[1]==xy[3]
  if xy[2] < xy[0];x=xy[2];xy[2]=xy[0];xy[0]=x;end
    $yoko.push(xy[1]);$yokox1.push(xy[0]);$yokox2.push(xy[2])
    $lyy.push($senly);$lcy.push($senlc);$lty.push($senlt)
else;print $_
end
end
end
if $tate.size !=0 && $yoko.size !=0
$ta=$tate.sort;$tay1=$tatey1.sort;$tay2=$tatey2.sort;$x=$tate.size
n=-1;while (n < $yoko.size-1);n += 1
print $lyy[n]+"\n";print $lcy[n]+"\n";print $lty[n]+"\n"
yokosen($yokox1[n],$ta[0]-$kankaku,$yoko[n])
yokosen($yokox2[n],$ta[$x-1]+$kankaku,$yoko[n]);end
m=-1;while (m < $tate.size-2);m +=1
w=-1;while (w < $yoko.size-1);w +=1
print $lyy[w]+"\n";print $lcy[w]+"\n";print $lty[w]+"\n"
yokosen($ta[m]+$kankaku,$ta[m+1]-$kankaku,$yoko[w])
end
end
$yo=$yoko.sort;$yox1=$yokox1.sort;$yox2=$yokox2.sort;$y=$yoko.size
r=-1;while (r < $tate.size-1);r += 1
print $lyt[r]+"\n";print $lct[r]+"\n";print $ltt[r]+"\n"
tatesen($tatey1[r],$yo[0]-$kankaku,$tate[r])
tatesen($tatey2[r],$yo[$y-1]+$kankaku,$tate[r]);end
s=-1;while (s < $yoko.size-2);s +=1
t=-1;while (t < $tate.size-1);t +=1
print $lyt[t]+"\n";print $lct[t]+"\n";print $ltt[t]+"\n"
tatesen($yo[s]+$kankaku,$yo[s+1]-$kankaku,$tate[t]);end;end
end

if $tate.size ==0
n=-1;while (n < $yoko.size-1);n += 1
print $lyy[n]+"\n";print $lcy[n]+"\n";print $lty[n]+"\n"
yokosen($yokox1[n],$yokox2[n],$yoko[n]);end
printf("h# %s\n","交点がありません")
end
if $yoko.size ==0
r=-1;while (r < $tate.size-1);r += 1
print $lyt[r]+"\n";print $lct[r]+"\n";print $ltt[r]+"\n"
tatesen($tatey1[r],$tatey2[r],$tate[r]);end
printf("h# %s\n","交点がありません")
end

end
def yokosen( x1,x2, y1)
printf("%e %e %e %e\n", x1, y1, x2, y1)
end
def tatesen( y1,y2, x1)
printf("%e %e %e %e\n", x1, y1, x1, y2)
end
main()