質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

0回答

1577閲覧

pythonのグラフィック描画について

takashi774

総合スコア10

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2018/09/21 07:46

編集2022/01/12 10:55
コード ```### 前提・実現したいこと pythonでgraphic描画したのち、二次元CADで読み込むファイルを作成できる コードを作っています。 円弧、半円は再現できるのですが、真円、3点円弧が表現できません。 ### 発生している問題・エラーメッセージ

真円、3点円弧が表現できない

### 該当のソースコード ```ここに言語名を入力 add_arc(center=(10, 20 , 110. 150), start=0, end=75, color=3, line_type="CONTINUOUS") add_oval(20, 20, 150, 150, color=3, line_type="CONTINUOUS")

試したこと

_ellipse
_oval

補足情報(FW/ツールのバージョンなど)

Python3.5標準の組み込み関数,及びmathライブラリ内の関数。
add_とcolor=3, line_type="CONTINUOUS"は必要なようです。

add_arc(center=(10, 20), radius=10, start=0, end=90 color=3, line_type="CONTINUOUS")
で0度から90度までで10Rが描画できます。

python

1import sys 2from logging import getLogger 3import numpy as np 4from copy import deepcopy 5 6logger = getLogger() 7import traceback 8 9 10def concat(dxf_list) -> list: 11 return_dxf = list() 12 dxf_body = list() 13 dxf_header = list() 14 dxf_footer = list() 15 for dxf in dxf_list: 16 for i in range(len(dxf)): 17 if dxf[i] == (2, "ENTITIES"): 18 dxf_header_end = i 19 elif dxf[i] == (0, "ENDSEC"): 20 dxf_footer_start = i 21 dxf_body.extend(dxf[dxf_header_end + 1:dxf_footer_start]) 22 if len(dxf_header) == 0 or len(dxf_footer) == 0: 23 dxf_header = dxf[:dxf_header_end + 1] 24 dxf_footer = dxf[dxf_footer_start:] 25 26 return_dxf.extend(dxf_header) 27 return_dxf.extend(dxf_body) 28 return_dxf.extend(dxf_footer) 29 30 return return_dxf 31 32 33def duplicate(dxf: list, x_move=0.0, y_move=0.0, rot_angle=0.0, mirror=False) -> list: 34 result_dxf = list() 35 theta = np.pi * rot_angle / 180 36 37 reverse = -1 if mirror else 1 38 39 cache = list() 40 41 for d in dxf: 42 if d[0] == 0: 43 for x_ix in range(len(cache)): 44 if cache[x_ix][0] // 10 == 1: # x座標なら 45 for y_ix in range(len(cache)): # y座標なら 46 if cache[y_ix][0] // 10 == 2 and cache[x_ix][0] % 10 == cache[y_ix][0] % 10: 47 break 48 x_dash = np.cos(theta) * cache[x_ix][1] * reverse - np.sin(theta) * cache[y_ix][1] + x_move 49 y_dash = np.sin(theta) * cache[x_ix][1] * reverse + np.cos(theta) * cache[y_ix][1] + y_move 50 cache[x_ix] = (cache[x_ix][0], x_dash) 51 cache[y_ix] = (cache[y_ix][0], y_dash) 52 elif cache[x_ix][0] // 10 == 5: # 角度なら 53 if cache[x_ix][0] % 10 == 0: # startなら 54 for y_ix in range(len(cache)): # endなら 55 if cache[y_ix][0] // 10 == 5 and cache[x_ix][0] % 10 == 1: 56 break 57 if not mirror: 58 start_dash = cache[x_ix][1] + rot_angle 59 end_dash = cache[y_ix][1] + rot_angle 60 else: 61 start_dash = 180 - cache[y_ix][1] + rot_angle 62 end_dash = 180 - cache[x_ix][1] + rot_angle 63 cache[x_ix] = (cache[x_ix][0], start_dash) 64 cache[y_ix] = (cache[y_ix][0], end_dash) 65 66 cache.append(d) 67 result_dxf.extend(cache) 68 cache = list() 69 70 else: 71 cache.append(d) 72 73 result_dxf.extend(cache) 74 return result_dxf 75 76 # x_dash = np.cos(theta) * x - np.sin(theta) * y + x_move 77 # y_dash = np.sin(theta) * x + np.cor(theta) * y + + y_move 78 # angle_dash = angle + rot_angle 79 80 81def loader(dxf_maker_function: str, dimensional_line_maker_function: str, thickness: str, values: dict, created_data): 82 func_head = "from math import *\n" \ 83 "dxf = list()\n" \ 84 "def add_raw(group: int, value):\n" \ 85 " dxf.append((group, value))\n" \ 86 "def add_line(start: tuple, end: tuple, color, line_type):\n" \ 87 " dxf.append((0, \"LINE\"))\n" \ 88 " dxf.append((8, 0))\n" \ 89 " dxf.append((6, line_type))\n" \ 90 " dxf.append((62, color))\n" \ 91 " dxf.append((10, start[0]))\n" \ 92 " dxf.append((20, start[1]))\n" \ 93 " dxf.append((11, end[0]))\n" \ 94 " dxf.append((21, end[1]))\n" \ 95 "def add_arc(center: tuple, radius: tuple, start, end, color, line_type):\n" \ 96 " dxf.append((0, \"ARC\"))\n" \ 97 " dxf.append((8, 0))\n" \ 98 " dxf.append((6, line_type))\n" \ 99 " dxf.append((62, color))\n" \ 100 " dxf.append((10, center[0]))\n" \ 101 " dxf.append((20, center[1]))\n" \ 102 " dxf.append((30, 0.0))\n" \ 103 " dxf.append((40, radius))\n" \ 104 " dxf.append((50, start))\n" \ 105 " dxf.append((51, end))\n" \ 106 "def PW():\n" \ 107 " global OV, OU, V, U\n" \ 108 " OV, OU = V, U\n" \ 109 "def DW():\n" \ 110 " global OV, OU, V, U, CO, LDOT\n" \ 111 " add_line(start=(OV, OU), end=(V, U), color=CO, line_type=LDOT)\n" \ 112 " OV, OU = V, U\n" \ 113 "def RR():\n" \ 114 " global XC, YC, R, K1, KK, CO, LDOT\n" \ 115 " add_arc(center=(XC, YC), radius=R, start=K1, end=K1 + KK, color=CO, line_type=LDOT)\n"

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hayataka2049

2018/09/21 07:48

断片的なコードではなく、実際に動作するコードを示してください。また、どんなライブラリを使っているのかわかるようにしてください
takashi774

2018/09/21 07:55

Python3.5標準の組み込み関数,及びmathライブラリ内の関数です。
hayataka2049

2018/09/21 07:58

これらの関数が標準で組み込まれていないことはドキュメントを検索して確認済みです。外部ライブラリないし自作モジュールの関数であると思われます。
hayataka2049

2018/09/21 08:07

コード全体を掲載していただくのが一番てっとりばやいと思いますが、できないような都合があるのでしょうか。コード中のimportの部分だけでも掲載できませんか? どのライブラリなのかわからないことには回答もつきづらいかと。
takashi774

2018/09/21 08:22

殆どが外部に委託したので詳しくわかりません。補足に追加しましたがあってますでしょうか
takashi774

2018/09/21 08:40

助言ありがとうございます。
hayataka2049

2018/09/21 08:47

状況はわかりました。が、これは委託した先に聞く(可能なら)とか、仕様書を確認するとかして解決するしかないような・・・
takashi774

2018/09/21 08:58

委託先は解散、仕様書らしいものが無い状態です。どん詰まりです(TT)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問