Indexへ
(35249)//【35254】→(35296)
------------------------
【タイトル】寸法の反転
【記事番号】 35254 (*)
【 日時 】09/08/25 11:01
【 発言者 】ai

反転した際に寸法値と寸法線の位置関係が通常と逆になるのを
一括で訂正できる外部変形はあるのでしょうか?

現在KITIさんの寸法回転で訂正しているのですが、
(作者様ありがとうございます)
寸法は水平・垂直入り混じりで書いていて分けていないため
除外範囲などをつかって寸法線が垂直の場合と水平の場合で分けて
作業しています。

水平寸法線と垂直寸法線を分けて書いとけばいい話なのですが、
既に作成した図面の反転作業のため手間取っています。
もし一括処理できるものがあれば教えていただきたいです。


Indexへ
(35254)←【35296】→(35299)
------------------------
【タイトル】Re(1):寸法の反転
【記事番号】 35296 (35254)
【 日時 】09/08/27 12:48
【 発言者 】ai

自作してみたのでデータを置いてあるとこのアドレスはっておきます。
http://ohayou-oyasumi.webdeki-bbs.com/ohayou-oyasumi_tree_p_46.html

*いっちさんに教えていただいたコードを利用
*excelでデータ変換
*垂直or水平の寸法図形(msg)にのみ対応
*自分の環境で動いたというだけで動作確認はほとんどしてないです

斜め未対応、Excelで処理など使い勝手が悪いので
いい外部変形がありましたら教えていただきたいです。

※リンクおかしかったので書き直しました

訂正
※寸法属性と寸法図形を書き間違ってました、申し訳ありません。


追記

角度付きのデータも見てるのですが、計算方法がわかりません。
90度と180度の場合はcsの3個目の数値もしくは4個目の数値が0になっているのと、
msg下にある数値のみのデータの座標・図面倍率・文字サイズ・csの座標から
足し算・引き算するだけで反転位置が割り出せるのですが、
斜めの場合ってどんな計算なのでしょうか?


*****************************************************************
文字高さ
hch

図面倍率  ※(1/分数)の分数部分 1/3なら3
hs

msg
X1 Y1 X2 Y2
cs SX1 SY1 SX2 SY2 "寸法


数字だと分かりにくいので文字に書き換えましたが上記とすると

左右反転の場合SX1を書き換え ※垂直線の場合・SX2が0の場合のみに実行
X1*2 - SX1 + hs * hch

上下反転の場合SY1を書き換え ※水平線の場合・SY2が0の場合のみに実行
Y1*2 - SY1 - hs * hch

で希望動作になったのですが、
数学力がないため斜め線の場合はどう計算しているのかよくわかりませんorz


Indexへ
(35296)←【35299】→(35305)
------------------------
【タイトル】Re(2):寸法の反転
【記事番号】 35299 (35296)
【 日時 】09/08/27 17:19
【 発言者 】いっち

▼aiさん:
> 斜めの場合ってどんな計算なのでしょうか?

aiさんが、今つくられている寸法反転の外部変形は
作成した事がありません。
----------------------------------------------------------
自分の場合は、概ね下記のような事をしています。

1.まずJw_cadで絵を描いてみて、三角形から座標を求める。
2.上記を考えるにあたっての基本的な考え方は、下記の通り。

[第1象限]
左下から右上に上がる線

[第2象限]
右下から左上に上がる線

[第3象限]
右上から左下に下がる線

[第4象限]
左上から右下に下がる線

結果的には第1象限の、左下から右上に上がる線のみを
考えれば、第1象限から第4象限まで対応した
外部変形が作成できることになります。

3.文字の場合は、jwc_temp.txtの書き出しは、
  実際には座標でも方向点として扱う事が出来た
  と思います。

4.軸角を利用する外部変形をつくる場合以外は、
  軸角の取得は、行っていません。

5.斜めの場合で式をつくれば、その式で、
  もちろん、斜めでない場合にも対応します。
----------------------------------------------------------
具体的な式でなくて、申し訳ないです。


Indexへ
(35299)←【35305】→(35307)
------------------------
【タイトル】Re(3):寸法の反転
【記事番号】 35305 (35299)
【 日時 】09/08/27 19:11
【 発言者 】ai

▼いっちさん:
いつもありがとうございます。
まだ理解できていないのですが、
斜めで反転した場合のデータを取得しててらし合わせつつ勉強してみようと思います。

小学〜高校の数学で習った内容だとは思うので教科書引張りだそうかと思います。


Indexへ
(35305)←【35307】→(35311)
------------------------
【タイトル】Re(4):寸法の反転
【記事番号】 35307 (35305)
【 日時 】09/08/27 20:16
【 発言者 】ai

角度付きの寸法の反転のパターンがどうなるんだろうと思っていろいろ試していたのですが、

*角度付きだと寸法値は必ず寸法線の上に来る(左右はどちらの場合もある)
というのであっていますでしょうか?
角度付きの場合で寸法線の下にデータが来る場合を見つけれませんでした。

図面を左右反転させた場合(上下反転でコード作成)
 寸法線が垂直の場合のみ寸法値と寸法線の位置関係を反転
図面を上下反転させた場合(左右反転でコード作成)
 寸法線が垂直以外の場合のみ寸法値と寸法線の位置関係を反転
※左右反転の場合と上下反転の場合は別々にコード作成

になるのでしょうか?
(角度付きの場合の反転方法はいまだわかっていませんが)


Indexへ
(35307)←【35311】→(35326)
------------------------
【タイトル】Re(5):寸法の反転
【記事番号】 35311 (35307)
【 日時 】09/08/27 20:56
【 発言者 】いっち

▼aiさん:
まずは、よーく考えていろいろ試行錯誤されてみては、
いかがでしょうか。

> 結果的には第1象限の、左下から右上に上がる線のみを
> 考えれば、第1象限から第4象限まで対応した
> 外部変形が作成できることになります。

と書きましたが、そうなるようにjwc_temp.txtは
ちゃんと書き出してくれていると思います。

第1象限の線〜第4象限の線を、jwc_temp.txtに書き出して
みると、すぐにわかります。

ちなみに、線だけではなく文字も書き出してご覧になると、
良いと思います。


Indexへ
(35311)←【35326】→(35328)
------------------------
【タイトル】Re(6):寸法の反転
【記事番号】 35326 (35311)
【 日時 】09/08/28 02:22
【 発言者 】ai

▼いっちさん:
寸法移動で寸法値を移動させる場合があるのを失念してました。
垂直・直角の場合はそれも考慮して作ったのに、
いじってるうちにすっかり頭から抜け落ちてました。

区分けとしては下記な気がしています

図面を左右反転させた場合(左右反転でコード作成)
 寸法線が垂直の場合処理
  

図面を上下反転させた場合(上下反転でコード作成)
 寸法線が水平の場合処理
 寸法線が右上がりの場合処理
 寸法線が左上がりの場合処理

データは見てるのですが、第1・3象限、第2・4象限はそれぞれ同じ扱いでいい気がしてしまいます。
(右上がりか右下がりかを判別して処理)
何か変わるのでしょうか?


因みに寸法線から寸法値の座標までの直角距離がすでに出せません。

寸法線の短点座標
A(x1,y1) B(x2,y2)
2点の距離
AB = √(x1-x2)^2+(y1-y2)^2

文字の起点
C(sx1,sy1)

C点から寸法線に直角になるように線をひいた場合の交点D

ACDで三角形を作って三平方の定理かと思ったのですが、
2辺の長さが分かっている場合の線長CDを求める計算方法はわかるのですが、
線長ABと座標2点から、線長CDおよび座標Dを求める方法がわからず挫折しました。

θ=tan-1((x1-x2)/(y1-y2))
で寸法線の角度を出してそこから計算できないかも考えたのですがそれもわからず。

sugiさんのコードを見ればわかるのでしょうが、
VBAがやっとわかりだした程度でRubyは全く分らず、
解読できるようになるまでいったいどれだけ時間がかかるかもわからないので
そこは断念してしまっています。

sugiさんに作っていただいていますし自分が作る必要はないと思いますが、
好奇心が湧いて知りたい気はしています。
ただ高校数学の時点で完全に挫折してしまって内容が理解できていなかったので、
基準線が斜めの場合の反転は自分には難しすぎるかもしれませんorz


Indexへ
(35326)←【35328】→(35343)
------------------------
【タイトル】Re(7):寸法の反転
【記事番号】 35328 (35326)
【 日時 】09/08/28 10:06
【 発言者 】いっち

▼aiさん:

おはようございます。

> 好奇心が湧いて知りたい気はしています。

下記の書籍をお勧め致します。
------------------------------------
「数学 こんな授業を受けたかった!」
 発行所 日本実業出版社
 著者  岡部恒治 長谷川愛美
------------------------------------
上記書籍は、
数学オンチのための数学入門
「直観的数学」の方法なら、今度こそわかる!

と、いう書籍です。(定価1,400円税別 程度だと思います。)

> 基準線が斜めの場合の反転は自分には難しすぎるかもしれませんorz

aiさんがつくられている外部変形の中で、
寸法にカンマを付けたり、はずしたり、数値の有効桁を変更したり
するプログラムがあったと思います。

はずは、そちらの方の外部変形で、数値を書き戻した後の
書き出し位置を、調整する方法を考えられたらいかがかと
思います。
------------------------------------------------------------
自分の場合、平面図に寸法を入れるような図面を、
描くことが少ないこともあって、寸法に関連する
外部変形は、今のところつくっていません。

しかし、実際には寸法を調整する必要が発生するのも
事実ですので、aiさんがつくられたものも、
利用させて頂きたいと思っています。


Indexへ
(35328)←【35343】→(35334)
------------------------
【タイトル】Re(8):寸法の反転
【記事番号】 35343 (35328)
【 日時 】09/08/28 23:55
【 発言者 】ai

▼いっちさん:
本の紹介ありがとうございます。

>数値を書き戻した後の書き出し位置を、
>調整する方法を考えられたらいかがかと思います。

書き出し位置は全く考えていませんでした。
そういえば必要ですね。
わかるかどうか不明ですがそちらも見てみたいと思います。


Indexへ
(35343)←【35334】→(35336)
------------------------
【タイトル】Re(7):寸法の反転
【記事番号】 35334 (35326)
【 日時 】09/08/28 16:35
【 発言者 】ひでと

横から失礼します。VBで「連続寸法線」という外変をつくっています。

>>図面を上下反転させた場合(上下反転でコード作成)
> 寸法線が水平の場合処理
> 寸法線が右上がりの場合処理
> 寸法線が左上がりの場合処理
>
>データは見てるのですが、第1・3象限、第2・4象限はそれぞれ同じ扱いでいい気がしてしまいます。
>(右上がりか右下がりかを判別して処理)
>何か変わるのでしょうか?

右上がりか逆かの判定でいいと思います。
「連続寸法線」で使用してるのは こんな感じの処理です(そのまんまで記載してますので 雰囲気だけでお願いします)

  Private Sub 寸法書き込み()
    Dim i As Integer
    For i = 0 To 寸法文字.Count - 1
      寸法文字長 = m_len(寸法文字(i), hcw, hcd)
      dex = 寸法文字長 / 2 * Math.Cos(Math.Abs(補助線角度) * 2 / 360 * Math.PI)
      dey = 寸法文字長 / 2 * Math.Sin(Math.Abs(補助線角度) * 2 / 360 * Math.PI)
      線中心.x = (目標点(i).x + 目標点(i + 1).x) / 2
      線中心.y = (目標点(i).y + 目標点(i + 1).y) / 2
      If Math.Abs(補助線角度) = 90 Then
        Select Case 文字逃げ方法(i)
          Case 0 : 垂直逃げ方法0の場合()
          Case 1 : 垂直逃げ方法1の場合()
          Case 2 : 垂直逃げ方法2の場合(i)
        End Select
      Else
        Select Case 文字逃げ方法(i)
          Case 0 : 逃げ方法0の場合()
          Case 1 : 逃げ方法1の場合()
          Case 2 : 逃げ方法2の場合(i)
        End Select
      End If
      Dim JFile As IO.StreamWriter
      JFile = New IO.StreamWriter(TEMP_TXT, True, System.Text.Encoding.Default)
      JFile.WriteLine("lt1")
      If 属性 = 1 Then
        JFile.WriteLine("z3")
      Else
        If 属性 = 0 Or 属性 = 2 Then JFile.WriteLine("msg")
      End If
      JFile.WriteLine(目標点(i).x & " " & 目標点(i).y & " " & 目標点(i + 1).x & " " & 目標点(i + 1).y)
      JFile.Close()
      文字JW記入(文字.x, 文字.y, 補助線角度, 寸法文字(i))
    Next i
  End Sub

  Private Sub 逃げ方法0の場合()
    隙間 = 寸法線と文字の間隔 * curScale
    隙間x = 隙間 * Math.Sin(Math.Abs(補助線角度) * 2 / 360 * Math.PI)
    隙間y = 隙間 * Math.Cos(Math.Abs(補助線角度) * 2 / 360 * Math.PI)
    Dim 文字高さ距離, 文字高さx, 文字高さy As Double
    文字高さ距離 = hch * curScale
    文字高さx = 文字高さ距離 * Math.Sin(Math.Abs(補助線角度) * 2 / 360 * Math.PI)
    文字高さy = 文字高さ距離 * Math.Cos(Math.Abs(補助線角度) * 2 / 360 * Math.PI)
    Dim 文字下面センターx, 文字下面センターy As Double
    If 補助線角度 > 0 Then '右上がり
      文字下面センターx = 線中心.x - 隙間x
      文字下面センターy = 線中心.y + 隙間y
      文字.x = 文字下面センターx - dex
      文字.y = 文字下面センターy - dey
    Else
      文字下面センターx = 線中心.x + 隙間x
      文字下面センターy = 線中心.y + 隙間y
      文字.x = 文字下面センターx - dex
      文字.y = 文字下面センターy + dey
    End If
  End Sub


