May 072012
 

4.クラス

4-1.クラス

4-1-1.クラスの定義

# -*- coding: utf-8 -*-
#4-1-1.クラスの定義
 
#クラスの定義
#class クラス名(クラス名は頭文字は大文字にすることが通例)
class ClassName:
    #
    #.
    #.
    #.
    #

4-1-2.コンストラクタ

# -*- coding: utf-8 -*-
#4-1-2.コンストラクタ
 
class TestClass:
 
    #コンストラクタ
    def __init__(self):            #第一引数に'self'を用いる
        pass

4-1-3.インスタンス

# -*- coding: utf-8 -*-
#4-1-3.インスタンス
 
class TestClass:
 
    #コンストラクタ                 #第一引数(self)以外の引数が無い場合は省略可
    def __init__(self):
        pass
 
test = TestClass()                #インスタンス生成
 
#配列(リスト)を用いたインスタンスの生成
 
test = []                         #空の配列(リスト)の生成
 
for i in range(0,2):
    test.append(TestClass())      #インスタンス生成

4-1-4.属性(インスタンス変数)

# -*- coding: utf-8 -*-
#4-1-4.属性(インスタンス変数)
 
#クラス
class TestClass:

    #コンストラクタ
    def __init__(self, _name):    #引数:_name
        self.name = _name         #属性に代入
 
test = []
 
for i in range(0,2):
    test.append(TestClass("test[" + str(i) +"]")) 
 
for t in test:
    print t.name                  #属性の呼び出し
    #test[i]

4-1-5.メソッド(インスタンス関数)

# -*- coding: utf-8 -*-
#4-1-5.メソッド(インスタンス関数)
 
#クラス
class TestClass:
 
    #コンストラクタ
    def __init__(self, _name):
        self.name = _name
 
    #メソッド(インスタンス関数)
    def func(self):               #'self'を第一引数に必ず入れる
        print self.name           #属性を用いる際は'self.'で呼び出す
 
test = []
 
for i in range(0,2):
    test.append(TestClass("test[" + str(i) +"]")) 
 
for t in test:
    t.func()                     #メソッドの呼び出し
    #test[i]

演習(5)

以下のプログラムをクラスを使って実装し直して下さい。

# -*- coding: utf-8 -*-
import rhinoscriptsyntax as rs
from random import *

###############################
#カスタム関数定義
###############################
#printName関数
def printName(_name):
	print _name

#drawPt関数
def drawPt(_pt):
	rs.AddPoint(_pt)

#drawText関数
def drawText(_pt, _name):
	text = "%s = (%s, %s, %s)" % (_name, _pt[0], _pt[1], _pt[2])
	rs.AddText(text, _pt)
	
#drawLine関数
def drawLine(_pt):
	rs.AddLine([0,0,0], _pt)


###############################
#リストに名前と座標を保存
###############################
names = []
pts = []
for i in range(0,10):
	#名前
	name = 'point No.' + str(i)
	names.append(name)
	#座標
	x = randint(-20,20)
	y = randint(-20,20)
	z = randint(-20,20)
	pt = [x, y, z]
	pts.append(pt)


###############################
#関数呼び出し
###############################
#printName関数呼び出し
for name in names:
	printName(name)

#drawPt関数呼び出し
for pt in pts:
	drawPt(pt)

#drawText関数呼び出し
for i in range(len(pts)):
	drawText(pts[i],names[i])
	
#drawLine関数呼び出し
for pt in pts:
	drawLine(pt)


演習(6)

以下のクラスを作成しなさい

クラス名:
DivideObj()

属性:
Curve01・・・1つ目のカープid
Curve02・・・2つ目のカープid
numOfDivs・・・分節数

コンストラクタ引数:
_Curve01・・・1つ目のカープid(インスタンス生成前にGetObject()でidを取得しておく)
_Curve02・・・2つ目のカープid(インスタンス生成前にGetObject()でidを取得しておく)
_numOfDivs・・・分節数

メソッド名:
drawLineBetweenCurves()・・・strCurve01とstrCurve02をnumOfDivsで分節し、分節点同士を直線で結ぶ

<作図の手順>
1.事前に2本のカーブを作図しておく
2.プログラムを実行する
3.2本のカーブをピックする(GetObject())
4.選択したカーブを等分節し、分節点の座標を読み込む(DivideCurve())
5.2本のカーブの分節点同士をラインで結ぶ(AddLine())

[参考]
GetObject()
http://www.rhino3d.com/5/ironpython/functions/getobject.htm
DivideCurve()
http://www.rhino3d.com/5/ironpython/functions/dividecurve.htm
AddLine()
http://www.rhino3d.com/5/ironpython/functions/addline.htm

[課題参考]
http://vimeo.com/28622971

 Leave a Reply

(required)

(required)

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>