static const char* const CLASS = "AddInputsSol";

static const char* const HELP =
"Add all the inputs together dynamic by solHe"; // Standard plug-in include files. #include "DDImage/NoIop.h"
#include "DDImage/Op.h"
#include "DDImage/NukeWrapper.h"
using namespace DD::Image;
#include "DDImage/Row.h"
#include "DDImage/Tile.h"
#include "DDImage/Knobs.h"
#include "DDImage/ViewerContext.h"
#include <string.h>
#include "stdlib.h" class AddInputsSol : public NoIop
{
int first_frame;
int last_frame;
int _numberKnobs,_numberNewKnobs;
int _change_bool;
char *knoblabel,*newknoblabel,*knobname_f,*newknobname_f,*knobname_l,*newknobname_l;
int _inputsnewnum;
char inputs_s[20];
char *inputs_c;
char temp[20];
char temp_label[20];
int inputsnum; public:
int minimum_inputs() const { return 1; }
int maximum_inputs() const { return 100; } AddInputsSol(Node* node) : NoIop(node),
first_frame(0),
last_frame(99),
_change_bool(0),
knoblabel("Frame Range "),
//newknoblabel("Frame Range"),
knobname_f("fisrt_frame_"),
//newknobname_f("fisrt_frame_"),
knobname_l("last_frame_")
//newknobname_l("last_frame_")
{
_inputsnewnum = inputs();
_numberKnobs = 2;
_numberNewKnobs = _inputsnewnum * 2 - 2;
int inputsnum = 0; } virtual void knobs(Knob_Callback);
//virtual void anyInputHandles(ViewerContext*);
static void addDynamicKnobs(void*, Knob_Callback);
int* get_first_frame() { return &first_frame; }
int* get_last_frame() { return &last_frame; }
char* dynamicName_label(int);
char* dynamicName_first(int);
char* dynamicName_last(int);
void get_real_inputs(); void knobs_replace(void* ); //refresh the set() of knobs.
virtual int knob_changed(Knob* ); //used to get the state that if input number of arrow changed. //void _validate(bool);
const char* Class() const { return CLASS; }
const char* node_help() const { return HELP; }
static const Iop::Description description;
}; /*
void AddInputsSol::_validate(bool for_real)
{
copy_info();
if(_inputsnum != _inputsnewnum)
{
_inputsnum = _inputsnewnum;
knob("lastFrame")->set_value(_inputsnum);
return;
}
input_changed(this->firstOp()); }
*/ void AddInputsSol::knobs(Knob_Callback f)
{
Int_knob(f, &first_frame, "fisrt_frame_1", "Frame Range 1");
//SetFlags(f, Knob::NO_ANIMATION);
Int_knob(f, &last_frame, "last_frame_1", "");
//SetFlags(f, Knob::NO_ANIMATION); SetFlags(f,Knob::KNOB_CHANGED_ALWAYS); //split from here to indicate that the script after here is dynamic. if( !f.makeKnobs() )
{
get_real_inputs();
}
} //compare number of inputs arrows and number of knobs,return a state value.
int AddInputsSol::knob_changed(Knob* k)
{
//caluculate the real sum of inputs() if( _numberKnobs != 2 * inputsnum | inputsnum != inputs() )
{
//refresh the knob list
_change_bool = 1; _numberNewKnobs = replace_knobs(knob("last_frame_1"), _numberNewKnobs, addDynamicKnobs, this->firstOp()); _numberKnobs = 2 + _numberNewKnobs; return 1;
}
else
{ //nothing happen.
_change_bool = 0;
_numberKnobs += 0;
get_real_inputs();
return NoIop::knob_changed(k);
}
} void AddInputsSol::get_real_inputs()
{
int i;
int inputsnum = 0;
for (i = 1;i <= inputs();i++)
{
if( node_input(i,OUTPUT_OP) != NULL )
{
inputsnum += 1;
}
}
} void AddInputsSol::addDynamicKnobs(void* p,Knob_Callback f)
{
if( ( ( AddInputsSol* ) p ) -> _change_bool == 1 )
{
//get the real number of inputs.
( ( AddInputsSol* ) p ) -> get_real_inputs(); //create knobs.
int i,num;
num = ( ( AddInputsSol* ) p ) -> inputsnum - 1; for ( i = 1; i <= ( ( AddInputsSol* ) p ) -> inputs() - 1; i++ )
{
Int_knob(f, ((AddInputsSol*) p) -> get_first_frame(), ((AddInputsSol*) p) -> dynamicName_first(i+1), ((AddInputsSol*) p) -> dynamicName_label(i+1));
Int_knob(f, ((AddInputsSol*) p) -> get_last_frame(), ((AddInputsSol*) p) -> dynamicName_last(i+1), "");
}
}
} char* AddInputsSol::dynamicName_label(int i)
{
char* inputs_c = itoa(i,inputs_s,20);
strcpy(temp_label,knoblabel);
strcat(temp_label,inputs_c);
char* newknoblabel = (LPSTR)temp_label; return newknoblabel;
} char* AddInputsSol::dynamicName_first(int i)
{
char* inputs_c = itoa(i,inputs_s,100);
//char temp[20];
strcpy(temp,knobname_f);
strcat(temp,inputs_c);
char* newknobname_f = (LPSTR)temp; return newknobname_f;
} char* AddInputsSol::dynamicName_last(int i)
{
char* inputs_c = itoa(i,inputs_s,100);
//char temp[20];
strcpy(temp,knobname_l);
strcat(temp,inputs_c);
char* newknobname_l = (LPSTR)temp; return newknobname_l;
} /*! The Iop::Description is how NUKE knows what the name of the operator is,
how to create one, and the menu item to show the user. The menu item may be
0 if you do not want the operator to be visible.
*/ static Iop* AddInputsCreate(Node* node)
{
return new AddInputsSol(node);
}
static Iop* build(Node* node) { return new NukeWrapper(new AddInputsSol(node)); }
const Iop::Description AddInputsSol::description ( CLASS, "AddInputsSol",
AddInputsCreate );

