日本語入力を簡単に

  • このフォーラムに新しいトピックを立てることはできません
  • このフォーラムではゲスト投稿が禁止されています

投稿ツリー



前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011/12/17 19:22
Takeshi  新米 居住地: 愛知  投稿数: 9
※追記:UNDO設定をつけ、上書きもできるように変更しました2011/12/27

Blenderが日本語UIに対応しましたね
しかし、いまだ日本語の直接入力が実現していません
以前からまんださんやchromolyが作ったTkを使用したスクリプトを利用してきましたが
http://blender.jp/modules/newbb/viewtopic.php?viewmode=flat&order=ASC&topic_id=857&forum=3&move=next&topic_time=1212205316
http://blender.jp/modules/news/article.php?storyid=3274
バージョンアップに伴って、pythonが内蔵式になったためか僕の環境で使えなくなっていました
新しいのに乗り換えてスクリプトは、古いバージョンで使うか迷っていたんですが


間を取って(?)新しく違うスクリプトを書いてみました
クリップボードを使用して貼り付けるというものです
Windows専用ですがよかったら使ってください
※既存のスクリプトに似ています アップしてもいいのでしょうか?←事後承諾
bl_info = {
    "name": "Paste from Clipbord(for win32)",
    "author": "Takeshi",
    "version": (1, 0),
    "blender": (2, 61, 0),
    "api": 42615,
    "location": "Properties -> ObjectData",
    "description": "Paste text from clipboard",
    "warning": "",
    "wiki_url": "",
    "tracker_url": "",
    "category": "Text"}


import bpy
from bpy.props import *
import sys
from ctypes import *

OpenClipboard = windll.user32.OpenClipboard
GetClipboardData = windll.user32.GetClipboardData
CloseClipboard = windll.user32.CloseClipboard
GlobalLock = windll.kernel32.GlobalLock
GlobalUnlock = windll.kernel32.GlobalUnlock



#### Text Edit Operator ####
class TEXT_OT_PCB(bpy.types.Operator):
    bl_description = 'Paste text from Clipboard'
    bl_idname = 'text.paste_clipboard'
    bl_label = 'Paste text'
    bl_undo = True

    @classmethod
    def poll(cls, context):
        actob = context.active_object
        return (actob and actob.type == 'FONT')

    def paste(self):
        scene = bpy.context.scene
        if OpenClipboard(c_int(0)):
            hClipMem = GetClipboardData(c_int(13))
            GlobalLock.restype = c_wchar_p
            text = GlobalLock(c_int(hClipMem))
            GlobalUnlock(c_int(hClipMem))
            CloseClipboard()
        
        if text:
            ob = bpy.context.active_object
            editmode = ob.mode
            if editmode == 'EDIT':
                bpy.ops.object.mode_set(mode='OBJECT')
            ####
            if scene.paste_type == "0":
                ob.data.body = text
            if scene.paste_type == "1":
                ob.data.body += text
            ####
            if editmode == 'EDIT':
                bpy.ops.object.mode_set(mode='EDIT')

    def execute(self, context=None):
        self.paste()
        return {'FINISHED'}


## Load Fonts ##
if sys.platform == 'win32':  # Windows
    font_paths = ('C:\WINDOWS\Fonts\msgothic.ttc',
                  'C:\WINDOWS\Fonts\msmincho.ttc',
                  'C:\WINDOWS\Fonts\meiryo.ttc')
else:  # Linux etc.
    font_paths = ('/home/hoge/.fonts/meiryo/meiryo.ttc',
                  '/home/hoge/.fonts/meiryo/meiryob.ttc')
#### Load Fonts Operator ####
class TEXT_OT_load_fonts(bpy.types.Operator):
    '''Load fonts'''
    bl_description = "load fonts (PCB)"
    bl_idname = 'text.load_fonts'
    bl_label = 'Load Fonts'

    setactob = BoolProperty(default=False)

    '''
    @classmethod
    def poll(cls, context):
        actob = context.active_object
        return actob and actob.type == 'FONT'
    '''

    def execute(self, context=None):
        if not font_paths:
            return {'FINISHED'}
        loadedpaths = [f.filepath for f in bpy.data.fonts]
        for path in font_paths:
            if not path in loadedpaths:
                bpy.ops.font.open(filepath=path)

        if self.setactob:
            actob = bpy.context.active_object
            if actob and actob.type == 'FONT':
                for font in bpy.data.fonts:
                    if font.filepath == font_paths[0]:
                        actob.data.font = font
                        break
        return {'FINISHED'}

#### Add Panel ####
class DATA_PT_call_PCB(bpy.types.Panel):
    bl_label = "Paste"
    bl_space_type = 'PROPERTIES'
    bl_region_type = 'WINDOW'
    bl_context = 'data'

    @classmethod
    def poll(cls, context):
        actob = context.active_object
        return (actob and actob.type == 'FONT')

    def draw(self, context):
        layout = self.layout
        split = layout.split()
        col = split.column(align=True)
        col.operator('text.paste_clipboard', text='Paste from Clipboard', icon='FONT_DATA')
        col.prop(context.scene, "paste_type", expand=True)
        
        col = split.column(align=True)
        op = col.operator('text.load_fonts', text='Load Fonts', icon='FILE_FONT')
        op.setactob = True
        

