'Music & Guitar' 카테고리의 다른 글

I will - Paul McCartney  (0) 2012.12.26
Axis of Awesome - 4 Four Chord Song (with song titles)  (0) 2012.12.26
Stand by me (핑거 스타일)  (1) 2012.12.26
Wonderwall - Oasis  (0) 2012.12.26
Don't look back in anger - Oasis  (0) 2012.12.26
Posted by scii
:

후디니 내에서 쓸 수 있는 함수를 만들때의 기본 틀:

[return_type] functionName([[arg_type1] arg_name1 [, [arg_type2] arg_name2] ...])
{
...
}
반환형 타입과 인수 타입은 float,  string, vector, or matrix 를 쓸 수 있다.

#은 주석처리.


만약 반환형과 인수의 타입을 명시하지 않으면 후디니는 자료형에 float이 있는 것처럼 인식한다.

그리고, 만약 인수타입에 string을 넣어야 하는데 그것을 잊고 넣지않으면, float으로 인식해서 잠재적 버그를 

열심히 찾는다고 한다.

자료형을 꼭 명시해야겠다.



Examples

# Function to find the minimum value of two
# floating point numbers

min(v1, v2) {
    if (v1 < v2) {
        return v1;
    } else {
        return v2;
    }
}

# Function to reverse the order of a string

string strreverse(string in) {
    float len = strlen(in);
    
    string result = "";
    
    for (src = len-1; src >= 0; src--) {
        result += in[src]; return result;
    }
}

# Example to find the minimum element in a vector

float vecmin(vector vec) {
    min = vec[0];
    
    for (i = 1; i < vsize(vec); i++) {
        if (vec[i] < min)  min = vec[i];
    }
    
    return min;
}

# Example to transform a vector into the space
# of an object passed in.

vector opxform(string oname, vector v) {
    matrix xform = 1;
    
    if (index(oname, "/obj/")) {
        xform = optransform(oname);
    } else {
        xform = optransform("/obj/"+oname);
    }
    
    return v * xform;
}

# Example to find all objects which have their
# display flag set

string opdisplay() {
    string objects = run("opls /obj");
    string result = "";
    nargs = argc(objects);
    
    for (i = 0; i < nargs; i++) {
        string obj = arg(objects, i);
        if ( index(run("opset " + obj), " -d on") >= 0 ) result += " " + obj;
    }
    
    return result;
}

'Houdini > Houdini etc' 카테고리의 다른 글

Houdini User가 갖춰야 할...  (0) 2012.12.02
Cross Product  (0) 2012.11.27
12.08.20 MON  (0) 2012.08.23
짝수 공식  (0) 2012.05.16
$F, $FF 의 차이점  (0) 2012.05.04
Posted by scii
:

C++ 표준 라이브러리에는 string 이라는 이름의 클래스가 정의되어 있다. 클래스의 이름이 의미하는 것처럼, 문자열의 처리를 목적으로 정의된 클래스이며, 이 클래스의 사용을 위해서는 헤더파일 <string> 을 포함해야 한다.


string 클래스를 대체할 수 있는 String 클래스를 구현해 보자~!!


표준 string 클래스의 분석


1. 문자열을 인자로 전달받는 생성자의 정의


2. 생성자, 소멸자, 복사 생성자 그리고 대입 연산자의 정의

- 저장하고자 하는 문자열의 길이가 일정치 않다. 따라서 문자열의 저장을 위한 메모리 공간을 생성자 내에서 동적 할당해야 한다. 

그리고 이로 인해서 소멸자를 정의해야 하며, 깊은 복사를 하는 복사 생성자와 대입 연산자까지 함께 정의하고자 한다.


3. 결합된 문자열로 초기화된 객체를 반환하는 + 연산자의 오버로딩

- + 연산자의 반환 값은 2가지로 생각할 수 있다.

1. 문자열의 주소 값(str1과 str2가 지니고 있는 문자열을 합한 문자열의 주소 값)

2. string 객체(str1과 str2가 지니고 있는 문자열을 합한 문자열을 저장하고 있는 객체)


4. 문자열을 덧붙이는 += 연산자의 오버로딩


5. 내용비교를 진행하는 == 연산자의 오버로딩


6. 콘솔입출력이 가능하도록 <<, >> 연산자의 오버로딩





61행: 주석에 달린 것 처럼 *this = *this+s;

                return *this; 

이렇게 정의해도 똑같다. 이러한 형태의 정의는 간결해 보이고 이해하기도 좋지만, 덧셈의 과정에서 객체가 추가로 생성된다는 단점이 있다.

하지만 컴퓨팅 파워가 좋은 환경이라면 이 정도는 단점이 될 수 없다. 이러한 형태의 구현도 생각해볼 만하다.


※ #include <string> 헤더파일을 포함시키면, 이렇게 직접 구현하지않고 이런식이 되도록 쓸 수 있다.


Posted by scii
: