0

cp5 的 ColorPicker 是硬编码的,我无法调整滑块的形状。所以我扩展了 ColorPicker 类并创建了一个名为 MyColorPicker 的新类。

我有几个小组,我想将我的新课程添加到其中一个小组。早些时候,我可以通过cp5.addColorPicker("") .moveTo("")但在这种情况下有一个新课程,我无法将它移到组中。这是代码片段:

import controlP5.*;
ControlP5 cp5;
 
MyColorPicker cp;
 
void setup() {
  size(500, 300);
  noStroke();
  cp5 = new ControlP5(this);
  cp = new MyColorPicker(cp5, "MYPICKER");
  cp.setPosition(50, 50).setColorValue(color(255, 000, 000, 255));

  Group SetupGroup = cp5.addGroup("SETUP")
    .setPosition(90,100)
    .setWidth(150)
    .setHeight(30)
    .setFont(font2);
    background(0); //For transparency
    noStroke();
  ;

    Group ColorGroup = cp5.addGroup("COLOR-BRIGHTNESS")
    .setPosition(30,240)
    .setWidth(300)
    .setHeight(30)
    .setFont(font2)
    .moveTo(SetupGroup);
    background(0);
    noStroke();
    ;

//I want to move my own color picker to the colorGroup instead of this one.
/*
    cp5.addColorPicker("PICKER")
    .setPosition(40, 10)
    .moveTo(ColorGroup);
    ; */
.
.
.
.
.
.
.}

class MyColorPicker extends ColorPicker {
  MyColorPicker(ControlP5 cp5, String theName) {
    super(cp5, cp5.getTab("default"), theName, 0, 0, 100, 10);
  }
 
  void setItemSize(int w, int h) {
    sliderRed.setSize(w, h);
    sliderGreen.setSize(w, h);
    sliderBlue.setSize(w, h);
    sliderAlpha.setSize(w, h);
   
    sliderRed.setPosition(10,10);
    sliderGreen.setPosition(10,100);
    sliderBlue.setPosition(10,180);
    sliderAlpha.setPosition(10,260);
  }
}
4

1 回答 1

1

我建议在发布之前修复语法错误,并删除任何可能与问题无关的代码。过去多次尝试以这种方式清理/最小化代码使解决方案对我来说显而易见。

我不确定您是否可以在组内对组进行分组。我可能是错的,如果我错了,希望对 cp5 更有经验的人可以纠正我。

如果您使用单个组并修复语法错误,您可以运行如下内容:

import controlP5.*;
ControlP5 cp5;
 
MyColorPicker cp;
 
PFont font, font2; 
 
void setup() {
  size(500, 300);
  noStroke();
  
  font = createFont ("Georgia Bold", 20);
  font2 = createFont ("Georgia Bold",15);
  
  cp5 = new ControlP5(this);
  
  Group SetupGroup = cp5.addGroup("SETUP")
    .setPosition(90,100)
    .setWidth(150)
    .setHeight(30)
    .setFont(font2);

  cp = new MyColorPicker(cp5, "MYPICKER");
  cp.setPosition(50, 50).setColorValue(color(255, 000, 000, 255));
  cp.moveTo(SetupGroup);
}

void draw(){
  background(0);
}

class MyColorPicker extends ColorPicker {
  MyColorPicker(ControlP5 cp5, String theName) {
    super(cp5, cp5.getTab("default"), theName, 0, 0, 100, 10);
  }
 
  void setItemSize(int w, int h) {
    sliderRed.setSize(w, h);
    sliderGreen.setSize(w, h);
    sliderBlue.setSize(w, h);
    sliderAlpha.setSize(w, h);
   
    sliderRed.setPosition(10,10);
    sliderGreen.setPosition(10,100);
    sliderBlue.setPosition(10,180);
    sliderAlpha.setPosition(10,260);
  }
}

扩展颜色选择器做得很好,毕竟不是noobie;)

如果您想要两个 LED 环的两个颜色选择器但不能同时显示两者,也许您可​​以使用手风琴

import controlP5.*;
ControlP5 cp5;
 
MyColorPicker cp1, cp2;
 
PFont font, font2; 
 
void setup() {
  size(500, 300);
  noStroke();
  
  font = createFont ("Georgia Bold", 20);
  font2 = createFont ("Georgia Bold",15);
  
  cp5 = new ControlP5(this);
  
  Group ring1Group = cp5.addGroup("ring 1")
    .setPosition(90,100)
    .setWidth(150)
    .setHeight(30)
    .setFont(font2);
    
  cp1 = new MyColorPicker(cp5, "ring 1 picker");
  cp1.setPosition(50, 50).setColorValue(color(255, 000, 000, 255));
  cp1.moveTo(ring1Group);
  
  Group ring2Group = cp5.addGroup("ring 2")
    .setPosition(90,240)
    .setWidth(150)
    .setHeight(30)
    .setFont(font2);
    
  cp2 = new MyColorPicker(cp5, "ring 2 picker");
  cp2.setPosition(50, 50).setColorValue(color(000, 255, 000, 255));
  cp2.moveTo(ring2Group);
  
  cp5.addAccordion("ring colors")
     .setPosition(40,40)
     .setWidth(200)
     .addItem(ring1Group)
     .addItem(ring2Group)
     ;
}

void draw(){
  background(0);
}

class MyColorPicker extends ColorPicker {
  MyColorPicker(ControlP5 cp5, String theName) {
    super(cp5, cp5.getTab("default"), theName, 0, 0, 100, 10);
  }
 
  void setItemSize(int w, int h) {
    sliderRed.setSize(w, h);
    sliderGreen.setSize(w, h);
    sliderBlue.setSize(w, h);
    sliderAlpha.setSize(w, h);
   
    sliderRed.setPosition(10,10);
    sliderGreen.setPosition(10,100);
    sliderBlue.setPosition(10,180);
    sliderAlpha.setPosition(10,260);
  }
}

我也不确定手风琴组件是否支持多个嵌套级别。我希望它支持扁平的层次结构。

于 2021-08-17T21:33:09.573 回答