>
>
>因みに寸法線から寸法値の座標までの直角距離がすでに出せません。

寸法線を y=mx+nとして m=(y2-y1)/(x2/x1)
直行する線を y=m'x+n' とすると
m*m'=-1となりますので m'の傾きが求められるはずです。


>
>寸法線の短点座標
>A(x1,y1) B(x2,y2)
>2点の距離
>AB = √(x1-x2)^2+(y1-y2)^2
>
>文字の起点
>C(sx1,sy1)
>
それが cx1,sy1をとおるので n'がもとめられます。
>C点から寸法線に直角になるように線をひいた場合の交点D
y=mx+nとy=m'x+n'の連立方程式をときます。

雰囲気だけですので、参考にならないかもしれませんが・・・
外変をつくるとき 三角関数と方程式は必須だと思います。
いつも 辛い思いをしております。


Indexへ
(35334)←【35336】→(35364)
------------------------
【タイトル】Re(8):寸法の反転
【記事番号】 35336 (35334)
【 日時 】09/08/28 16:38
【 発言者 】ひでと

>
>寸法線を y=mx+nとして m=(y2-y1)/(x2/x1)
早速間違え
m=(y2-y1)/(x2-x1)ですね。失礼しました。


Indexへ
(35336)←【35364】→(35379)
------------------------
【タイトル】Re(9):寸法の反転
【記事番号】 35364 (35336)
【 日時 】09/08/29 23:58
【 発言者 】ai

▼ひでとさん:
丁寧にご説明ありがとうございます。

解読能力が低いので自分に理解できるかはまだ不明ですが、
VBということでなんとなくコード内容はわかりそうな気がしています。
時間はかかってしまうと思いますが、理解に努めたいと思います。

三角関数や方程式はうまく理解できないし
社会に出て使うことなんてないだろうから平気だろうと思っていたのですが
いまさら理解したくなっています。
勉強って大切ですね。

理解力が無いためいまだに悩んでいますが、
直交の条件式を提示していただいたおかげで出来そうな気がしています。


三角形の公式ばかり調べていて直線の公式が分からず悩んだのですが、
(mとnが傾きと切片という事に気が付けなかった)
気がついて目から鱗でした。


まだまだ時間がかかりそうですが、下記サイトみつつ頑張り中です。
http://w3e.kanazawa-it.ac.jp/math/category/kika/henkan-tex.cgi?size=3&target=/math/category/kika/index.html


追記:
2直線はもとまったので連立方程式を調べてたんですが
http://homepage1.nifty.com/gfk/cross.htm
http://homepage1.nifty.com/gfk/renritu-excelvb.htm
みても全く理解できずできる自信がなくなりました。
ギブアップ宣言させていただきますorz


Indexへ
(35364)←【35379】→(35380)
------------------------
【タイトル】Re(10):寸法の反転
【記事番号】 35379 (35364)
【 日時 】09/08/31 11:56
【 発言者 】ひでと

▼aiさん:

>三角関数や方程式はうまく理解できないし
>社会に出て使うことなんてないだろうから平気だろうと思っていたのですが
>いまさら理解したくなっています。
>勉強って大切ですね。
>
>理解力が無いためいまだに悩んでいますが、
>直交の条件式を提示していただいたおかげで出来そうな気がしています。
>
がんばってください。 つーか お互いがんばりましょう
>
>三角形の公式ばかり調べていて直線の公式が分からず悩んだのですが、
>(mとnが傾きと切片という事に気が付けなかった)
>気がついて目から鱗でした。
>
もうちょい 記入してみます
>因みに寸法線から寸法値の座標までの直角距離がすでに出せません。

寸法線を y=mx+nとして m=(y2-y1)/(x2/x1)
直行する線を y=m'x+n' とすると
m*m'=-1となりますので m'の傾きが求められるはずです。
m'=-1/m

>
>寸法線の短点座標
>A(x1,y1) B(x2,y2)
>2点の距離
>AB = √(x1-x2)^2+(y1-y2)^2
>
>文字の起点
>C(sx1,sy1)
>
それが sx1,sy1をとおるので n'がもとめられます。
y=m'x+n'なので
sy1=m'*sy1+n'
n'=sy1-m'sy1

>C点から寸法線に直角になるように線をひいた場合の交点D
y=mx+nとy=m'x+n'の連立方程式をときます。
mx+n=m'x+n'
(m-m')x=-(n-n')
x=-(n-n')/(m-m')
y=m'x+n'

で交点が求められます
とりあえず ここまで
寸法線に対して反転する処理は 今考え中ですwww


Indexへ
(35379)←【35380】→(35387)
------------------------
【タイトル】Re(11):寸法の反転
【記事番号】 35380 (35379)
【 日時 】09/08/31 13:18
【 発言者 】ひでと

いちおう 考えてみました。
こんな感じで新しい文字の基点がでます
ただ文字の基点を変更するだけですと、寸法線と文字の位置が近くなりすぎたり
してしまいますので、そのあたりの補正が必要です。

たとえば 水平寸法を書いたとすると、文字の基点は寸法線のすぐ上にあります。
これを単純に基点を対称に移動すると寸法線と文字が重なることになりますね。
これを解消する為に文字基点を変更するか、基点は変更しないで基点の座標を変更
するかの処理が必要となります。後者の場合は 文字の大きさを計算してあげないといけないわけです・・・。

Public Class Form1
  Private Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim x1, y1, x2, y2, sx, sy As Double
    x1 = Me.x1.Text
    y1 = Me.y1.Text
    x2 = Me.x2.Text
    y2 = Me.y2.Text
    sx = Me.sx.Text
    sy = Me.sy.Text
    Dim cx, cy As Double
    交点を求める(x1, y1, x2, y2, sx, sy, cx, cy)
    Me.cx.Text = cx
    Me.cy.Text = cy
    Dim nx, ny As Double
    対称点を求める(x1, y1, x2, y2, sx, sy, cx, cy, nx, ny)
    Me.nx.Text = nx
    Me.ny.Text = ny
  End Sub
  Private Sub 交点を求める(ByVal x1, ByVal y1, ByVal x2, ByVal y2, ByVal sx, ByVal sy, ByRef cx, ByRef cy)
    Dim m, n, m1, n1 As Double
    m = (y2 - y1) / (x2 - x1)
    n = y1 - m * x1
    m1 = -1 / m
    n1 = sy - m1 * sx
    cx = -(n - n1) / (m - m1)
    cy = m1 * cx + n1
  End Sub
  Private Sub 対称点を求める(ByVal x1, ByVal y1, ByVal x2, ByVal y2, ByVal sx, ByVal sy, ByVal cx, ByVal cy, ByRef nx, ByRef ny)
    Dim m, m1, Q, L As Double
    m = (y2 - y1) / (x2 - x1)
    m1 = -1 / m
    Q = Math.Atan(m1) * 180 / Math.PI
    L = ((cx - sx) ^ 2 + (cy - sy) ^ 2) ^ 0.5
    If cx < sx Then
      nx = cx - L * Math.Cos(Q / 180 * Math.PI)
      ny = cy - L * Math.Sin(Q / 180 * Math.PI)
    Else
      nx = cx + L * Math.Cos(Q / 180 * Math.PI)
      ny = cy + L * Math.Sin(Q / 180 * Math.PI)
    End If
  End Sub
End Class


Indexへ
(35380)←【35387】→(35381)
------------------------
【タイトル】Re(12):寸法の反転
【記事番号】 35387 (35380)
【 日時 】09/08/31 14:38
【 発言者 】ai

▼ひでとさん:

データ提示ありがとうございます。
理解できるかどうかは自信がないですが見てみます!

sugiさんに
http://hpcgi2.nifty.com/jw_cad/c-board.cgi?cmd=one;no=35377;id=004
で聞いている件と近いのですが、
図寸でデータ取得していまして、
文字サイズに関しましてはjwにエクセルに取得済みなので
勘違いでなければそこは大丈夫だと思います。
※自作データのエクセルのセル上に文字サイズ(hch)が落ちています

jwデータの
hch 4 4 4 5 3 4.5 4 10 6 2.5
で文字種1〜10の文字高さ取得

freeの文字種は
cn0 4.11765 3.5 0 6
からデータ取得して、
文字種変わるごとに文字高を書き換えて取得しエクセルに排出しています

該当箇所
'文字高さ取得(hchから文字種1〜10の文字高取得)
  Case ss(i) Like "hch*"
    hch = Mid(ss(i), 5, Len(ss(i)) - 4)
    hch = Split(hch, " ")

    '文字種取得
    Case ss(i) Like "cn*"
      Select Case True
        '1〜9の文字種の場合
        Case Len(ss(i)) = 3
          cn = Right(ss(i), 1)
          hchk = hch(cn - 1)
        '文字種10場合
        Case Len(ss(i)) = "cn10"
          cn = "10"
          hchk = hch(9)
        ’Freeの場合
        Case ss(i) Like "cn0*"
          cn = "0"
          ss2 = ss(i)
          ss2 = Split(ss2, " ")
          hchk = ss2(2)
      End Select

ss : jwc_tenmp_textのデータを改行コードで分割して配列におさめたもの。
hch : 各文字種の文字高さ
hchk : 取得した寸法の文字高さ


※hch,hchkは

    Case ss(i) Like "cs*" And k < j
        ss2 = ss(i)
        ss2 = Split(ss2, " ")
        tmpv(1, j) = ss2(1)
        tmpv(2, j) = ss2(2)
        tmpv(3, j) = ss2(3)
        tmpv(4, j) = ss2(4)
        tmpv(5, j) = Mid(ss2(5), 2, Len(ss2(5)) - 1)
        tmpv(6, j) = cn
        tmpv(7, j) = hchk
        tmpv(8, j) = gl
        tmpv(9, j) = glb
        tmpv(12, j) = j
        k = k + 1

の部分で寸法図形があるごとに配列に取得して後で一気に書き込む。


書いてて気がついたのですが、下記間違ってました。
'文字種10場合
Case Len(ss(i)) = "cn10"

Case ss(i) = "cn10"
もしくは
Case Len(ss(i)) = 4
にするつもりでした。

cn*の3文字の場合は文字種1〜9
cn10の場合は文字種10
cn* それ以外でcnから始まるもの  ※caseを最後に記入したらうまくいくのでElseIFみたいな
                  除外記述は無くても大丈夫かなという安易な判断です。


Indexへ
(35387)←【35381】→(35314)
------------------------
【タイトル】Re(11):寸法の反転
【記事番号】 35381 (35379)
【 日時 】09/08/31 13:36
【 発言者 】ai

▼ひでとさん:
丁寧にありがとうございます。
こちらに書いていなかったのですが、
http://hpcgi2.nifty.com/jw_cad/c-board.cgi?cmd=one;no=35369;id=004
の方法で考えていました。

連立方程式は手計算はできるのですが
VBAでの連立方程式のとき方が
ガウス・ザイデル法
http://homepage1.nifty.com/gfk/renritu-excelvb.htm
2次元の場合のとき方
http://www.asahi-net.or.jp/~ap8h-ykkr/gauss817.html
などををみてもわからず行き詰っていたのですが、

http://www.d-b.ne.jp/nogami/parthtml/exf33.html
のデータ内に関数だけで方法がのっているようなので、
そちらでとこうかと思ってます。(式がものすごく長くなりますが)

あと、
http://polymer.dept.eng.gunma-u.ac.jp/renritu.pdf
のヤビコ法の説明が丁寧っぽいので再勉強中です。

sugiさんやひでとさんが提示してくださったデータも見つつで
混乱がさらに激しくなってきてますorz

いろいろ方法があるのにどれも理解までたどり着けず、
いきづまったら別の方法を探して、
あっちに手を出しこっちに手を出しと行ったり来たりしています。


Indexへ
(35381)←【35314】→(35323)
------------------------
【タイトル】Re(2):寸法の反転
【記事番号】 35314 (35296)
【 日時 】09/08/27 22:47
【 発言者 】joyman

▼aiさん:
>*excelでデータ変換
試させて頂きましたが、うまく動きました。
ただ、外部変形実行回数分のEXCEL.EXEプロセスが常駐したままになっています。


Indexへ
(35314)←【35323】→(35331)
------------------------
【タイトル】Re(3):寸法の反転
【記事番号】 35323 (35314)
【 日時 】09/08/28 01:37
【 発言者 】ai

▼joymanさん:
報告ありがとうございます。
自分に原因がわかるかどうかが不明ですが、
明日会社で見てみようと思います。


Indexへ
(35323)←【35331】→(35340)
------------------------
【タイトル】Re(4):寸法の反転
【記事番号】 35331 (35323)
【 日時 】09/08/28 12:16
【 発言者 】いっち

▼aiさん:
>自分に原因がわかるかどうか

症状の再現方法を、教えてください。


Indexへ
(35331)←【35340】→(35341)
------------------------
【タイトル】Re(5):寸法の反転
【記事番号】 35340 (35331)
【 日時 】09/08/28 23:46
【 発言者 】ai

▼いっちさん:
昨日寸法反転用エクセルを実行してから、
置換実行のまでに5分ほど間をおいていたらエラーメッセージが
出たことがあったので(その際はエラーメッセージをよく確認してませんでした
vbsが書き込み拒否みたいなメッセージだったと思います)
それかと思っていたのですが、
今日同じ事をしてみてもエラーにならなかったため原因がわかりませんでした。

タスクマネージャーの調子が悪いので(jwに関係なく調子が悪いです)
自分ののエラーはそちらが原因だったのかもしれません。


Indexへ
(35340)←【35341】→(35346)
------------------------
【タイトル】Re(3):寸法の反転
【記事番号】 35341 (35314)
【 日時 】09/08/28 23:48
【 発言者 】ai

▼joymanさん:
すみません、状況が再現できませんでした。
自分に分かるかどうか不明ですが、
よろしければどのような環境で、
どういう操作をしたか教えていただきたいです。


Indexへ
(35341)←【35346】→(35353)
------------------------
【タイトル】Re(4):寸法の反転
【記事番号】 35346 (35341)
【 日時 】09/08/29 10:04
【 発言者 】joyman

▼aiさん:
>よろしければどのような環境で、
>どういう操作をしたか教えていただきたいです。

当方の環境は、
CPU Q6600
Mem 3GB
HDD 250+250GB
VGA Gefoece 8800GT
  24inch x2
WindowsXP HE SP3
Excel 2002 SP3
Jw-cad Ver6.21a C:\jwwにインストール
Excel寸法反転 は、C:\jwwに直に入れました。

新規に1つ寸法を描き、反転した物を使用。
寸法図形1つのみ選択し実行しています。
Excel上の反転ボタンを押して×ボタンを終了しました。(上書きしてからも同様)
EXCEL.EXEがプロセスに残ったままになっています。
何回も実行すると、動作は正常なのですが、EXCEL.EXEが実行回数分残っています。
スタートアップのみですが、常駐物を無効にして起動しても同じでした。
ただ、サブ機のPEN4 2.26G WinXP HE SP3 Excel2000 のマシンでは、
正常に実行され、EXCEL.EXEもプロセスからも正常に終了し消えていますので、
当方のマシンだけがおかしいのかもしれませんね。
一日のうち使っても数度なので、このまま使っていこうと思います。
有り難う御座いました。


Indexへ
(35346)←【35353】→(35355)
------------------------
【タイトル】sugiさんデータ利用をお勧め
【記事番号】 35353 (35346)
【 日時 】09/08/29 12:18
【 発言者 】ai

▼joymanさん:
試してみたのですが状況が再現できませんでした、申し訳ありません。

自分じゃ原因がわからないのと、
自分のものだとエクセルを起動する必要があり動作が余計必要なので
sugiさんに作っていただいたコードがお勧めです。
http://hpcgi2.nifty.com/jw_cad/c-board.cgi?cmd=one;no=35347;id=004
※既に使っていましたら申し訳ありません。

* rubyが入ってない場合の前処置
 http://rubyforge.org/frs/?group_id=167
でruby186-26.exe導入(rubyが既にあるなら不要?)

* 実行作業
1.メモ帳を新規立ち上げし、上記sugiさんのデータをコピーし貼り付け
 ※(ここから)の下の行から(ここまで)の上の行までです
 ※(ここから)の下の行から(ここまで)の上の行きっかりにしてください。
   自分は改行を余計に入れてしまって失敗してしまってました。
2.ファイル名をhanten.batにし保存
3.出来上がったhanten.batをダブルクリック
4.圧縮ファイルが出てくるので解凍してその中のデータ取得
5.取得したデータを任意の場所に保存しjwから実行
 (任意の場所ですが、パスに空白が含まれている場合は×です)


Indexへ
(35353)←【35355】→(35359)
------------------------
【タイトル】Re(5):寸法の反転
【記事番号】 35355 (35346)
【 日時 】09/08/29 14:21
【 発言者 】いっち

joymanさん、並びにaiさんへ

vbsに問題があった場合を考えてみました。

もしこれで不具合が改善されなかったとしても、
joymanさんの動作結果を読ませて頂く限りは、
こちらの方が良いかと思います。

終了時、少し遅くなるのを感じることは、
あるかと思います。

aiさんも、「sugiさんに作っていただいたコードがお勧めです。」
と、おっしゃられていることですし、
ご無理にとは、申しませんが、お差し替えいただければ、
幸いです。

---- Excel寸法反転.vbs の修正版です。 ----

Option Explicit
Private myBook, myBookName
myBookName = "Excel寸法反転.xls"
With WScript
  myBook = Replace(.ScriptFullName, .ScriptName, myBookName)
End With
With CreateObject("Excel.Application")
  .Visible = True
  .Workbooks.Open(myBook)
  Do
    If Not .UserControl Then
      With CreateObject("WScript.Shell")
        If Not .AppActivate(myBookName) Then Exit Do
        '.AppActivate(myBookName)の実行結果を判断
        'しなければならない時は、
        '.AppActivate(myBookName)の
        '実行間隔を多めにとる。
        WScript.Sleep 900
      End With
    End If
    '.UserControlの状態を取得出来ている間は、高速ループ
    'により、終了時の動作を速くする。
    WScript.Sleep 100
  Loop
End With


Indexへ
(35355)←【35359】→(35300)
------------------------
【タイトル】Re(6):寸法の反転
【記事番号】 35359 (35355)
【 日時 】09/08/29 15:51
【 発言者 】ai

▼いっちさん:
いつも本当にありがとうございます。
掲示板のほうのデータは訂正させていただきました。

※自分がミスったので書き込み(下記を忘れて度々失敗してしまっていますorz)
 この掲示板は投稿時に半角スペースが全角スペースに変換されてしまうので
 データをコピーしてVBSを自力で書き換える場合は全角スペースを半角スペースに
 置換する必要があります。同じミスをしないようにお気を付けを!


Indexへ
(35359)←【35300】→(35306)
------------------------
【タイトル】Re(1):寸法の反転
【記事番号】 35300 (35254)
【 日時 】09/08/27 18:16
【 発言者 】sugi

sugiです。aiさん、こんにちは。

aiさん wrote:
> 反転した際に寸法値と寸法線の位置関係が通常と逆になるのを
> 一括で訂正できる外部変形はあるのでしょうか?

以前、こういった外部変形を考えたことがあるような気がしてたの
ですが、AFさんのブログで思い出しました。^^;;

「hanten.bat」を実行後、作成された「寸法反転.lzh」を展開して
外部変形のバッチファイルを取り出して下さい。使い方はなんとな
く分かると思います。

=== hanten.bat (ここから) ===
ruby -Ks -x "%~f0"
exit

#! ruby
$stderr=open("error.log","w")
$stdout=open("寸法反転.lzh","wb")

print "
JUktbGg1LRsEAAD6CAAAUI8bOyABDJChlkCUvZNdLkJBVGhcTQUAQCAAAAAD
k2ub1bbVG52l7v/PTUzcjjkbtOGJM1uyoIQUyVQrwuPYd9PSuUbbmbcltllE
o7wlSFi41ASOASDgEgSOLLAkJbgEtyGSOg6Dku5zg95vzcepdrwUSEjiOgSP
gCYO6xtNvaevq6wcf0/Lp8ni77YktMpHYQhv3xJHUVtvc3BT8SXhJbUMkIaC
6ELpM29xoec2QOHf4e1w9+Xl73sd7ll8Mvj4vxl8Ev1ZuugJdf5m3Kf2n7Sm
Xi8pveupl+T7+7850c3A6TKh4uLoL9nJQFL0wCGbe5JxDk8nweSc8oZZKGbJ
Q8FQguMC/sS4vL/wlo+eJVyOgeS6n9h6AOP96kFIM7F5w/SF/4eJK4aNrhpz
uGiS4YYJDh3g29wnbkK/hWk3ZAp6bLnvCSixbO8Fn2Yws7oaHv37YaC4aDAI
wAuavZ9YRxXsdnW1fb9wSR8Pvjel5T2+l8Mv6y/hmNfXj4Ph92XlPcnNqck6
nxnaZftl/SX8pful/aX7JfrNx8Xd+iX8/i7HH4PmwnwtP+rekFEBiSrVZPiS
6kcl4sUTMOEsCYzcYYlnodoao9wagpl0OKRC7zTGNDCJKIvcxYIih1X3JIsG
71RJOuQSFgZT1Nf19hbBAR7FeL1kxrjUCGIOdLojUUCtyTQfjjVxlVx5Gdgp
JIYmratttXY6eYkn3FX49pV0jqp/6BnWmgBpqZqmZG1barR/FsSUP8SGazQ1
FoiuXnsEBY1iuEd38p+ZtKgAjkZQP1EbpuOlgC12ne5aP1AMOKSMBu3hizrL
sdiz1rt61Uw0PwA9Ay8botHhewSLEheeNJG/lLlAq0kPbv8E7NjjZRPL0DVt
tV6BpdttCstStiZXo0q8lU92V21Wl1TT5XTxls441K6a9pOfktEpO5YL4IWt
W22WbYpkoA+4zQFWTgh6jr0E5XoyioaGUCTS7dA6YKF0A6a9l+vXYUtJr2Ju
CrFd+no2rQdADTFShWz6HimB4L1VeTYAdNdTKP8rsgFJBd/m3hsWc4LPFhhg
kBrCzAp6lkgWjwZC+quKhe6R1ozHbbaYWWNZM7VgbDO1ssr1HyZI8pIspIcp
MKiMZiSb2ErPU9NBnGz6IGjaXWW0m2SI4Lf1i0Z+Rh+dsbVM9sN0YfkLzLLB
vOihiPz0s7RGwy+4bFgkZ74WMcdIDQoLzKK2GbSvDIA7GMz6saE3FtuHAbYs
BoyMfh28B5D9RtaPFsp2ro7Sox58qZ/hQownPAbRD0bVPA7FnHkrkdUPNrh0
JTITJkIM+Lo7ox2HzFVgd2Aba195ySkW82bVRAcNWoGDlRu/+jE+Vc0jm+K4
19en5BDJc4jzrtKihaMmz1HpqEHRIHPmBTARz+3VpybvaQ/UuQZ2qbJ84uCI
WF0aPGG+A/0CgAA=
".unpack("m")
=== hanten.bat (ここまで) ===

--
sugi


Indexへ
(35300)←【35306】→(35313)
------------------------
【タイトル】Re(2):寸法の反転 訂正
【記事番号】 35306 (35300)
【 日時 】09/08/27 19:51
【 発言者 】ai

 こんばんは。
置換の際にデータ頂きましてありがとうございました。、
スクリプト集の文字にソリッド色付けは頻繁に活用させていただいています。
ありがとうございます。

データなのですが、実は以前も試させていただいていました。
斜めにも対応していただいているのですが
寸法線から寸法値までの距離が遠くなってしまうため活用しておりませんでした。


いろいろ試しているうちに混乱して発言が迷走していましたが、
希望通りの反転動作をする場合と、希望通りにならない場合と2通りになりました。

うまくいかない場合の1例をあげると、
正方形の左と下に寸法を記入し、上下反転した後に
外変を実行すると、寸法線と寸法値の位置関係が
上下、左右両方反転されてしまいます。
希望動作は上下のみ反転です。


線から離れるという件ですが、

______________
    100


になっているのが、実行をかけると


    100

______________

となります。


今回試した状況は図面の縮尺は1/10で、文字高さは3.5、左右・上下の寸法入り乱れです。
何か設定があるのでしょうか?


Indexへ
(35306)←【35313】→(35325)
------------------------
【タイトル】Re(3):寸法の反転 訂正
【記事番号】 35313 (35306)
【 日時 】09/08/27 21:41
【 発言者 】sugi

sugiです。aiさん、こんにちは。

aiさん wrote:
> データなのですが、実は以前も試させていただいていました。
> 斜めにも対応していただいているのですが
> 寸法線から寸法値までの距離が遠くなってしまうため活用しておりませんでした。

反転させたい寸法のみ選択させるつもりで作っていたので、正常な
寸法線を反転させた場合は動作がおかしくなるのですが、今回は一
括で寸法を選択するんでしたね。

ちょっと直してみたのですが、これで確認してみて下さい。
動作確認はあまりしていないので、おかしな点があれば教えて下さ
い。

=== hanten.bat (ここから) ===
ruby -Ks -x "%~f0"
exit

#! ruby
$stderr=open("error.log","w")
$stdout=open("寸法反転.lzh","wb")

