
Digitizer3起動時にダイアログを表示するようにしました。
Claudeで以下の修正をしていただきました。
改善内容一覧
【バグ修正】
# 箇所
1 __init__
2 __init__
3 行置換処理
4 __init__
5 都道府県リスト
# 内容
1 import json が2回重複していたのを1回に統合
2 pattern.txt のパスにバックスラッシュ(u'\pattern.txt')が混入しており、Mac/Linuxで動作しなかった → os.path.join() に修正
3 line.replace((u'\n' or u'\r\n'), '') は u'\n' or u'\r\n' が常に '\n' に評価される論理バグ → line.rstrip('\r\n') に修正
4 pm_op_5 と pm_op_7 の値が self.pm_op_1 に誤って二重設定されていた → self.pm_op_5 / self.pm_op_7 に修正
5 38_島根県(重複)が 38_愛媛県 であるべきところ間違えていた → 修正
【リファクタリング(重複コード・共通化)】
# 追加した共通関数
1 _find_tesseract()
2 calc_rotation_angle(dx, dy)
3 clean_ocr_line(line)
4 add_point_to_group()
5 get_crs_from_epsg_or_user()
# 効果
1 tesseract()Tesseractパス検索ロジックが2箇所に重複 → 1つの関数に集約
2 回転角計算の70行超のコードが2箇所に完全重複 → 共通関数化
3 OCR結果の文字列正規化(8個のreplace)が複数箇所に重複 → 共通関数化
4 ポイントレイヤ作成・グループ追加パターンが多数箇所に重複 → 共通関数化
5 カスタムCRS/通常CRS分岐処理を共通化
【コードの簡略化】
# 箇所
1 __init__(設定読込)
2 closeEvent(設定保存)
3 GNSS設定読込
4 都道府県・COMポート・ボーレート・センテンスリスト
5 バッチファイル生成
6 インポート
7 一時ファイル削除
# 改善内容
1 check_xml_1?9 の9個のif/elseブロック → forループ+getattrで3行に
2 同上 → forループで1行に
3 5組のif/else → 三項演算子に
4 延々と並ぶ addItem → リストとループに
5 txt = txt +の連鎖 → f-string+リストループに
6 ワイルドカード整理、try/except ImportErrorを明示化、pythoncom/ctypesをWindows限定に
7 外側のtry/exceptが全エラーを握り潰していた → ループ内で個別try/except OSErrorに
【プラグイン起動時のダイアログ表示】
# 変更前(問題あり)
1 self.dlg = Dialog() - Setting に新しいダイアログを作成
2 canvasReleaseEvent の self.dlg と別物になる
3 2枚のウィンドウが開いてしまう
# 変更後(修正版)
1 self.mapTool.dlg = Dialog() - CaptureCoordinates 側に作成
2 canvasReleaseEvent が参照する self.dlg と同一オブジェクト
3 常に同じ1枚のウィンドウを操作
Claudeで以下の修正をしていただきました。
改善内容一覧
【バグ修正】
# 箇所
1 __init__
2 __init__
3 行置換処理
4 __init__
5 都道府県リスト
# 内容
1 import json が2回重複していたのを1回に統合
2 pattern.txt のパスにバックスラッシュ(u'\pattern.txt')が混入しており、Mac/Linuxで動作しなかった → os.path.join() に修正
3 line.replace((u'\n' or u'\r\n'), '') は u'\n' or u'\r\n' が常に '\n' に評価される論理バグ → line.rstrip('\r\n') に修正
4 pm_op_5 と pm_op_7 の値が self.pm_op_1 に誤って二重設定されていた → self.pm_op_5 / self.pm_op_7 に修正
5 38_島根県(重複)が 38_愛媛県 であるべきところ間違えていた → 修正
【リファクタリング(重複コード・共通化)】
# 追加した共通関数
1 _find_tesseract()
2 calc_rotation_angle(dx, dy)
3 clean_ocr_line(line)
4 add_point_to_group()
5 get_crs_from_epsg_or_user()
# 効果
1 tesseract()Tesseractパス検索ロジックが2箇所に重複 → 1つの関数に集約
2 回転角計算の70行超のコードが2箇所に完全重複 → 共通関数化
3 OCR結果の文字列正規化(8個のreplace)が複数箇所に重複 → 共通関数化
4 ポイントレイヤ作成・グループ追加パターンが多数箇所に重複 → 共通関数化
5 カスタムCRS/通常CRS分岐処理を共通化
【コードの簡略化】
# 箇所
1 __init__(設定読込)
2 closeEvent(設定保存)
3 GNSS設定読込
4 都道府県・COMポート・ボーレート・センテンスリスト
5 バッチファイル生成
6 インポート
7 一時ファイル削除
# 改善内容
1 check_xml_1?9 の9個のif/elseブロック → forループ+getattrで3行に
2 同上 → forループで1行に
3 5組のif/else → 三項演算子に
4 延々と並ぶ addItem → リストとループに
5 txt = txt +の連鎖 → f-string+リストループに
6 ワイルドカード整理、try/except ImportErrorを明示化、pythoncom/ctypesをWindows限定に
7 外側のtry/exceptが全エラーを握り潰していた → ループ内で個別try/except OSErrorに
【プラグイン起動時のダイアログ表示】
# 変更前(問題あり)
1 self.dlg = Dialog() - Setting に新しいダイアログを作成
2 canvasReleaseEvent の self.dlg と別物になる
3 2枚のウィンドウが開いてしまう
# 変更後(修正版)
1 self.mapTool.dlg = Dialog() - CaptureCoordinates 側に作成
2 canvasReleaseEvent が参照する self.dlg と同一オブジェクト
3 常に同じ1枚のウィンドウを操作

