EDA365电子论坛网

标题: 求大神帮忙,在帖子里找到一个skill,想修改一下,但能力太差 [打印本页]

作者: 1621142761    时间: 2022-3-25 23:37
标题: 求大神帮忙,在帖子里找到一个skill,想修改一下,但能力太差
如下图描述
源码如下,改到一半不会了
axlCmdRegister( "ViewLayer" 'ViewLayer ?cmdType "general")
defun( ViewLayer ()
let((f h)
        f = axlTempFile()
        h = outfile(f "w")
        fprintf(h "FILE_TYPE=FORM_DEFN VERSION=2\n")
        fprintf(h "FORM\n")
        fprintf(h "FIXED\n")
        fprintf(h "PORT 41 15\n")
        fprintf(h "HEADER \"EDA365 Skill\"\n")
        fprintf(h "TILE\n")

        fprintf(h "FIELD outline_color\n")
        fprintf(h "FLOC 2 1\n")
        fprintf(h "COLOR 2 1\n")
        fprintf(h "ENDFIELD\n")

        fprintf(h "FIELD outline_check\n")
        fprintf(h "FLOC 4 1\n")
        fprintf(h "CHECKLIST \"Board Geometry/Outline\"\n")
        fprintf(h "ENDFIELD\n")


        fprintf(h "FIELD SilkT_color\n")
        fprintf(h "FLOC 2 4\n")
        fprintf(h "COLOR 2 1\n")
        fprintf(h "ENDFIELD\n")

        fprintf(h "FIELD SilkT_check\n")
        fprintf(h "FLOC 4 4\n")
        fprintf(h "CHECKLIST \"SilkT\"\n")
        fprintf(h "ENDFIELD\n")

        fprintf(h "ENDTILE\n")
        fprintf(h "ENDFORM\n")
        close(h)

        w = axlFormCreate(gensym() f nil 'ViewLayer_Callback t)
        axlFormSetField(w,"outline_color",axlLayerGet("BOARD GEOMETRY/OUTLINE")->color)
        axlFormSetField(w,"outline_check",axlLayerGet("BOARD GEOMETRY/OUTLINE")->visible)
        axlFormDisplay(w)
        axlFormSetField(w,"SilkT_color",axlLayerGet("REF DES/SILKSCREEN_TOP")->color)
        axlFormSetField(w,"SilkT_check",axlLayerGet("REF DES/SILKSCREEN_TOP")->visible)
        axlFormDisplay(w)
))

defun( ViewLayer_Callback (h)
        case( h -> curField
                ("outline_check"
                        axlVisibleLayer("BOARD GEOMETRY/OUTLINE" ,h->curValue)
                        axlVisibleUpdate(t)




                )
        )
)


希望添加如下多个层面
"REF DES/SILKSCREEN_TOP" "PACKAGE GEOMETRY/SILKSCREEN_TOP" "BOARD GEOMETRY/SILKSCREEN_TOP" "BOARD GEOMETRY/DESIGN_OUTLINE" "BOARD GEOMETRY/CUTOUT" "BOARD GEOMETRY/OUTLINE"

谢谢!

作者: 1621142761    时间: 2022-3-25 23:45
图片不知怎么的看不到,重新上图

11.png (104.08 KB, 下载次数: 4)

11.png

222.png (9.51 KB, 下载次数: 5)

222.png

作者: db-_-    时间: 2022-3-26 01:36
复制粘贴不就好了。
form里面一份
初值一份
form相应函数一份

callback里面再复制这一份就好了。
  1.                                 ("SilkT_check"
  2.                                                 axlVisibleLayer("REF DES/SILKSCREEN_TOP" ,h->curValue)
  3.                                                 axlVisibleUpdate(t)
  4.                                 )
复制代码


作者: aarom    时间: 2022-3-26 01:40
提示: 作者被禁止或删除 内容自动屏蔽
作者: 1621142761    时间: 2022-3-26 08:49
aarom 发表于 2022-03-26 01:40:31
本帖最后由 aarom 于 2022-3-26 02:03 编辑

他的寫法是在 form 裡,單獨控制每層的"顏色"及"是否顯示".

你異想天開不改form, 想利用二個選項,

1."BOARD GEOMETRY/OUTLINE" 選項同時控制"BOARD GEOMETRY/DESIGN_OUTLINE" "BOARD GEOMETRY/CUTOUT" "BOARD GEOMETRY/OUTLINE".

2."SilkT"選項同時控制"REF DES/SILKSCREEN_TOP" "ACKAGE GEOMETRY/SILKSCREEN_TOP" "BOARD GEOMETRY/SILKSCREEN_TOP"

問題他是單獨層的控制! 你要你列出的層面一層一層選嗎??
你想清楚再說, 這裡應該有人會幫. (不一定會是我.)
還是只要選項不管顏色,就能一齊控.
----------------------------------------
例如:這是他 form 的"BOARD GEOMETRY/OUTLINE" 單獨控制. 每增加一個層,就要增加一組,及改Y軸數字, 判斷名稱.(你框的是判斷完要的結果.)
        fprintf(h "FIELD outline_color\n")
        fprintf(h "FLOC 2 1\n")
        fprintf(h "COLOR 2 1\n")
        fprintf(h "ENDFIELD\n")

        fprintf(h "FIELD outline_check\n")
        fprintf(h "FLOC 4 1\n")
        fprintf(h "CHECKLIST \"Board Geometry/Outline\"\n")
        fprintf(h "ENDFIELD\n")


嗯嗯,是想将skilT这个选项控制多个层面(最后列出来的那几个层面),不知如何修改,outline的那个选项按照现在单独一个层面就可以,有时间能否帮忙改下,非常感谢!

作者: 1621142761    时间: 2022-3-26 08:50
db-_- 发表于 2022-03-26 01:36:59
复制粘贴不就好了。
form里面一份
初值一份
form相应函数一份

callback里面再复制这一份就好了。
  1.                                 ("SilkT_check"
  2.                                                 axlVisibleLayer("REF DES/SILKSCREEN_TOP" ,h->curValue)
  3.                                                 axlVisibleUpdate(t)
  4.                                 )
复制代码


这个复制试过,不知的哪里出了问题,就是没反应,打不开层面

作者: 1621142761    时间: 2022-3-26 08:52
aarom 发表于 2022-03-26 01:40:31
本帖最后由 aarom 于 2022-3-26 02:03 编辑

他的寫法是在 form 裡,單獨控制每層的"顏色"及"是否顯示".

你異想天開不改form, 想利用二個選項,

1."BOARD GEOMETRY/OUTLINE" 選項同時控制"BOARD GEOMETRY/DESIGN_OUTLINE" "BOARD GEOMETRY/CUTOUT" "BOARD GEOMETRY/OUTLINE".

2."SilkT"選項同時控制"REF DES/SILKSCREEN_TOP" "ACKAGE GEOMETRY/SILKSCREEN_TOP" "BOARD GEOMETRY/SILKSCREEN_TOP"

問題他是單獨層的控制! 你要你列出的層面一層一層選嗎??
你想清楚再說, 這裡應該有人會幫. (不一定會是我.)
還是只要選項不管顏色,就能一齊控.
----------------------------------------
例如:這是他 form 的"BOARD GEOMETRY/OUTLINE" 單獨控制. 每增加一個層,就要增加一組,及改Y軸數字, 判斷名稱.(你框的是判斷完要的結果.)
        fprintf(h "FIELD outline_color\n")
        fprintf(h "FLOC 2 1\n")
        fprintf(h "COLOR 2 1\n")
        fprintf(h "ENDFIELD\n")

        fprintf(h "FIELD outline_check\n")
        fprintf(h "FLOC 4 1\n")
        fprintf(h "CHECKLIST \"Board Geometry/Outline\"\n")
        fprintf(h "ENDFIELD\n")


就是想这一个按钮控制多个层面,所以颜色就不能用了,就想去掉就可以了

作者: db-_-    时间: 2022-3-26 17:56
上面不变。改一下这个函数就行。
功能点击一个check,开启/关闭三个层。颜色没有意义,忽略即可。

  1. defun( ViewLayer_Callback (h)
  2.         case( h -> curField
  3.                 ("outline_check"
  4.                         axlVisibleLayer("BOARD GEOMETRY/OUTLINE" ,h->curValue)
  5.                                                 axlVisibleLayer("BOARD GEOMETRY/DESIGN_OUTLINE" ,h->curValue)
  6.                                                 axlVisibleLayer("BOARD GEOMETRY/CUTOUT" ,h->curValue)
  7.                         axlVisibleUpdate(t)
  8.                 )
  9.                                 ("SilkT_check"
  10.                         axlVisibleLayer("REF DES/SILKSCREEN_TOP" ,h->curValue)
  11.                                                 axlVisibleLayer("PACKAGE GEOMETRY/SILKSCREEN_TOP" ,h->curValue)
  12.                                                 axlVisibleLayer("BOARD GEOMETRY/SILKSCREEN_TOP" ,h->curValue)
  13.                         axlVisibleUpdate(t)
  14.                 )
  15.         )
  16. )
复制代码

作者: 1621142761    时间: 2022-3-26 20:00
db-_- 发表于 2022-03-26 17:56:58
上面不变。改一下这个函数就行。
功能点击一个check,开启/关闭三个层。颜色没有意义,忽略即可。

  1. defun( ViewLayer_Callback (h)
  2.         case( h -> curField
  3.                 ("outline_check"
  4.                         axlVisibleLayer("BOARD GEOMETRY/OUTLINE" ,h->curValue)
  5.                                                 axlVisibleLayer("BOARD GEOMETRY/DESIGN_OUTLINE" ,h->curValue)
  6.                                                 axlVisibleLayer("BOARD GEOMETRY/CUTOUT" ,h->curValue)
  7.                         axlVisibleUpdate(t)
  8.                 )
  9.                                 ("SilkT_check"
  10.                         axlVisibleLayer("REF DES/SILKSCREEN_TOP" ,h->curValue)
  11.                                                 axlVisibleLayer("PACKAGE GEOMETRY/SILKSCREEN_TOP" ,h->curValue)
  12.                                                 axlVisibleLayer("BOARD GEOMETRY/SILKSCREEN_TOP" ,h->curValue)
  13.                         axlVisibleUpdate(t)
  14.                 )
  15.         )
  16. )
复制代码


可以了可以了,非常感谢!

作者: 1621142761    时间: 2022-3-26 21:35
zs_king 发表于 2022-03-26 20:50:01
[quote]db-_- 发表于 2022-03-26 17:56:58
上面不变。改一下这个函数就行。
功能点击一个check,开启/关闭三个层。颜色没有意义,忽略即可。

  1. defun( ViewLayer_Callback (h)
  2.         case( h -> curField
  3.                 ("outline_check"
  4.                         axlVisibleLayer("BOARD GEOMETRY/OUTLINE" ,h->curValue)
  5.                                                 axlVisibleLayer("BOARD GEOMETRY/DESIGN_OUTLINE" ,h->curValue)
  6.                                                 axlVisibleLayer("BOARD GEOMETRY/CUTOUT" ,h->curValue)
  7.                         axlVisibleUpdate(t)
  8.                 )
  9.                                 ("SilkT_check"
  10.                         axlVisibleLayer("REF DES/SILKSCREEN_TOP" ,h->curValue)
  11.                                                 axlVisibleLayer("PACKAGE GEOMETRY/SILKSCREEN_TOP" ,h->curValue)
  12.                                                 axlVisibleLayer("BOARD GEOMETRY/SILKSCREEN_TOP" ,h->curValue)
  13.                         axlVisibleUpdate(t)
  14.                 )
  15.         )
  16. )
复制代码


活跃,耐心,热心。
[/quote]

高手无处不在,想问下按钮和旁边的字的字号怎么调,能不能调大点

作者: aarom    时间: 2022-3-27 20:04
提示: 作者被禁止或删除 内容自动屏蔽
作者: 1621142761    时间: 2022-3-27 21:05
aarom 发表于 2022-3-27 20:04
建議勾選和顏色要分開.
可以一起選或單獨選開關, 不然就只留勾選.
只是建議

嗯嗯,这个看着挺舒服,我想做一些快捷开关层面,太多了,所以就简化了,只留了主要的,包含的就不用显示了

作者: 1621142761    时间: 2022-3-28 19:17
aarom 发表于 2022-3-27 20:04
建議勾選和顏色要分開.
可以一起選或單獨選開關, 不然就只留勾選.
只是建議

做成这样了,不过我又有问题了,做了个on和off,这两个不知道怎么做,能不能帮忙添加一下,想让点ON的时候打开面板上所有加载的层,而且所有选项都打上勾,点OFF的时候,关闭所有层,且所有选项都去掉勾,


作者: 1621142761    时间: 2022-3-28 19:20
1621142761 发表于 2022-3-28 19:17
做成这样了,不过我又有问题了,做了个on和off,这两个不知道怎么做,能不能帮忙添加一下,想让点ON的时 ...

重新上传附件

layers.zip

1.41 KB, 下载次数: 0, 下载积分: 贡献 -30 , 威望 -10


作者: aarom    时间: 2022-3-28 22:11
提示: 作者被禁止或删除 内容自动屏蔽
作者: 1621142761    时间: 2022-3-28 22:14
zs_king 发表于 2022-03-28 19:21:05
不如对着365里面的quicklayer做。


想做,但是能力有限,不会写,只会照搬????

作者: 1621142761    时间: 2022-3-28 22:16
aarom 发表于 2022-03-28 22:11:41

我做的是這樣.

[attach]336398[/attach]


这样要是想要的层面多了界面就会很大

作者: aarom    时间: 2022-3-29 08:12
提示: 作者被禁止或删除 内容自动屏蔽
作者: 1621142761    时间: 2022-3-29 11:04
aarom 发表于 2022-03-29 08:12:15
本帖最后由 aarom 于 2022-3-29 08:18 编辑

顯示一齊選或不選......
defun( ViewLayer_Callback (h)
        case( h -> curField
              ("outline_check"
                axlVisibleLayer("BOARD GEOMETRY/OUTLINE" ,h->curValue)
                axlVisibleLayer("BOARD GEOMETRY/DESIGN_OUTLINE" ,h->curValue)
                axlVisibleLayer("BOARD GEOMETRY/CUTOUT" ,h->curValue)
                axlFormSetField(w,"outline_color",axlLayerGet("BOARD GEOMETRY/OUTLINE")->visible)                  ;傳回chechlist-"outline_color" 選或不選,但顏色黑是另外處理.
                axlFormSetField(w,"outline_color1",axlLayerGet("BOARD GEOMETRY/DESIGN_OUTLINE")->visible)
                axlFormSetField(w,"outline_color2",axlLayerGet("BOARD GEOMETRY/CUTOUT")->visible)
                axlVisibleUpdate(t)
              )

              ("SilkT_check"
                axlVisibleLayer("REF DES/SILKSCREEN_TOP" ,h->curValue)
                axlVisibleLayer("ACKAGE GEOMETRY/SILKSCREEN_TOP" ,h->curValue)
                axlVisibleLayer("BOARD GEOMETRY/SILKSCREEN_TOP" ,h->curValue)
                axlFormSetField(w,"SilkT_color",axlLayerGet("REF DES/SILKSCREEN_TOP")->visible)
                axlFormSetField(w,"SilkT_color1",axlLayerGet("ACKAGE GEOMETRY/SILKSCREEN_TOP")->visible)
                axlFormSetField(w,"SilkT_color2",axlLayerGet("BOARD GEOMETRY/SILKSCREEN_TOP")->visible)
                axlVisibleUpdate(t)
              )


这个是ON和OFF吗?怎么在按钮上加载呢

作者: selena19730105    时间: 2022-3-29 15:49
哭哭~又是威望值不夠不能下載~
作者: 1621142761    时间: 2022-3-29 19:52
aarom 发表于 2022-3-29 08:12
顯示一齊選或不選......
defun( ViewLayer_Callback (h)
        case( h -> curField

不好意思,看错了,我试了下你的方法,但是不知为啥我做的点子选项无法开关,能否帮忙看下

动画.gif (77.19 KB, 下载次数: 2)

动画.gif

作者: 1621142761    时间: 2022-3-29 19:55
1621142761 发表于 2022-3-29 19:52
不好意思,看错了,我试了下你的方法,但是不知为啥我做的点子选项无法开关,能否帮忙看下

另外添加附件

layers.zip

1.43 KB, 下载次数: 0, 下载积分: 贡献 -30 , 威望 -10


作者: 1621142761    时间: 2022-3-29 19:58
selena19730105 发表于 2022-3-29 15:49
哭哭~又是威望值不夠不能下載~

不是完整版的,ON和OFF还不知道怎么做,正在请各路大神帮忙

作者: 1621142761    时间: 2022-3-29 20:00
zs_king 发表于 2022-3-29 07:18
像这个类型的代码,可以相同样式的,用List+循环来做,可能会稍微好点 !
下面这个图提供一下思路。。 ...

这个写法挺好,是做了一个排列,虽然不会写,但有些能看懂

作者: 1621142761    时间: 2022-3-30 11:34
zs_king 发表于 2022-03-30 11:23:28
[quote]1621142761 发表于 2022-03-29 19:58:27
[quote]selena19730105 发表于 2022-3-29 15:49
哭哭~又是威望值不夠不能下載~

不是完整版的,ON和OFF还不知道怎么做,正在请各路大神帮忙
[/quote]

on off 实际上,在判断点击的是这个控件时,执行一条代码。。  axlVisableDesign(nil)    是全关。。nil改成t 是全开单词可能不完全拼对。。。大概差不多哦。。。后面最好价格显示相关的update。。手机打字,函数就不说精确的拼写了。。见谅
[/quote]

好的,我晚上回去试一下

作者: 1621142761    时间: 2022-3-30 22:53
zs_king 发表于 2022-3-30 11:23
不是完整版的,ON和OFF还不知道怎么做,正在请各路大神帮忙


[/quote]

试了一下,可以开关了,是axlVisibleDesign,在其他skill文件中找到的,如下图,不足的是点ON的时候其他的命令没有自动勾选,点OFF的时候其他命令也没有自动去掉勾选,这个该如何写呢

动画.gif (222.42 KB, 下载次数: 2)

动画.gif

作者: 1621142761    时间: 2022-4-2 23:28
aarom 发表于 2022-3-29 08:12
顯示一齊選或不選......
defun( ViewLayer_Callback (h)
        case( h -> curField

您好,请问按照这个做了,但是点击颜色按钮关闭,这个按钮不能变成黑色,能否帮忙看下是哪的原因,谢谢!如下源码
axlCmdRegister( "ViewLayer" 'ViewLayer ?cmdType "general")
defun( ViewLayer ()
let((f h)
        f = axlTempFile()
        h = outfile(f "w")
        fprintf(h "FILE_TYPE=FORM_DEFN VERSION=2\n")
        fprintf(h "FORM\n")
        fprintf(h "FIXED\n")
        fprintf(h "PORT 41 15\n")
        fprintf(h "HEADER \"EDA365 Skill\"\n")
        fprintf(h "TILE\n")

        fprintf(h "FIELD SilkT\n")
        fprintf(h "FLOC 2 0\n")
        fprintf(h "CHECKLIST \"SilkT\"\n")
        fprintf(h "ENDFIELD\n")

        fprintf(h "FIELD SilkT_color_B\n")
        fprintf(h "FLOC 2 2\n")
        fprintf(h "COLOR 2 1\n")
        fprintf(h "ENDFIELD\n")

        fprintf(h "FIELD SilkT_color_P\n")
        fprintf(h "FLOC 2 4\n")
        fprintf(h "COLOR 2 1\n")
        fprintf(h "ENDFIELD\n")

        fprintf(h "FIELD SilkT_color_R\n")
        fprintf(h "FLOC 2 6\n")
        fprintf(h "COLOR 2 1\n")
        fprintf(h "ENDFIELD\n")

        fprintf(h "ENDTILE\n")
        fprintf(h "ENDFORM\n")
        close(h)

        w = axlFormCreate(gensym() f nil 'ViewLayer_Callback t)
                 axlFormSetField(w,"SilkT_color_R",axlLayerGet("REF DES/SILKSCREEN_TOP")->color)
                axlFormSetField(w,"SilkT_color_P",axlLayerGet("PACKAGE GEOMETRY/SILKSCREEN_TOP")->color)
                axlFormSetField(w,"SilkT_color_B",axlLayerGet("BOARD GEOMETRY/SILKSCREEN_TOP")->color)
                axlFormSetField(w,"SilkT_color_R",axlLayerGet("REF DES/SILKSCREEN_TOP")->visible)
                axlFormSetField(w,"SilkT_color_P",axlLayerGet("PACKAGE GEOMETRY/SILKSCREEN_TOP")->visible)
                axlFormSetField(w,"SilkT_color_B",axlLayerGet("BOARD GEOMETRY/SILKSCREEN_TOP")->visible)
        axlFormDisplay(w)
))

defun( ViewLayer_Callback (h)
        case( h -> curField
              ("SilkT"
                axlVisibleLayer("REF DES/SILKSCREEN_TOP" ,h->curValue)
                axlVisibleLayer("PACKAGE GEOMETRY/SILKSCREEN_TOP" ,h->curValue)
                axlVisibleLayer("BOARD GEOMETRY/SILKSCREEN_TOP" ,h->curValue)
                axlFormSetField(w,"SilkT_color_R",axlLayerGet("REF DES/SILKSCREEN_TOP")->visible)
                axlFormSetField(w,"SilkT_color_P",axlLayerGet("PACKAGE GEOMETRY/SILKSCREEN_TOP")->visible)
                axlFormSetField(w,"SilkT_color_B",axlLayerGet("BOARD GEOMETRY/SILKSCREEN_TOP")->visible)
                axlVisibleUpdate(t))
               ("SilkT_color_R"
                axlVisibleLayer("REF DES/SILKSCREEN_TOP" ,h->curValue)
                axlVisibleUpdate(t))
              ("SilkT_color_P"
                axlVisibleLayer("PACKAGE GEOMETRY/SILKSCREEN_TOP" ,h->curValue)
                axlVisibleUpdate(t))
              ("SilkT_color_B"
                axlVisibleLayer("BOARD GEOMETRY/SILKSCREEN_TOP" ,h->curValue)
                axlVisibleUpdate(t))
        )
)






欢迎光临 EDA365电子论坛网 (https://bbs.eda365.com/) Powered by Discuz! X3.2