print "
JaYtbGg1LcQEAABdCgAAbKsbOyABDJChlkCUvZNdLkJBVG9sTQUAQCAAAAAE
L2t71cbVGbxLz/8l1NJ3Tp0nWjA5ENsZYEIMVKoVYzprp3u9NOpOkmnp0uvb
sJdMxKAsXbUBIYCQMBIEhllgSEswEs02QOBxmlzcYe9J6Tu112GFEhIZDgSP
gCZ73aNpt3l6/O54b31fNy9/vdtwSXLIN+IInnhJHUaW1t7YqeI8AkulFLEG
myhC+PNubyHnNkDr9Xr9Dr9ufg7Ps9ngn7s/f3fyn7k/15vWQEv4uFtyn+1P
bVy7vjN966uX5fw7H0HR0cDpMqHi6ygvv5KgpmuAQzbm/SIb/h+Dw0nlTLLU
zZKngiEF24L+xLd8f/CWp5olZG+B5L0P9yCEN799CCsGfk8wfqi/8PEldNG1
0053TRJdMMDij3A2tsezKTFGvL1JQr6X3feElJjv7gWvaKFrqBp++8wGmyGn
cBGAF3na3riOK83W5/O9z3RJHw+7UE/Ae30/dn/af8cxr673W+Poz8B7k5uZ
v0qe+dpn+6f9Z/zn++fxT/bP9huPe7H0z+D5Obvdz54z4Wn/9L0AqgMSWloy
fElyCy4CSSNRRkhUTNxikXgi6Saye2mqKhdFjlQu8kxpoYRJSE6ePDIQOTid
lkw9TknRjgdKUNgg5YpBJAGAjwDkiKXZjkiwYxyqTKhpfDrb36T+DteL4uid
jABtFJA82w5YmbZctUdGXDdGHBUMEhJcckIFjkwwyvKJ6bC/pvJrDVXli2Xj
ghIcAkqPgST7sMpIWlOZr+xsL4YRwY8BOUomymqEUgcSXUTVVDS36KLTFWmI
tNka2KJAbYWYcW2OPmJLE6tiL0lnxvrH/IWufRQdtuhqoZHFmFmz/DAkovLU
o2EKaq8hHcEGGEhVyOjf6uU/PKeTxulIB+p6Abb5IQt9B/p26aHR45Sgm/gT
FnWXi2bXKvYLehhqfgCCFqA3RcscGGVccUEBpI6uUmUCUVB61LNMVpE8wQmr
2tBCawziFZNCu5Qr1K1eTRPdplxZtlY0+WFJiWpiq2FGbalPJeRWlywvAha2
w400xTgQAYnWqgq0cEPUdmonJAUgqmhpAk2y5UOt1YX8IOozaxWLFxW2ozZo
4LXLGKvo4tUdADdzQoWted4rgc+M+eyw3+OuplH+V2QCjhvfzbw2LOcFRpg+
0OE1haAU9Sxwrlw5CeqyKpe+N9szGw43cXXNZM7VhcDO1tNM6D5QZco5Mo4s
o41UYzDl3IyNcj0UGZWvPAxW2V19VxoaOC/9YtGfkYfnbHFjPdxyrD8ZOFZZ
N86iGI/PVztDzWdopYtCzJx5DGdbBsgphvL1Y/Gg641idNlCMp8ObMxa4KqU
E4VGKLawnmf0nFy476lu8nbWTTz5m0+HSrEs482M9P1jkVy1NksDfVPRF06E
hkJkyEGfIFO8mnZxGKrKd6FNxd6B2WsW8mf2ggOGr1DByo3f/RinM+iRzeNI
2DPH5KAp86lP9xLtWqhYA6tfamPsgaGslThNG1MWyarF9fi9CFNgbd/iTuqq
1CB/BYpNGemSPCZTzN4TbMw8lN3MhruGQ+o0wuwwyKuJ+LU3y1GQuNTZfaiw
m8z4JqhVGVdFvI48QdWxnpuxo8Cpu9tATW5BnaqNezi4IgcX8b9GG+sf2qAA
".unpack("m")
=== hanten.bat (ここまで) ===

--
sugi


Indexへ
(35313)←【35325】→(35327)
------------------------
【タイトル】Re(4):寸法の反転 訂正
【記事番号】 35325 (35313)
【 日時 】09/08/28 02:03
【 発言者 】ai

▼sugiさん:
コメントを見て気がついたのですが、自分の場合利用目的からまちがっていた気がします。

もしかして寸法値が重なる場合や寸法値と寸法線の引き出し線が重なる場合などに
に重ならないように反転させるための外部変形だったのでしょうか?
実は今まで手作業で移動させていたので今そのことに気がついて
これから活用させていただこうと考えています。


新たに作っていただいた外部変形ですが、
自宅PCを初期化してしまいruby入れ直しはしたのですが、
違うrubyを入れてるのか外部変形を実行しても動きませんでした。
(ruby186-26.exeを導入でbatファイルから圧縮データ生成はできたのですが)
会社で試してみようと思います。

初期化前に入れていたものですが、
どのrubyか迷って手当たりしだい数個のrubyを導入して動くようになったんで
いっかなという認識だったので、どれが正解か不明のままでして・・・
申し訳ありません。

導入したのは
http://rubyforge.org/frs/?group_id=167
のruby186-26.exeと
http://arton.hp.infoseek.co.jp/indexj.html
のActiveScriptRuby 1.8.7(p174) with-winsock2です。

sugiさんのHPで紹介されていた
http://rubyforge.org/frs/?group_id=167
は自分のパソコンのデフォルトですとディスクトップにダウンロードされて
ダウンロード先の指定がわからず、
ダウンロードしたデータはフォルダ内にデータがいっぱいあってどう活用するのかも
よくわからず削除してしまいました。
(ダウンロードするデータを間違っていましたら申し訳ありません)


Indexへ
(35325)←【35327】→(35337)
------------------------
【タイトル】Re(5):寸法の反転 訂正
【記事番号】 35327 (35325)
【 日時 】09/08/28 09:45
【 発言者 】ai

▼sugiさん:

試させていただきました、ありがとうございます。
上下反転して実行した場合は、
寸法値の上もしくは左に統一され距離もOKでした。

ただ、左右反転して実行した場合は、寸法値の位置は寸法線の上もしくは左になるのですが、
寸法線の左に来る場合は寸法値が寸法線から遠い位置になってしまいました。
そちらもお願いしてよろしいでしょうか?


