framework2
61 строка · 1.8 Кб
1//
2// ofxFBXNurbsCurve.cpp
3//
4// Created by Nick Hardeman on 5/8/19.
5//
6
7#include "ofxFBXNurbsCurve.h"
8#include "ofxFBXSrcNurbsCurve.h"
9
10//----------------------------------------
11ofxFBXSource::Node::NodeType ofxFBXNurbsCurve::getType() {
12return ofxFBXSource::Node::OFX_FBX_NURBS_CURVE;
13}
14
15//--------------------------------------------------------------
16void ofxFBXNurbsCurve::setup( shared_ptr<ofxFBXSource::Node> anode ) {
17ofxFBXNode::setup( anode );
18if( anode && anode->getType() == ofxFBXSource::Node::OFX_FBX_NURBS_CURVE ) {
19auto tc = dynamic_pointer_cast<ofxFBXSource::NurbsCurve>( anode );
20tc->configurePolyline( mPolyline );
21setTransform( tc );
22}
23}
24
25//--------------------------------------------------------------
26void ofxFBXNurbsCurve::draw() {
27if(mPolyline.size()) {
28transformGL(); {
29mPolyline.draw();
30} restoreTransformGL();
31}
32}
33//
34//--------------------------------------------------------------
35void ofxFBXNurbsCurve::setPolyline( ofPolyline& apoly ) {
36mPolyline = apoly;
37}
38
39//--------------------------------------------------------------
40ofPolyline ofxFBXNurbsCurve::getGlobalPolyline() {
41glm::mat4 gmat = getGlobalTransformMatrix();
42// transform points into global space //
43ofPolyline tpoly = getPolyline();
44
45for( int i = 0; i < tpoly.size(); i++ ) {
46auto& mp = tpoly[i];
47glm::vec4 v = gmat * glm::vec4(mp, 1.0);
48mp = glm::vec3(v.x, v.y, v.z);
49}
50return tpoly;
51}
52
53//--------------------------------------------------------------
54ofPolyline ofxFBXNurbsCurve::getGlobalPolylineAroundPosition() {
55glm::vec3 gpos = getGlobalPosition();
56auto tpoly = getGlobalPolyline();
57for( auto& tv : tpoly.getVertices() ) {
58tv -= gpos;
59}
60return tpoly;
61}
62
63