### Registration ###
def register():
    bpy.utils.register_class(TEXT_OT_PCB)
    bpy.utils.register_class(TEXT_OT_load_fonts)
    bpy.utils.register_class(DATA_PT_call_PCB)
    
    bpy.types.Scene.paste_type = EnumProperty(
        name="Paste Type",
        description="Select the type of way to paste text",
        items=[("0","Over write","over write text"),
               ("1","Add","add text at the end of data")
              ],
        default='1')
    

def unregister():
    bpy.utils.unregister_class(TEXT_OT_PCB)
    bpy.utils.unregister_class(TEXT_OT_load_fonts)
    bpy.utils.unregister_class(DATA_PT_call_PCB)
    del bpy.tepes.Scene.paste_type

if __name__ == '__main__':
    register()

#### 使い方 ####
テキストは末尾に追加されます
・スクリプトを導入
・テキストを追加して選択、propertiesのFとあるObjectDataタブにPasteが追加されていることを確認
・貼り付けたいテキストをどこからでもいいのでコピー(内部はunicodeなので、大体の言語をカバーできると思います)
・Paste from Clipboardボタンをクリック → OK?
・Load Fontsボタンで日本語表示可能な大体のフォントを読み込みます

Thank you


投票数:1 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011/12/23 0:19
yamyam  管理人 居住地: そうや、うちはおおさかやー  投稿数: 4215
@Takeshiさん
公開ありがとうございます。

試してみましたが、以下の行でコメントの前に全角スペースが入っていたのでそこでSyntax Errorがでていました。
                  '/home/hoge/.fonts/meiryo/meiryob.ttc')  # You should deleate this block
とりあえずこれを直し、UTF8Nで保存したテキストファイルをアップしましたが、ライセンス表記などが必要ならその旨お返事いただければ一旦削除し、よろしければ再びアップさせていただきます。

#もしかしたらBF-Funboardかどこかで別の記事で投稿されていた方でしょうか?
#違っていたらごめんなさい

@他の方へ
上記を直し、UTF8Nで保存したテキストファイルを添付します。試したい方は、
Userプリファレンス→Addonsタブの一番下にある[Install Addon...]からこのファイルを指定し(日本語パス上に置くとだめかも)
その後チェックを付けてEnable(ON)にし、あとはTakeshiさんの投稿を参考にしてください。
勝手に修正してアップしたので再配布は今のところ禁止でお願いします。
:download:JPTextInput.py

投票数:1 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011/12/23 20:18
Takeshi  新米 居住地: 愛知  投稿数: 9
yamyamさん修正ありがとうございます
Windows専用なのでこの部分のコードはいらないなと思い投稿した後にコメントを追加したので、全角スペースが入ってしまったようです
貼り付けておいたスクリプトのほうは修正しておきました

Addonsのインストールの仕方まで記載していただきありがとうございます。
ライセンス表記についてですが、あまり詳しくなくてすみません
よくわからないのですが、とりあえずこのコードの権利はこだわりません「再配布して頂いていいです」

#BF-Funboardには記事を投稿したことはありません
投票数:0 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿.1 | 投稿日時 2011/12/26 22:32
まんだ  長老 居住地: むかしは本州の西端  投稿数: 570
こんばんは。

なんか名前が出ているので。

将来的に「GPLブロックが先頭に付くかも」という場合には、「ダウン
ロードできるページ(URL)の明示」を求められる場合にも対応できる
ようにしておいた方がいいかな、なんて。

もし、自身のページをお持ちのようでしたらそこに、お持ちでなければ
http://pasteall.org/ に貼りつけて「パーマリンクに準ずる」扱い
とするというのはどうでしょうか?
最近だと https://github.com/ なんかのほうがいいかな?

この手の需要って他の国、ウムラウトとかアクセントとかが付くヨーロッパ
の国でもあるようですから、 http://www.blenderartists.org/forum/
あたりに投稿してみる、というのはいかがでしょう?

ではー。
投票数:2 平均点:0.00
前の投稿 - 次の投稿 | 親投稿 - 子投稿なし | 投稿日時 2011/12/26 23:26
Takeshi  新米 居住地: 愛知  投稿数: 9

まんださん返信ありがとうございます

今度しっかりライセンスについて勉強したいです
センターが近いので、貼り付けはそのあとにしたいと思います
投票数:0 平均点:0.00

  条件検索へ


ログイン

ユーザ名:

パスワード:



パスワード紛失

クイックリンク

2021/07/01版
●Blender.org
BlenderFoundation
- Blenderのダウンロード
- 公式チュート等
- 公式マニュアル(和訳)

●ニュース(英文)
BlenderNation

●Blenderコミュニティ
blenderartists.org

●Blender Q&A
- Blender Stack Exchange

●テストビルド
Buildbot(自動生成)


●開発関連
公式開発サイト
Blender開発blog
Blender Wiki