また、もしできるようでしたら、
文字が重なるのを避けたい場合に、寸法コマンドの寸法値 移動で手作業で寸法値を
寸法線の反対側に移動している場合にも対応していただきたいです。
(kityさんの外部変形の寸法回転にある寸法跳越し.batのような状態です
ttp://homepage2.nifty.com/kiti_ku/index.html)
※実行後に寸法値が上・左に固定されるのではなく、
寸法線を基準に左右反転or上下反転(選択したほうで反転)になってほしいです。

1.左右反転 寸法値と寸法線の位置関係を左右反転
2.上下反転 寸法値と寸法線の位置関係を上下反転
(左右反転したいのか上下反転したいのか判別できないと思うので分けないとだめな気がします)

コードの内容がわかっていないので無理を言っているようでしたら申し訳ありません。


Indexへ
(35327)←【35337】→(35344)
------------------------
【タイトル】Re(6):寸法の反転 訂正
【記事番号】 35337 (35327)
【 日時 】09/08/28 18:32
【 発言者 】sugi

sugiです。aiさん、こんにちは。

aiさん wrote:
> もしかして寸法値が重なる場合や寸法値と寸法線の引き出し線が重なる場合などに
> に重ならないように反転させるための外部変形だったのでしょうか?

もうお気づきだと思いますが、そういう主旨のものではありません。
寸法を反転させた時の修正のための外部変形です。

aiさん wrote:
> 導入したのは
> http://rubyforge.org/frs/?group_id=167
> のruby186-26.exeと

これが入っていれば多分動作すると思います。
うまく動作しない場合は
・BATファイルを pause で止めてエラーの内容を報告してもらう。
・「error.log」にエラーが書き出されている場合はその内容を報
告してもらう。
ということをしてもらえれば、問題解決の参考にすることができま
す。

aiさん wrote:
> ただ、左右反転して実行した場合は、寸法値の位置は寸法線の上もしくは左になるのですが、
> 寸法線の左に来る場合は寸法値が寸法線から遠い位置になってしまいました。
> そちらもお願いしてよろしいでしょうか?

これがうまく再現できません。不具合になる jwwファイルを圧縮し
たうえで下記の「encode.bat」にドラッグアンドドロップ。バッチ
ファイルができるはずなので、それをこの掲示板に貼り付けてもら
えませんか。検証してみます。

aiさん wrote:
> また、もしできるようでしたら、
> 文字が重なるのを避けたい場合に、寸法コマンドの寸法値 移動で手作業で寸法値を
> 寸法線の反対側に移動している場合にも対応していただきたいです。
> (kityさんの外部変形の寸法回転にある寸法跳越し.batのような状態です
> ttp://homepage2.nifty.com/kiti_ku/index.html)
> ※実行後に寸法値が上・左に固定されるのではなく、
> 寸法線を基準に左右反転or上下反転(選択したほうで反転)になってほしいです。

なんとなく分かるのですが、ちょっと面倒そう。^^;
これも jwwファイルに外部変形実行前と外部変形実行後の状態が分
かるように描いてもらえませんか。なんとかなりそうなら考えてみ
ます。

=== encode.bat (ここから) ===
ruby -Ks -x %~f0 %1
exit

#! ruby

$stdout=open(ARGV[0]+".bat","w")

puts <ruby -Ks -x "%~f0"
exit

#! ruby
$stderr=open("error.log","w")
$stdout=open(\"#{File.basename(ARGV[0])}\","wb")
print \"
#{[open(ARGV[0],"rb").read].pack("m")}\".unpack("m")
EOS
=== encode.bat (ここまで) ===

--
sugi


Indexへ
(35337)←【35344】→(35347)
------------------------
【タイトル】Re(7):寸法の反転 訂正
【記事番号】 35344 (35337)
【 日時 】09/08/29 03:40
【 発言者 】ai

▼sugiさん:
>もうお気づきだと思いますが、そういう主旨のものではありません。
>寸法を反転させた時の修正のための外部変形です。
勘違いしてしまい申し訳ありません。
頻繁に勘違いするので気をつけようとは思っているのですが、
なかなかうまくいかずすみません。

>これが入っていれば多分動作すると思います。
>うまく動作しない場合は
>・BATファイルを pause で止めてエラーの内容を報告してもらう。
>・「error.log」にエラーが書き出されている場合はその内容を報
>告してもらう。
>ということをしてもらえれば、問題解決の参考にすることができま
>す。
圧縮データが取り出せない件ですが、単純ミスでした。
データの最後に改行コードが入っていました。
削除して実行したところ上手くいきました。
失礼いたしました。


>なんとなく分かるのですが、ちょっと面倒そう。^^;
>これも jwwファイルに外部変形実行前と外部変形実行後の状態が分
>かるように描いてもらえませんか。なんとかなりそうなら考えてみ
>ます。

sugiさんがいつも鮮やかにコード作成していらっしゃるので
よく考えず、sugiさんならできるのかなと思って発言してしまってました。

作っていただければ嬉しいと思っただけで、
作っていただくことを強要したいわけではないので自分の作ってほしい
発言はあまり気にしないで頂ければありがたいです。


希望動作のjwデータの件ですが、
作成したデータをbatファイルにしてみたところ、
ものすごく文字数が多くなりスクロールするのも大変な感じになって
しまったので掲示板のほうにデータをあげさせていただきました。
お手数をおかけしてしまって申し訳ないのですが、
御確認いただきたいと思います。
http://ohayou-oyasumi.webdeki-bbs.com/ohayou-oyasumi_tree_p_47.html

※希望動作は「左右反転もしくは上下反転反転させたデータを全選択して一括処理」です。


Indexへ
(35344)←【35347】→(35352)
------------------------
【タイトル】Re(8):寸法の反転 訂正
【記事番号】 35347 (35344)
【 日時 】09/08/29 10:44
【 発言者 】sugi

sugiです。aiさん、こんにちは。

aiさん wrote:
> 希望動作のjwデータの件ですが、
> 作成したデータをbatファイルにしてみたところ、
> ものすごく文字数が多くなりスクロールするのも大変な感じになって
> しまったので掲示板のほうにデータをあげさせていただきました。
> お手数をおかけしてしまって申し訳ないのですが、
> 御確認いただきたいと思います。

不具合確認できたので、直してみました。
寸法跳越しのオプションも作ってみましたので、こちらの動作も確
認してみて下さい。思っている動作と違う場合はどうすれば良いか
教えて下さい。

=== hanten.bat (ここから) ===
ruby -Ks -x "%~f0"
exit

#! ruby
$stderr=open("error.log","w")
$stdout=open("寸法反転.lzh","wb")
print "
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
95IpwQITx76YGM3geweB0zgI5Ah4PE4DoG6wAA==
".unpack("m")
=== hanten.bat (ここまで) ===

--
sugi


Indexへ
(35347)←【35352】→(35354)
------------------------
【タイトル】Re(9):寸法の反転 訂正
【記事番号】 35352 (35347)
【 日時 】09/08/29 12:00
【 発言者 】ai

▼sugiさん:
即座の対応ありがとうございます。

試させていただいたところ、快適動作でした。
反転はものすごく活用させていただくことになると思います。

 反転
  寸法線が垂直の場合-寸法値を寸法線の左に移動
  寸法線が垂直以外の場合-寸法値を寸法線の上に移動
 強制反転
  寸法線が垂直の場合-左右反転
  寸法線が垂直以外の場合-上下反転

希望動作ですが、
強制反転が現状ですと、
「左右反転と上下反転両方をした場合」の希望動作になるので、
「左右反転した場合」と「上下反転した場合」も
追加していただけると更に嬉しいです。

※反転したら寸法の引き出し線とかぶるようになる場合もありますし、
 「反転」実行後手作業で移動してもいいのかなと思いだしていまして、
 自分でも考え中なので無視していただいても全然OKです。


Indexへ
(35352)←【35354】→(35363)
------------------------
【タイトル】Re(10):寸法の反転 訂正
【記事番号】 35354 (35352)
【 日時 】09/08/29 13:49
【 発言者 】sugi

sugiです。aiさん、こんにちは。
うまく動作したようで良かったです。

aiさん wrote:
> 希望動作ですが、
> 強制反転が現状ですと、
> 「左右反転と上下反転両方をした場合」の希望動作になるので、
> 「左右反転した場合」と「上下反転した場合」も
> 追加していただけると更に嬉しいです。

ちょっと考えてみたのですが、具体的にどんな動作が希望なのか分
からないのでやめときます。^^;
やっぱりこの機能が欲しいという場合は外部変形実行前と外部変形
実行後の状態を描いた jwwファイルをアップしてみて下さい。

外部変形作成の舞台裏を紹介しておくと、この外部変形では線対称
の位置を行列を使って求めています。

上下反転(X軸反転)の場合の行列は
| 1 0|
| 0 -1|
左右反転(Y軸反転)の場合の行列は
|-1 0|
| 0 1|
一般式(X軸からの角度θ)は
| cos2θ sin2θ|
| sin2θ -cos2θ|
となります。

参考
http://yamasv.blog92.fc2.com/blog-entry-147.html

この一般式を用いれば上下反転も左右反転も右上りの寸法線も左上
りの寸法線も同じ式で計算できます。

で、折角一般式で計算させてるのに上下反転や左右反転に特化した
外部変形を改めて作る必要があるのか、とか、上下反転や左右反転
とした場合は斜めの寸法線はどうゆう動作をするのが正解か、など
と考えると分からなくなってきました。

--
sugi


Indexへ
(35354)←【35363】→(35365)
------------------------
【タイトル】Re(11):寸法の反転 訂正
【記事番号】 35363 (35354)
【 日時 】09/08/29 23:45
【 発言者 】ai

▼sugiさん:
>で、折角一般式で計算させてるのに上下反転や左右反転に特化した
>外部変形を改めて作る必要があるのか、とか、上下反転や左右反転
>とした場合は斜めの寸法線はどうゆう動作をするのが正解か、など
>と考えると分からなくなってきました。

想像よりはるかに高度な処理でした。

ひでとさんが解説してくださったような方法で、
左右反転の処理と上下反転の処理の2パターン分を1つのコードにまとめて
上下左右の同時反転しているのかと思っていたので、
まとめているのを分ければ処理できるのかと思っていました。
大変失礼いたしました。

反転する必要性があるのが自分でも自信なくなってきていますし、
作っていただいたコードの反転の動作が快適ですし、
左右・上下別々に反転というのはなかったことにお願いします。
sugiさんの方法はは習った記憶はかすかにあるのですが、
学生時代もろくに理解できてなかった方法です。
何に利用するのか全く想像できなかったのですが、
こういう事に活用されているんですね。

利用方法がわかっただけですがなんとなく嬉しい気がします。
理解できるように先生に気兼ねなく質問できる学生時代に
もっと頑張っとけばよかったとちょっと後悔中です。

因みに希望動作は掲示板に上げたデータの住戸に寸法を振っている物に入っています。
寸法が多く分かり辛い作りで申し訳ありません。
※どういう動作をしているのか分かりましたし、対応していただきたいわけではないので
 分かりやすいようにデータを作り直す予定はないです。

リクエストにこたえて外部変形を作成していただき本当にありがとうございました。
多用させていただくと思います。


追記
見た記憶はあるけど理解できていないとは思ってたんですが、
sugiさん提示の件って連立方程式だったんですね、
いかに理解できてないかが丸わかりで恥ずかしい限りです。

ひでとさんに教えてもらった方法で2直線もとまって、
エクセルで連立方程式ってどうやるんだろうて調べてまして
http://homepage1.nifty.com/gfk/cross.htm
見てやっとわかりました。


Indexへ
(35363)←【35365】→(35368)
------------------------
【タイトル】Re(12):寸法の反転 訂正
【記事番号】 35365 (35363)
【 日時 】09/08/30 02:20
【 発言者 】sugi

sugiです。aiさん、こんにちは。

aiさん wrote:
> 見た記憶はあるけど理解できていないとは思ってたんですが、
> sugiさん提示の件って連立方程式だったんですね、
> いかに理解できてないかが丸わかりで恥ずかしい限りです。

#35354 のは行列による変換なので、連立方程式とはちょっと違い
ます。行列を利用して連立方程式の解く場合ですが、

a1*x+b1*y=c1
a2*x+b2*y=c2
という式を行列で表わすと
|a1 b1||x| |c1|
|   || |=| | ---[1]
|a2 b2||y| |c2|

 |a1 b1|
A=|   |
 |a2 b2| とすると

Aの逆行列
-1    1    | b2 -b1|
A = ------------- |    |
   (a1*b2-b1*a2) |-a2 a1|
を [1]式の左からかけて
|x|    1    | b2 -b1||c1|
| |= ------------- |    || |
|y| (a1*b2-b1*a2) |-a2 a1||c2|
として解くことができます。

# とここまで書いて aiさんの提示されたホームページのリンク先
# に既に説明されていることに気が付いた。orz

外部変形で線の交点を求める場合は線の端末の4点が分かっている
ので、ベクトルの外積を利用する方法が便利です。線の交点を求め
るのにベクトルの外積を利用した ruby の外部変形の例を下記に置
いてあります。分かりづらいかもしれませんが、余裕があるような
ら参考にしてみて下さい。
http://homepage2.nifty.com/igus/starthp/kouza/doc/vector.html

--
sugi


Indexへ
(35365)←【35368】→(35369)
------------------------
【タイトル】Re(13):寸法の反転 訂正
【記事番号】 35368 (35365)
【 日時 】09/08/30 11:50
【 発言者 】sugi

sugiです。aiさん、こんにちは。
自分のための覚え書きも兼ねてちょっと補足。:-)

sugi wrote:
> |x|    1    | b2 -b1||c1|
> | |= ------------- |    || |
> |y| (a1*b2-b1*a2) |-a2 a1||c2|

こう書くとなんだか難しそうにみえますね。
実際に ruby で連立方程式の解を求めるのは、こんな具合に簡単に
できます。

=== 連立方程式.bat (ここから) ===
ruby -Ks -x %~f0 %1 %2
pause
goto :EOF

次の連立方程式を解く
5x-y=0
4x-y=-2

#! ruby -Ks

require 'matrix'
require 'mathn'

a1,b1,c1,a2,b2,c2=5,-1,0,4,-1,-2
mat=Matrix[[a1,b1],[a2,b2]]
vec=Vector[c1,c2]
p mat.inv*vec #=> Vector[2,10]
=== 連立方程式.bat (ここまで) ===

--
sugi


Indexへ
(35368)←【35369】→(35371)
------------------------
【タイトル】Re(14):寸法の反転 訂正
【記事番号】 35369 (35368)
【 日時 】09/08/30 15:57
【 発言者 】ai

▼sugiさん:
丁寧な説明ありがとうございます。
丁寧に説明していただいているのは文体から分かるのですが
内容はさっぱり理解できておらず申し訳ありません。
(全部がわからないので、具体的に何がわからないと説明すらすることができません)

ちょっと気になったのですが、
>外部変形で線の交点を求める場合は線の端末の4点が分かっている
ので
3点ではなく4点なのでしょうか?


msg
%lg %lg %lg %lg      ( x1 y1 x2 y2 )
cs %lg %lg %lg %lg "文字列



msg
x1 y1 x2 y2
cs sx1 sy1 mx1 my1 "寸法

とすると

データ取り込み時に分かってるのが
(寸法線が右上がりの場合で左下を始点、寸法値は寸法線の上にあると仮定、
起点をREM #zcで指定する必要があるのかなとも思ってるんですが未検証です)

寸法線始点座標 A(x1,y1)
寸法線終点座標 B(x2,y2)
文字起点座標  C(sx1,xy1)

で位置がわかるのは3点だと思っていました。

線分ABを基準に反転させた場所を、

D(sx2,xy2)

とすると(sx2,xy2の実際の数値は分からない)
線分CDの中点Eは

E((sx1 + sx2) / 2 , (sy1 + sy2) /2)

となるのでそこら辺を使うのでしょうか?


***********************************************************************

※ここから下はこういうこと考えてましたという単純な報告で、
正答が知りたいとかいうわけではいです(よくわからず放棄中のため)
丁寧に説明していただいていているのに、
理解できてないのが申し訳ないのでかわりに自分はこう考えていましたという
迷走具合だけ報告しておいたほうがいいかなと。


因みに自分は点Cから線分ABに垂直線をひいた場合の交点を

交点座標 D(sx2,xy2) ←値は分からないので計算で算出

とし、
線分AB Y = a1 * X + b1
傾き  a1 = (y2 - y1) / (x2 - x1)
切片  b1 = ((x2 * y1) - (x1 * y2)) / (y1 - y2)

線分CD Y = a' * X + b'  
傾き  a2 = -1 / a1
切片  b2 = sy1 + sx1 * ((y1 - y2) / (x2 * y1 - x1 * y1)
※b2は計算した紙紛失して実際計算試し(失敗)の場合のなので
 たぶん違うと思います。

で線分で連立方程式を組んでD点を求め、で点Dから水平線を引いて、
その水平線と線分ABの角度が

θ=atan(a)x180/PI() ←こちらも計算した紙紛失、エクセルに置き換えた場合の式
 ※水平線と線分CDの角度は90-θ

距離 BC = √(x2-sx1)^2+(y1-sy1)^2
距離 CD = √(sx2-sx1)^2+(sy2-sy1)^2
角度 θ' = 90 - θ


ここから↓データ噴出でうろ覚え(いろいろ試してたんで間違いかも)

反転座標をEとして

E(sx3,xy3)

距離 CE = CD * 2 + 文字サイズ / 図面倍率

で三平方の定理で距離求めてそれを倍+文字サイズにして処理とかって考えてました。


悩みに悩みまくって迷走した結果で、
間違っていたり意味がわからなかったら申し訳ないです。


Indexへ
(35369)←【35371】→(35377)
------------------------
【タイトル】Re(15):寸法の反転 訂正
【記事番号】 35371 (35369)
【 日時 】09/08/30 16:33
【 発言者 】sugi

sugiです。aiさん、こんにちは。

まず、寸法を扱う場合
REM #bz
を入れておくと図面寸法でデータを読み込むため、図面の倍率を気
にせずに済みます。

私の場合ベクトルと行列を用いて計算させているのですが、使用し
ている主な変数と求め方は次の通りです。

寸法線始点    vs=Vector[ln[0],ln[1]]
寸法線終点    ve=Vector[ln[2],ln[3]]
寸法線の角度   rad=atan2((ve-vs)[1],(ve-vs)[0])
線対称の変換行列 ma=Matrix[[cos(2*rad),sin(2*rad)],[sin(2*rad),-cos(2*rad)]]
文字始点     vcs=Vector[cs[1],cs[2]]
文字方向     vcf=Vector[cs[3],cs[4]]
文字終点     vce=vcs+vcf
文字始点の寸法線対称点 vcs2=ma*(vcs-vs)+vs
文字終点の寸法線対称点 vce2=ma*(vce-vs)+vs

あと、文字の位置を補正するために次のものを求めています。

文字高さ方向(単位ベクトル)
vcz=Matrix[[0,-1],[1,0]]*vcf*(1/vcf.r)
文字始点から寸法線に降ろした垂点
vp=vs+a*(b.cross_product(vcs-vs)/b.cross_product(a))
(但し a=ve-vs,b=vcz*ch,cross_productは外積を求める)

ちょっと分かりづらいかと思いますが、この辺を気にしながらスク
リプトを読み込んでもらえると何をしているのか分かってくるんじゃ
ないかと思います。

--
sugi


Indexへ
(35371)←【35377】→(35392)
------------------------
【タイトル】Re(16):寸法の反転 訂正
【記事番号】 35377 (35371)
【 日時 】09/08/31 09:12
【 発言者 】ai

▼sugiさん:

>私の場合ベクトルと行列を用いて計算させているのですが、使用し
>ている主な変数と求め方は次の通りです。

いろいろあって見ててクラクラします。
複雑な処理をしているのに、外部変形変更の処理処理を即座にしていただき
本当にありがとうございました。

sugiさんコードですと回転処理があるので文字起点・
終点などもいると思うのですが、
自分の作成したいと思っている(挫折して無理ではありますが)
外部変形では反転だけで回転処理はないのでコード作成に当たっては
文字終点計算などは必要ないというのであっていますでしょうか?

sugiさんコードを理解するのに必要ですし理解に努めようとは思うのですが、
cs x1 y1 x2 y2 "寸法とすると、x1とy1を反転座標にかえるだけで
いいなら割かしコード作成が楽かと思って着手してたんで、
前提が完全崩してしまうので。
(そこまでいくと自分にはどうあがいても無理な気がします)


x1とy1をいじるだけでいいんじゃないかと思った要因ですが、
斜め寸法線を引く→複写でそれを選択→寸法線を基準に反転
で寸法値の位置の反転前と後のデータができるので、

自作のエクセル外変に取り込んでデータを見たら
の並びで下記になって

cs x1 y1 x2 y2 "寸法

X1       Y1         X2      Y2       寸法(cs)
-68.13011486 -320.0337059 227.3316685 1.31E+02 3464.1
-136.8801149 -200.9552129 227.3316685 1.31E+02 3464.1

となりx1とy1しかかわっていなかったので
反転した座標をX1とY1に入れるだけと予測し作業していました。


>REM #bz
>を入れておくと図面寸法でデータを読み込むため、図面の倍率を気
>にせずに済みます。
こちらですが、sugiさんの外部変形にも適用できるのでしょうか?

1つの図面に複数の倍率で書いているものを図面ごと反転した際にも
使いたいので全レイヤグループ選択のほうが嬉しいと思い、
sugiさんの外部変形を見たところ、bzが既にに記入済だったので
3か所あるREM #hcの下すべてにREM #g1を追加して、
グループ倍率入り混じりで試してみたのですが、
寸法値の記入位置が寸法線から遠くなったりしてしまいました。

設定方法を間違っているのでしょうか?


自分のデータですが、図面寸法にしてしまうと寸法線と寸法値の間の間の間隔が
分かりにくいかなと思うのでそのままにしようかと思っています。
(寸法線と寸法値の間の間の間隔を指定して左右反転とかも
作ればできそうかなと思っていて、
図面寸法にしていても計算すれば出ることではありますが
個人的には今のままのほうが分かりやすいかなと。)

追記:(削除書き直し多くてもうしわけありません)
野上哲朗さん作成エクセルデータが座標関連一式の式がある気がするので
そちらも見て勉強中です。
http://www.d-b.ne.jp/nogami/parthtml/exf33.html

計算関連の質問がかさんでますし、
batファイル記述やjwに関するデータ以外の質問は
ここで切って自力学習&数学関連掲示板や、
エクセル掲示板で別途聞こうかなと思っています。


それから、作っていただいたsugiさんのデータがレスに埋もれてしまっていることと
この掲示板内で上がったデータで公開先がわからず、
後から欲しいと思ってもログが消えて見つけれないという事もありますので
もしよろしければsugiさんのつくってくださったデータはsugiさんの
HPにアップしていただけると嬉しいです。


Indexへ
(35377)←【35392】→(35396)
------------------------
【タイトル】Re(17):寸法の反転 訂正
【記事番号】 35392 (35377)
【 日時 】09/08/31 20:44
【 発言者 】sugi

sugiです。aiさん、こんにちは。

aiさん wrote:
> sugiさんコードですと回転処理があるので文字起点・
> 終点などもいると思うのですが、
> 自分の作成したいと思っている(挫折して無理ではありますが)
> 外部変形では反転だけで回転処理はないのでコード作成に当たっては
> 文字終点計算などは必要ないというのであっていますでしょうか?

文字の始点、終点は文字の位置を高さ方向に位置を補正する際にも
利用するので求めておいた方が良いです。

aiさん wrote:
sugiさんコードを理解するのに必要ですし理解に努めようとは思うのですが、
cs x1 y1 x2 y2 "寸法とすると、x1とy1を反転座標にかえるだけで
いいなら割かしコード作成が楽かと思って着手してたんで、
前提が完全崩してしまうので。

x1,y1の他にx2,y2も変更しています。x2,y2は寸法の向きを表わす
ので垂直、水平の場合は変更不要ですね。

aiさん wrote:
> >REM #bz
> >を入れておくと図面寸法でデータを読み込むため、図面の倍率を気
> >にせずに済みます。
> こちらですが、sugiさんの外部変形にも適用できるのでしょうか?

私の外部変形には既に適用済みです。

aiさん wrote:
> 1つの図面に複数の倍率で書いているものを図面ごと反転した際にも
> 使いたいので全レイヤグループ選択のほうが嬉しいと思い、
> sugiさんの外部変形を見たところ、bzが既にに記入済だったので
> 3か所あるREM #hcの下すべてにREM #g1を追加して、
> グループ倍率入り混じりで試してみたのですが、
> 寸法値の記入位置が寸法線から遠くなったりしてしまいました。

これは再現できませんでした。
下記の最新の「寸法反転.bat」で確認してみて下さい。

aiさん wrote:
> それから、作っていただいたsugiさんのデータがレスに埋もれてしまっていることと
> この掲示板内で上がったデータで公開先がわからず、
> 後から欲しいと思ってもログが消えて見つけれないという事もありますので
> もしよろしければsugiさんのつくってくださったデータはsugiさんの
> HPにアップしていただけると嬉しいです。

今回、必要な変数をEXCELで計算させるものを作ってみました。
ruby なら一度に行列計算できるのですが、EXCELだと行列の各成分
毎に計算して求めておりちょっと面倒だったのですが、スクリプト
内でどんな計算をさせているのかを分かってもらうにはこの方が分
かりやすいかと思います。「Excel寸法反転.bat」を確認してみて
下さい。

容量が大きくなったこともあり今回はホームページにアップしてみ
ました。使い方が不明な場合は教えて下さい。

http://homepage2.nifty.com/igus/
Jw_cad 情報交換室連動:寸法反転
http://homepage2.nifty.com/igus/starthp/hanten.lzh

--
sugi


Indexへ
(35392)←【35396】→(35397)
------------------------
【タイトル】Re(18):寸法の反転 訂正
【記事番号】 35396 (35392)
【 日時 】09/08/31 22:36
【 発言者 】ai

▼sugiさん:
わざわざ大がかりなデータを作っていただきありがとうございます。


>文字の始点、終点は文字の位置を高さ方向に位置を補正する際にも
>利用するので求めておいた方が良いです。

文字サイズをjwデータから取得していて、
文字と寸法線の距離は計算で取得するのでそこから取得できないかなと思っています。

中点 B(x1,y1) ←計算でだす
反転座標 C(x2,y2) ←計算で出す
反転文字座標 D(x3,y3) ←文字分補正した値
寸法線から文字起点の 直角距離 l  ←計算で出す
中点から垂直に引いた線と、反転座標から水平に引いた線の交点 E
中点から垂直に引いた線と、反転文字座標から水平に引いた線の交点 F
中点から反転文字座標までの距離l2 =i+文字サイズ/図面倍率 (図寸の場合)

で、三角形BCEと三角形BDFは相似なので
l : l2 = (x1-x2) : (x1-x3)

l : l2 = (y1-y2) : (y1-y3)
で補正位置が求まるかなと。
勘違いでしたらすみません。

※角度と2編がわかるので三角形の公式でもでると思ってたんですが
 こっちのほうが自分的に分かりやすいので考え変更してます。

>aiさん wrote:
>> 1つの図面に複数の倍率で書いているものを図面ごと反転した際にも
>> 使いたいので全レイヤグループ選択のほうが嬉しいと思い、
>> sugiさんの外部変形を見たところ、bzが既にに記入済だったので
>> 3か所あるREM #hcの下すべてにREM #g1を追加して、
>> グループ倍率入り混じりで試してみたのですが、
>> 寸法値の記入位置が寸法線から遠くなったりしてしまいました。
>
>これは再現できませんでした。
>下記の最新の「寸法反転.bat」で確認してみて下さい。

sugiさんの最新データは希望通りの動作でした!
ありがとうございます。
自分が設定したのと何が違うのかなと思い試した際のデータの
http://hpcgi2.nifty.com/jw_cad/c-board.cgi?cmd=one;no=35347;id=004
のbatファイルとHPにUPされていたbatファイルを覗かせていただいたら
自分は#g1の記入場所を間違っていたようです。
申し訳ありません。

jwのsample.batに
REM    ◎データ選択のときレイヤグループのデータ選択指定
REM         (必ず「#h*」または「#hc」の後に続けて記載する)
REM        #g0 (or無指定):書込レイヤグループのみ選択
REM #g0      #g1 全 レイヤグループ選択   

とあったので、「続けて記入=hcの直後に記入だと思い、
sugiさんのデータのhcの真下に記入していたのですが、
HPにUPしていただいたデータだと、
bzやhを設定した後にg1記入になっていました。

※hcの下3か所という意味不明の発言は自分のパソコンで開いた際に
スクロールせずに見える範囲にあるhcの数でした。
実際はもっとありますね、申し訳ありません。


HPにデータUPと丁寧なご説明ありがとうございます。


Indexへ
(35396)←【35397】→(35409)
------------------------
【タイトル】Re(19):寸法の反転 訂正
【記事番号】 35397 (35396)
【 日時 】09/08/31 22:39
【 発言者 】ai

▼sugiさん:
書き忘れてしまっていましたがエクセルデータは
じっくりコードを見させていただきたいと思います。
本当にありがとうございました。


Indexへ
(35397)←【35409】→(35413)
------------------------
【タイトル】Re(1):寸法の反転
【記事番号】 35409 (35254)
【 日時 】09/09/02 10:24
【 発言者 】ai

計算がわかりやすいようにと試す際にまずは
寸法線45度、始点・終点・文字起点も計算しやすい位置で手計算で
(実際のjwデータだと数値が細か過ぎて混乱してうまくできないため)
試しながら自作してできたのであってると思い込んでしまっていたのですが、
(始点・終点・文字起点は複数パターンで試しました)
実際jwからデータをとりこんで試したらボロボロでした。

※45度で手書きで計算して出来たのでVBAに式を
 反映しようと思って行っていたら式がエクセルの演算誤差
 http://pc.nikkeibp.co.jp/pc21/special/gosa/eg2.shtml
 にひかかってうまくいかず、そこで手間どっていました。
 原因を教えてもらって訂正してやっとできたと思って
 複数デ―タ(45度以外のデータもあり)のjwデータで試したら
 ガタガタでやっと違うと気がつきました。

 頂いたデータと見比べてもみているのですが何をどうしてそうなってるのか
というのがいまだわからず図を描いて式が示してる場所がどこに当たるのかとか
考え中なのですが、理解力が追いついていません。

ギブアップさせていただいて、
手のあいたときに徐々に調べさせていただきたいと思います。
申し訳ありません。


Indexへ
(35409)←【35413】→(35418)
------------------------
【タイトル】Re(2):寸法の反転
【記事番号】 35413 (35409)
【 日時 】09/09/02 13:28
【 発言者 】いっち

▼aiさん:
> エクセルの演算誤差

通常は考慮しなくても、あまり問題にならないようです。
問題が出る場合は、数値の補正を行う必要もあると思います。

その事とは、直接は関係ないと思いますが、
> エクセルの演算誤差
について、ご興味があるのでしたら、
下記のマクロなんかいかがでしょうか。

> 原因を教えてもらって
なので、もうご存知だとは、思いましたけど。

下記のマクロの中で、Dimの行の次の行に
j = 0 を入れましたが、
これは、単純に3つのループを比較する時に
わかりやすくする為に書いたものであって、
実際には、j As Doubleなら、
初期値は0です。
------------------------------------------------------------
Option Explicit

Sub test()
  Dim i As Long, j As Double
  j = 0
  For i = 1 To 100
    j = j + 0.1
  Next
  MsgBox j

  j = 0
  For i = 1 To 100
    j = j + CCur(0.1)
  Next
  MsgBox j

  j = 0
  For i = 1 To 100
    j = Val(j + 0.1)
  Next
  MsgBox j
End Sub
------------------------------------------------------------
> ギブアップさせていただいて

> >数値を書き戻した後の書き出し位置を、
> >調整する方法を考えられたらいかがかと思います。
>
> 書き出し位置は全く考えていませんでした。
> そういえば必要ですね。
> わかるかどうか不明ですがそちらも見てみたいと思います

楽しみにしています。
------------------------------------------------------------


Indexへ
(35413)←【35418】→(35417)
------------------------
【タイトル】Re(3):寸法の反転
【記事番号】 35418 (35413)
【 日時 】09/09/03 12:06
【 発言者 】ai

▼いっちさん:
コードありがとうございます。

自分は貼り付けたHPの関連リンク先の
http://pc.nikkeibp.co.jp/pc21/special/gosa/
の一覧にある
http://pc.nikkeibp.co.jp/pc21/special/gosa/eg4.shtml
を見てCDecで10進法にする方法で誤差除去する方法をとっています。


Indexへ
(35418)←【35417】→(35423)
------------------------
【タイトル】Re(2):寸法の反転
【記事番号】 35417 (35409)
【 日時 】09/09/02 22:49
【 発言者 】sugi

sugiです。aiさん、こんにちは。

aiさん wrote:
>  頂いたデータと見比べてもみているのですが何をどうしてそうなってるのか
> というのがいまだわからず図を描いて式が示してる場所がどこに当たるのかとか
> 考え中なのですが、理解力が追いついていません。

数式を追っていくだけだとなかなか理解しにくいかもしれないです
ね。何を計算しているのかを図形で表したものを用意してみました。
参考にしてみて下さい。

http://homepage2.nifty.com/igus/
Jw_cad 情報交換室連動:寸法反転解説図
http://homepage2.nifty.com/igus/starthp/hanten2.lzh

--
sugi


Indexへ
(35417)←【35423】→(35431)
------------------------
【タイトル】Re(3):寸法の反転
【記事番号】 35423 (35417)
【 日時 】09/09/03 14:23
【 発言者 】ai

▼sugiさん:
ありがとうございます。
ものすごく丁寧で分かりやすい図面で一発で問題点がわかりました。

空間把握能力及び理解力が低くでホントに想像できてなかったのですが、
文字方向が必要というのもしっかりと把握できました。

自分がわかりやすいからと45度で試していた事の不味さも
図面のおかげではっきりと理解しました。
的外れな発言を度々してしまいまして申し訳ありませんでした。
※JWでグリッドを使ったことがなくて、
 Autoのようにグリット点が取れないとどこに線を書いてるかわからなくなると思って、
 方眼紙に手書き作業で図を書いていて、
 図のサイズがそんなに大きくなかったこともありズレに気が付けず
 原点・文字座標・文字反転座標が一直線になっていると思い込んでいました。

図のおかげで分かりそうな気がしますので頑張ってみます!

追記
sugiさんのコードの考え方がわかったと思ってウキウキしていたのですが
よく考えたら自分の試していた方法はひでとさん方式で前提条件が違うという事に気がつきました。
自分が試していた方法を図面に書いたところやはり文字角度がいらない気がします。

一応考え方のデータ貼っておきます(寸法線が右上がりの場合)
http://ohayou-oyasumi.webdeki-bbs.com/ohayou-oyasumi_tree_r_48.html
※直接ダウンロードさせようとしたら失敗するのですが、
 下記アドレスをツールバーにコピーして確定すればHPに行かなくてもダウンロードできるみたいです。
 http://ohayou-oyasumi.webdeki-bbs.com/data/ohayou-oyasumi/img/48_b5f985dee3.lzh

考え方が間違っているのではなく、エクセルの演算誤差に対する処理が甘いのかもと思って
sugiさんデータと並行してそちらも再度見直しています。


Indexへ
(35423)←【35431】→(35441)
------------------------
【タイトル】Re(4):寸法の反転
【記事番号】 35431 (35423)
【 日時 】09/09/04 00:37
【 発言者 】sugi

sugiです。aiさん、こんにちは。

aiさん wrote:
> 自分が試していた方法を図面に書いたところやはり文字角度がいらない気がします。

これは私の勘違いしてました。^^;
文字方向の変更は不要ですね。

「tamesi.jww」の図を見ながら検算してみたのですが、
中点座標 D(kx,ky)を求める部分
kx = (sx + sy * m + m * n) / (m ^ 2 + 1)
ky = (sy + sx / m + n) / (m ^ 2 + 1) + n
となってます。kx はいいのですが ky がおかしいのではないでしょ
うか。私の方で計算したところ
k=((x2-x1)*(sx-x1)+(y2-y1)*(sy-y1))/((x2-x1)**2+(y2-y1)**2)
とおいて
kx=x1+(x2-x1)*k
ky=y1+(y2-y1)*k
となりました。

ただの書き間違いなら良いのですが、一度見直されてはどうでしょ
う。

--
sugi


Indexへ
(35431)←【35441】→(35445)
------------------------
【タイトル】エラー除去が不十分ですがほぼできました
【記事番号】 35441 (35431)
【 日時 】09/09/04 20:18
【 発言者 】ai

▼sugiさん:
指摘ありがとうございます!
式見直し&CDecをとりあえずつけまくった結果ほぼ希望動作になりました。

※誤差なのかたまに少しずれる場合があるのですが、どこが原因かわかりませんでした。
演算誤差がどこで起こっているかの判断が難しく
もう手当たり次第にCDecをつけてしまったのでCDecは過剰だと思いますがそこは放置予定です。

ただ、文字起点が寸法線上にある場合は処理の仕方がまだ分からないので処置から外しています。
※処理除外してると言いながら除外しきれてていませんでしたorz
 寸法線と寸法値との距離が0になる場合は処理除外にしたつもりだったのですが、
 0に近いけれど完全に0ではないとかそういう感じっぽいです。
 ずれるデータもこれでした。


sugiさんの外部変形で試させていただいたところ、
寸法値の基準点が寸法線の上にある斜めのデータは寸法が消えてしまいました。
追記:データ異常だったようです、申し訳ありません。
   新規に書いて試したら再現されませんでした。
訂正:消えるデータが再現できましたので掲示板へのリンクはっておきます。
  http://ohayou-oyasumi.webdeki-bbs.com/ohayou-oyasumi_tree_r_49.html
  四角3つ全部を囲って反転実行すると消えます。
  ※1個1個だと消えません

再追記:sugiさんの外部変形をさらに試したところ反転実行で
  通常:寸法値が寸法線の上と左に固定
  寸法値と寸歩線の距離0:実行するたび位置関係が反転する
  になりました。


作ったVBAコードは下記です。


Private Sub 上下反転()
  Dim X As Long, Y As Long, Max_row As Long
  Dim i As Long
  Dim St As Worksheet
  Dim sx As Double, sy As Double, hx As Double, hy As Double
  Dim hs As Double, hch As Double
  Dim x1 As Double, y1 As Double, x2 As Double, y2 As Double
  Dim rsx As Range, rsy As Range
  Dim m As Double, n As Double, kx As Double, ky As Double
  Dim L1 As Double, L2 As Double
  Dim rx As Double, ry As Double
    '作業シート指定
    Set St = Sheets("寸法反転")
    'データ取得位置
    X = 4
    Y = 2
    '最終行取
    With St
      Max_row = Cells(Rows.Count, Y).End(xlUp).Row
      Application.ScreenUpdating = False
      For i = 1 To Max_row - X
        Set rsx = .Cells(X + i, Y)
        Set rsy = .Cells(X + i, Y + 1)

        sx = .Cells(X + i, Y).Value
        sy = .Cells(X + i, Y + 1).Value
        hx = .Cells(X + i, Y + 2).Value
        hy = .Cells(X + i, Y + 3).Value
        hch = .Cells(X + i, Y + 6).Value
        hs = .Cells(X + i, Y + 8).Value
        x1 = .Cells(X + i, Y + 9).Value
        y1 = .Cells(X + i, Y + 10).Value
        x2 = .Cells(X + i, Y + 11).Value
        y2 = .Cells(X + i, Y + 12).Value
        '寸法線が水平の場合に上下反転処理実行
        If y1 - y2 = 0 Then
          If sy - y1 <> 0 Then
            '寸法値基準点が寸法線上にある場合
            If y1 = sy Then
              rsy.Value = y1 - hs * hch
            Else
            '寸法値基準点が寸法線上にない場合
              rsy.Value = y1 * 2 - sy - hs * hch
            End If
          End If
        '寸法線が水平・垂直以外の場合に上下反転処理実行
        ElseIf y1 - y2 <> 0 And x1 - x2 <> 0 Then
          '交点を求める ※直線の公式 Y = m * X + n
          m = CDec(y2 - y1) / CDec(x2 - x1) '傾き
          n = y1 - CDec(m * x1) '切片
          kx = CDec(sx + CDec(CDec(sy * m) - CDec(m * n))) / CDec(CDec(m ^ 2) + 1) '交点X座標
          ky = CDec(CDec(m * kx) + n) '交点Y座標
          L1 = (CDec((kx - sx) ^ 2) + CDec((ky - sy) ^ 2)) ^ 0.5 '文字起点から交点までの距離
          '文字が寸法線の上にある場合以外
          If L1 <> 0 Then '*************微小差の処理どうする?
            '文字が寸法線の上にある場合
            If sy > ky Then
              L2 = CDec(CDec(L1 * 2) + CDec(hch * hs)) '文字起点から反転点座標までの距離
            '文字が寸法線の下にある場合
            Else
              L2 = CDec(CDec(L1 * 2) - CDec(hch * hs)) '文字起点から反転点座標までの距離
            End If
            rsx.Value = sx + CDec(CDec((kx - sx) * CDec(L2 / L1))) '文字反転起X座標
            rsy.Value = sy - CDec(CDec((sy - ky) * CDec(L2 / L1))) '文字反転Y座標
          End If
        End If
      Next
      Application.ScreenUpdating = True
    End With
End Sub

Private Sub 左右反転()
  Dim X As Long, Y As Long, Max_row As Long
  Dim i As Long
  Dim St As Worksheet
  Dim sx As Double, sy As Double, hx As Double, hy As Double, hs As Double, hch As Double
  Dim x1 As Double, y1 As Double, x2 As Double, y2 As Double
  Dim rsx As Range, rsy As Range
    '作業シート指定
    Set St = Sheets("寸法反転")
    'データ取得位置
    X = 4
    Y = 2
    '最終行取
    Max_row = Cells(Rows.Count, Y).End(xlUp).Row
  
    '垂直の場合に処理実行
    Application.ScreenUpdating = False
    With St
      For i = 1 To Max_row - X
        Set rsx = .Cells(X + i, Y)
        Set rsy = .Cells(X + i, Y + 1)
        sx = .Cells(X + i, Y).Value
        sy = .Cells(X + i, Y + 1).Value
        hx = .Cells(X + i, Y + 2).Value
        hy = .Cells(X + i, Y + 3).Value
        hch = .Cells(X + i, Y + 6).Value
        hs = .Cells(X + i, Y + 8).Value
        x1 = .Cells(X + i, Y + 9).Value
        y1 = .Cells(X + i, Y + 10).Value
        x2 = .Cells(X + i, Y + 11).Value
        y2 = .Cells(X + i, Y + 12).Value
        '寸法線が垂直の場合に左右反転処理実行
        If x1 - x2 = 0 Then
          '寸法値基準点が寸法線上にある場合
          If sy = y1 Then
            rsx.Value = sx - hs * hch
          '寸法値基準点が寸法線上にない場合
          Else
            rsx.Value = x1 * 2 - sx + hs * hch
          End If
        End If
      Next
    End With
    Application.ScreenUpdating = True
End Sub


Indexへ
(35441)←【35445】→(35446)
------------------------
【タイトル】Re(1):エラー除去が不十分ですがほぼできました
【記事番号】 35445 (35441)
【 日時 】09/09/05 09:40
【 発言者 】いっち

▼aiさん:
> もう手当たり次第にCDecをつけてしまった
> 作ったVBAコードは下記です。

ちょっと、演算誤差チェック用のコードを
書いてみました。
------------------------------------------------------------
Option Explicit

Sub test()
'ローカルウインドウを表示させ、
'ステップ実行を行ってください。

Const MAGN As Long = 100
Dim v1 As Variant, v2 As Variant, v3 As Variant
Dim ans As Variant

'------ その1 ------

v1 = CDec(0.333333)
v2 = CDec(0.222222)
v3 = CDec(0.111111)

ans = v1 - v2 - v3
MsgBox ans

'下記は、ローカルウインドウにて
'ご確認ください。

ans = v1 + v2  'ansの内部処理形式はDecimal
ans = v1 - v2  'ansの内部処理形式はDecimal
ans = v1 * v2  'ansの内部処理形式はDecimal
ans = v1 / v2  'ansの内部処理形式はDecimal

ans = v1 ^ 0.5 'ansの内部処理形式はDouble
ans = Sqr(v1)  'ansの内部処理形式はDouble

ans = Sqr(v1) + v2 'ansの内部処理形式はDecimal
ans = Sqr(v1) - v2 'ansの内部処理形式はDecimal
ans = Sqr(v1) * v2 'ansの内部処理形式はDecimal
ans = Sqr(v1) / v2 'ansの内部処理形式はDecimal

ans = v2 + Sqr(v3) 'ansの内部処理形式はDecimal
ans = v2 - Sqr(v3) 'ansの内部処理形式はDecimal
ans = v2 * Sqr(v3) 'ansの内部処理形式はDecimal
ans = v2 / Sqr(v3) 'ansの内部処理形式はDecimal

ans = Sqr(v1) + v2 + Sqr(v3) 'ansの内部処理形式はDecimal
ans = Sqr(v1) - v2 - Sqr(v3) 'ansの内部処理形式はDecimal
ans = Sqr(v1) * v2 * Sqr(v3) 'ansの内部処理形式はDecimal
ans = Sqr(v1) / v2 / Sqr(v3) 'ansの内部処理形式はDecimal

'------ その2 ------

v1 = 0.333333  'v1の内部処理形式はDouble
v2 = 0.222222  'v2の内部処理形式はDouble
v3 = 0.111111  'v3の内部処理形式はDouble

ans = CDec(v1 - v2 - v3)

'ansの内部処理形式はDecimalでも、
'誤差が発生しています。
MsgBox ans

'------ その3 ------

'下記は全て内部処理形式Doubleです。
v1 = 0.333333
v2 = 0.222222
v3 = 0.111111
ans = (v1 - v2 - v3)
MsgBox ans

v1 = 0.333333 * MAGN
v2 = 0.222222 * MAGN
v3 = 0.111111 * MAGN

ans = (v1 + v2 + v3) / MAGN
MsgBox ans

ans = (v1 - v2 - v3) / MAGN
MsgBox ans

ans = (v1 * v2) / (MAGN * MAGN)
ans = (v1 * v2) / (MAGN ^ 2)
MsgBox ans

ans = (v1 / v2) / (MAGN / MAGN)
ans = (v1 / v2)
MsgBox ans

End Sub


Indexへ
(35445)←【35446】→(35447)
------------------------
【タイトル】Re(2):エラー除去が不十分ですがほぼできました
【記事番号】 35446 (35445)
【 日時 】09/09/05 12:42
【 発言者 】ai

▼いっちさん:
すみません、使い方がわかりませんでした。
Msgboxで出てくるデータとウインドウに出るデータは見たのですが
それをどう判断するのかがよくわかりません。

コードですが、
・計算式内すべての変数
・足す・引く・かける・割るすべての動作1つ1つ
全てにCDecつけたらずれなくなりました。

エクセルの演算誤差は怖いですね。
全てを一括で10進法計算にしてくれる方法があればいいのですが・・・。

寸法線が斜めで寸法値の起点が寸法線上にある場合は、
別途角度を使った式を作る必要がありそうなので保留中です。
それ以外はたぶん誤差なく「寸法値と寸法線の位置関係を反転」できるようになったと思います。


Indexへ
(35446)←【35447】→(35448)
------------------------
【タイトル】Re(3):エラー除去が不十分ですがほぼできました
【記事番号】 35447 (35446)
【 日時 】09/09/05 12:45
【 発言者 】いっち

▼aiさん:
> それをどう判断するのかがよくわかりません。
> 全てにCDecつけたらずれなくなりました。

どのような場合に、どのような型になり、
どのような場合に誤差が発生するのかを
書いたつもりでした。

> 全てを一括で10進法計算にしてくれる方法

とうわけではないのですが、
計算過程において、ひとつづつ、
CDecを入れない方法なら、
記載したつもりです。
--------------------------------------------------
ご自身が納得する方法で、行われるほうが
良いと思いますので、

> ちょっと、演算誤差チェック用のコードを
> 書いてみました。

は、気にされなくて、良いと思います。


Indexへ
(35447)←【35448】→(35449)
------------------------
【タイトル】Re(4):エラー除去が不十分ですがほぼできました
【記事番号】 35448 (35447)
【 日時 】09/09/05 14:52
【 発言者 】ai

▼いっちさん:
>> 全てを一括で10進法計算にしてくれる方法
>
>とうわけではないのですが、
>計算過程において、ひとつづつ、
>CDecを入れない方法なら、
>記載したつもりです。

Valでいけました。
試した時点でエラー除去が不十分で文字ずれ起してたのを、
Valじゃダメなのかと勘違いしていました、申し訳ありません。

勘違いの経緯としては、
jwデータをシート上に取り込んだ時点ですでに
1.23E-13
というような形のデータがあるので上手くいかないのかと思い
1.セルA1に 1.23E-13 と記入
2.セルB2に =VAl(A1)と記入
3.♯Name?と出てきた
でセルの値が数字じゃないとだめなのかなと思ってました。
よく調べずに申し訳ありません。

Sub test()
MsgBox Val(Range("A1"))
End Sub
でいったらいけました。


>> それをどう判断するのかがよくわかりません。
>> 全てにCDecつけたらずれなくなりました。
>
>どのような場合に、どのような型になり、
>どのような場合に誤差が発生するのかを
>書いたつもりでした。

こちらですが、CDecでしたらたとえば
rsx = sx + (kx - sx) * L2 / L1

L2 / L1で誤差が起きてるのか、
(kx - sx) で誤差が起きてるのか
(kx - sx) * L2 で誤差が起きてるのか
((kx - sx) * L2 )/ L1 で誤差が起きてるのか
の判断で全て検査という形でしたので、
ansが分かってもans自体が違う場合があるし見方がわからないと
考えてしまっていました、
Valでわかったと思います。


抜けてたエラーに対する対処ですが
(現時点でまだ作成途中のためこれに対応したものは掲示板UPはしてません)
文字起点と寸法線との間隔が極小の場合、

寸法線が斜めの場合と設定しているのに

寸法線と寸法起点の直角距離
L1 = 0.000000000000001

寸法起点から寸法線に直角に線を引いた場合の交点
x座標  kx = 1
y座標  ky = 1

寸法基準点
x座標 sx = 1.000000000000001
y座標 sy = 1

になてしまう場合があるせいでした。

・L1が0でなければ寸法線上に文字起点は(sx,sy)ないはす
・寸法線が斜めなのでsx,sy片方だけが寸法線上にあることもないはず
 (片方だけがある場合は寸法線が水平か垂直の場合のみ)
のため、

  If L1 <> 0 And (kx = sx Or ky = sx) Then
    sx = kx
    sy = ky
  End If

と寸法起点を寸法線上にくるように変えること今のところしてます。


Indexへ
(35448)←【35449】→(35450)
------------------------
【タイトル】Re(1):データ誤差にも配慮を
【記事番号】 35449 (35441)
【 日時 】09/09/05 14:55
【 発言者 】スター

▼aiさん:

 演算誤差も重要ですがデータにも誤差があると考えた方がよいと思います。

ABという水平線があるとします。
このときYA≠YBの可能性があるかもしれません。
1870.56066972378 3211.78217809111 4918.84527087028 3211.78217834453
上記のような線分も属性取得した場合は角度は0度となります。
これに寸法を作成した場合、寸法処理の中で丸目を実行しているように見受けられますが、引き出し線の下のY座標は異なります。

私も外変を作成しますが、基本的に座標や角度の比較に置いて=という判定分はいっさい使用しません。


Indexへ
(35449)←【35450】→(35432)
------------------------
【タイトル】Re(2):データ誤差にも配慮を
【記事番号】 35450 (35449)
【 日時 】09/09/05 16:26
【 発言者 】ai

▼スターさん:
>私も外変を作成しますが、基本的に座標や角度の比較に置いて=という判定分はいっさい使用しません。

sugiさん的な方法のほうがいいとは思うのですが、
今回の反転で自分の分かりやすい方法でやったにもかかわらずここまで
時間がかかっていますし、
座標+ベクトル計算ですと理解できないか、
(sugiさんが図をかいでくださったので何となくはわかったのですが、
しっかり具体的に理解して自分で使いこなせるかというとまだ無理なので)
理解できても数カ月・数年単位で勉強かと
思っていまして徐々に勉強かなと思っています。

数学自体が苦手というのもあり、
今回の件もスレッド内で何度もギブアップって言ってますし
毎日調べてるのに一向にすすまずもう諦めようと何回も思いましたし。
(これからsugiさんの方法を具体的に理解で気うように頑張ろうとは
思っていますが)


> 演算誤差も重要ですがデータにも誤差があると考えた方がよいと思います。
>
>ABという水平線があるとします。
>このときYA≠YBの可能性があるかもしれません。
> 1870.56066972378 3211.78217809111 4918.84527087028 3211.78217834453
>上記のような線分も属性取得した場合は角度は0度となります。
>これに寸法を作成した場合、寸法処理の中で丸目を実行しているように見受けられますが、引き出し線の下のY座標は異なります。

現象の認識はしているのですが、上記理由により対応は難しいです。
※sugiさんのデータを実用しますし、あとは自己満足のための
 勉強をゆっくり頑張ろうかなといった感じです。

現象は認識していたので少し試していたのですが、
1.寸法線の角度を90.000001程度でしたら斜め線と認識して
  寸法値が寸法線の右に来る
2.寸法線の角度を90.00000001ですと寸法線の左に寸法値
3. 2のデータをみたら寸法線の始点・終点のx座標が一致しているわけではない
※寸法線の長さとかも関係するかもしれませんが

じゃぁどこからjwは寸法線の扱いを変えてるのかとかとなると
よくわからず放置といった感じです。


Indexへ
(35450)←【35432】→(35433)
------------------------
【タイトル】Re(1):寸法の反転
【記事番号】 35432 (35254)
【 日時 】09/09/04 09:51
【 発言者 】ひでと

一応自分なりに考えてみてますが、基本的なとこで確認したいとこが・・・。

まず基本図形を書いてみます。
正方形を書き対角線を2本かきました。
各4辺と対角線2本にそれぞれ平行な寸法を描画。
このとき、寸法は寸法線の上側に文字を記入。
垂直寸法は寸法線の左側に記入しました。
(これが私の通常書いてる寸法線なのです)

▼aiさん:
>反転した際に寸法値と寸法線の位置関係が通常と逆になるのを
>一括で訂正できる外部変形はあるのでしょうか?

1.
図形を水平、垂直、対角線で それぞれ反転した図形を
みてみます。
文字の向きは正常。ただし、寸法線の反対側に移動してしまう寸法あり。
(おそらく これがA1さんの気にしてる現象かと思います。)

2.
さらに、基本図形を180度回転させた図形を描画してみます。
すると、全ての寸法線の寸法文字の傾きが、期待してるものと逆になります。
さらに、寸法文字と寸法線の位置関係が期待したものと逆になります。
(こちらの方が直すのが大変そう)

JWの標準的手法とし、上記を直す場合は
1の対処の方法としては、
それぞれの寸法線を寸法線に対して対称に移動
2の対処としては
それぞれの寸法線を始点と終点を入れ替えるかたちで、180度の回転移動が必要です。
ステップの関係で2のほうがすごく面倒です。


Indexへ
(35432)←【35433】→(35440)
------------------------
【タイトル】Re(1):寸法の反転
【記事番号】 35433 (35254)
【 日時 】09/09/04 10:21
【 発言者 】ひでと

外変での解決方法についてかんがえてみます。

まず 寸法文字はかならず寸法線の上または左に記入するべきなのか?
寸法線が連続してる場合、文字が入りにくくて文字を上下に書き分ける場合が
あります。「連続寸法線」はこれを利用しています。
この場合、寸法文字が下になっているのを「正」としているわけです。
そうすると、1の実験結果「対称に移動」は全て「正」ということになります。
文字の修正という考え方では、対処できないわけです。
これに対処するには「図形の対象移動」の処理を作ることになると思います。

次に実験2の回転移動についてです。
文字の向きが逆なのですごく読みづらいです。
対処法として
1.文字だけをその場で180度回転する。
2.寸法線と文字を180度回転する。
の二つの処理のほかに
「図形の回転移動」の処理を作るの3つの選択肢がかんがえられます。

2つの「不具合」(ごめんなさい)に対処するには、「図形の反転と移動」
の処理を作るしかないわけですが、その場合新たに位置が変更された寸法文字が
他の図形とかさなったりしてしまうことが考えられます。
(この場合はあきらめてもらうしかないかな・・・)
実験2の対処方法「文字だけをその場で180度回転する」もしくは
「文字の傾きを正規に戻す」処理が一番簡単かなー?とかんがえています。
これは きっとどなたか既に外変を作られているとおもいますが・・・。

ということで、根本的に解決するのは結構大変そうなので・・・。
リタイア させていただきます。(スイマセン)


Indexへ
(35433)←【35440】→(35473)
------------------------
【タイトル】Re(2):寸法の反転
【記事番号】 35440 (35433)
【 日時 】09/09/04 13:36
【 発言者 】ai

▼ひでとさん:
>外変での解決方法についてかんがえてみます。
>
>まず 寸法文字はかならず寸法線の上または左に記入するべきなのか?
>寸法線が連続してる場合、文字が入りにくくて文字を上下に書き分ける場合が
>あります。「連続寸法線」はこれを利用しています。

 これに関しましては、寸法線と寸法値の位置関係を逆転させているので、
大丈夫です。
(左・上固定はちょっといじるだけでできそうなので作ってみようかとも思っていますが)


 位置関係が変わるので記入した図にかぶる場合は移動などは必要ですが
そこはしょうがないかなと思っています。
 設定簡単そうなので寸法値と寸法線の間隔は文字の10分の1のサイズ」と
指定できるようにしようかなと思っています。
 寸法線の長さの半分(中心位置)に寸法値がちょうど来るようにできても
いいかと思いますがそこは難しそうなのでパスします。

>次に実験2の回転移動についてです。
>文字の向きが逆なのですごく読みづらいです。
>対処法として
>1.文字だけをその場で180度回転する。
>2.寸法線と文字を180度回転する。
>の二つの処理のほかに
>「図形の回転移動」の処理を作るの3つの選択肢がかんがえられます。

自分の仕事じゃ反転させることはあっても回転させることはないので
そこはもう最初から作る気なしだったりします。
※kityさん、sugiさんの外部変形利用させていただこうかなと。

頂いた直線の式のヒントがホントに発想が変わってほぼ完成まだたどり着けました。
ありがとうございます。


Indexへ
(35440)←【35473】→(35474)
------------------------
【タイトル】Re(3):寸法の反転
【記事番号】 35473 (35440)
【 日時 】09/09/07 18:02
【 発言者 】sugi

sugiです。皆さん、こんにちは。
ネットが使えない状態だったので遅くなりました。

ひでとさんの発言を読んで、寸法値を反転したときでも回転したと
きでも一括で修正できる外部変形が望ましいような気がしてきまし
た。aiさんに指摘された「寸法線と文字の間隔」が 0 の場合不具
合となるのも修正してみました。

【反転・回転】回転、反転した寸法図形を一括で修正する
【 跳 越 】文字の幅より狭い寸法図形を反転させる
【 強制反転 】寸法図形を反転させる
【 強制回転 】寸法図形をその場で回転させる
【 文字反転 】寸法図形になっていない寸法文字を個別に反転させる
【 文字回転 】寸法図形になっていない寸法文字をその場で回転させる

=== hanten.bat (ここから) ===
ruby -Ks -x "%~f0"
exit

#! ruby
$stderr=open("error.log","w")
$stdout=open("hanten.lzh","wb")
print "
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
rFcdkcY/vt0DXlZf+LyHxsAA
".unpack("m")
=== hanten.bat (ここまで) ===

--
sugi


Indexへ
(35473)←【35474】→(35476)
------------------------
【タイトル】9/7 sugiさん外変最新試しました
【記事番号】 35474 (35473)
【 日時 】09/09/07 20:05
【 発言者 】ai

▼sugiさん:
http://hpcgi2.nifty.com/jw_cad/c-board.cgi?cmd=one;no=35473;id=004
の外部変変形させていただきました。
快適動作でしかも一括処理ですごく幸せになれるものになっていました!
ありがとうございます。

前回も願いしてたびたびで申し訳ないのですが、
埋もれてしまうともったいないですしできればこちらも
sugiさんのHPにあげていただきたいです。
(UP予定なしかこれからUP予定でしたら申し訳ありません)

>【反転・回転】回転、反転した寸法図形を一括で修正する
>【 跳 越 】文字の幅より狭い寸法図形を反転させる
>【 強制反転 】寸法図形を反転させる
>【 強制回転 】寸法図形をその場で回転させる
>【 文字反転 】寸法図形になっていない寸法文字を個別に反転させる
>【 文字回転 】寸法図形になっていない寸法文字をその場で回転させる
の記入されたtextファイルも同梱されているとなおありがたいです。

※今回作っていただいた外変は頻繁に利用させていただく予定なので
 分からなくなることはないと思いますが、
 sugiさんの外部変形は多種に及んでるのでたまに使いたいのがどれだったか
 忘れて1個1個ためして探し回ってしまうことがあるので。
 (覚えてればいい話なのですが忘れっぽくてorz)


以下同じスレッド内に書いた内容ですが自分がよく間違う失敗なため、
自戒を込めつつ再度書き込みです。

上記アドレスのsugiさんデータの使い方

* rubyが入ってない場合の前処置
 http://rubyforge.org/frs/?group_id=167
でruby186-26.exe導入(rubyが既にあるなら不要?)

* 実行作業
1.メモ帳を新規立ち上げし、上記sugiさんのデータをコピーし貼り付け
 ※(ここから)の下の行から(ここまで)の上の行までです
 ※(ここから)の下の行から(ここまで)の上の行きっかりにしてください。
   自分は改行を余計に入れてしまって失敗してしまってました。
2.ファイル名をhanten.batにし保存
3.出来上がったhanten.batをダブルクリック
4.圧縮ファイルが出てくるので解凍してその中のデータ取得
5.取得したデータを任意の場所に保存しjwから実行
 (任意の場所ですが、パスに空白が含まれている場合は×です)


Indexへ
(35474)←【35476】//(35255)
------------------------
【タイトル】とりあえず完成?
【記事番号】 35476 (35254)
【 日時 】09/09/07 20:54
【 発言者 】ai

自分が確認した限りではおかしな動作をしなくなったので
結果報告で訂正データを掲示板にあげておきます。
http://ohayou-oyasumi.webdeki-bbs.com/ohayou-oyasumi_tree_p_46.html
※確認はしたのですが斜めはまだ不十分なところがあるかもしれません。

sugiさんに作っていただいたデータがありますし、
スターさんの指摘の件もありますし、
実用向きではないけど一応動くデータといった感じです。


9/7最新sugiさんがデータをあげてくださいましたので誤情報に
 ならないように削除→再書き込みさせていただきます。
 前回書き混んでいた間隔0の件その他いろいろ対応していただきました。
 ありがとうございます。

最新データは下記です
http://hpcgi2.nifty.com/jw_cad/c-board.cgi?cmd=one;no=35473;id=004