国内正经搞NDK开发的TD不多,相关研究文章也很少,我就放个自己写的源码做参考吧,写的很乱,希望能给看到这篇文章的人一点启发。

放一个Dynamicinputs corresponding to Dynamicknobs的Node源码的更多相关文章

  1. node源码详解(二 )—— 运行机制 、整体流程

    本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource2 本博客同步在https://cnodejs.o ...

  2. mac下编译node源码

    看过一篇win7 64x下面编译node的文章,链接地址:编译nodejs及其源码研究 下面学习一下在mac下面如何编译node源码. 过程也挺简单. 1.下载源码. > mkdir nodes ...

  3. 分享一个与ABP配套使用的代码生成器源码

    点这里进入ABP系列文章总目录 分享一个与ABP配套使用的代码生成器源码 真对不起关注我博客的朋友, 因最近工作很忙, 很久没有更新博客了.以前答应把自用的代码生成器源码共享出来, 也一直没有时间整理 ...

  4. 整合了一个功能强大完善的OA系统源码,php全开源 界面漂亮美观

    整合了一个功能强大完善的OA系统源码,php全开源界面漂亮美观.需要的同学联系Q:930948049

  5. node源码详解(三)—— js代码在node中的位置,process、require、module、exports的由来

    本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource3 本博客同步在https://cnodejs.o ...

  6. node源码详解(三)

    本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource3 本博客同步在https://cnodejs.o ...

  7. node源码详解(四) —— js代码如何调用C++的函数

    本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource4 本博客同步在https://cnodejs.o ...

  8. node源码详解 (一)

    本作品采用知识共享署名 4.0 国际许可协议进行许可.转载保留声明头部与原文链接https://luzeshu.com/blog/nodesource1 本博客同步在https://cnodejs.o ...

  9. 一个Python开源项目-哈勃沙箱源码剖析(下)

    前言 在上一篇中,我们讲解了哈勃沙箱的技术点,详细分析了静态检测和动态检测的流程.本篇接着对动态检测的关键技术点进行分析,包括strace,sysdig,volatility.volatility的介 ...

随机推荐

  1. web(二)html

    html编写规范 在输入开始标签时同时输入结束标签,以防丢失标签 保证缩紧格式(一个tab键) 主动添加注释(快捷键 选中后 Ctrl+Shift+/) Html的调试 开发者工具(快捷键F12)是前 ...

  2. 20165228 2017-2018-2 《Java程序设计》第4周学习总结

    20165228 2016-2017-2 <Java程序设计>第4周学习总结 教材学习内容总结 子类与继承 子类的定义:使用关键词extends class 子类名 extends 父类名 ...

  3. mastering elasticsearch

    概念: Term: 它是搜索的基本单位,其表现形式为文本中的一个词. Token: 它是单个Term在所属Field中文本的呈现形式,包含了Term内容.Term类型.Term在文本中的起始及偏移位置 ...

  4. linux测试系统使用expdp迁移数据到windos系统,11.2.0.4版本测试

    测试,使用linux 系统,迁移至windos测试系统,迁移用户scott 1.源端导出(linux) 2.传输 3.目标端导入(windows) 1.源端导出,本次使用expdp 1)创建操作系统转 ...

  5. MongDB篇,第四章:数据库知识4

    MongDB 数据库知识4 GridFS 大文件存储 文件的数据库存储 1,在数据库中以   字符串的方式  存储文件在本地的路径: 优点: 节省数据库空间 缺点: 当数据库或者文件位置发生变化时则无 ...

  6. mysql设置更改root密码、mysql服务器的连接、mysql常用命令

     1.设置更改root密码 查看mysql 启动与否,若没启动就运行:/usr/local/mysql56/bin/mysqlps aux |grep mysql  或 netstat -tulnp ...

  7. 无用之flask

    Oldboy s4 Flask   Flask是一个基于Python开发并且依赖jinja2模板和Werkzeug WSGI服务的一个微型框架,对于Werkzeug本质是Socket服务端,其用于接收 ...

  8. Linux压缩文件笔记

    https://my.oschina.net/dongqianlin/blog/97168http://linux.it.net.cn/CentOS/fast/2017/0628/27029.html ...

  9. ELFhash

    字符串哈希算法(以ELFHash详解)   更多字符串哈希算法请参考:http://blog.csdn.net/AlburtHoffman/article/details/19641123 先来了解一 ...

  10. C++中的继承和多继承

    一.学习笔记 1.继承 class Student : public Person { ... } 2.继承时权限派生类中可以直接访问父类的protected成员,但是不能访问其private成员,若 ...