吾爱光设

会员须知
会员须知
实用帮助
实用帮助
查看: 17859|回复: 26

[我分享] Tracepro用Scheme语言实现自动扫描并存储的功能

[复制链接]
  • TA的每日心情
    开心
    2023-3-1 10:24
  • 签到天数: 161 天

    [LV.7]常住居民III

    13

    主题

    91

    回帖

    3

    积分

    小白

    积分
    3
    发表于 2021-9-2 20:13 | 显示全部楼层 |阅读模式
    本帖最后由 托马斯羊 于 2021-9-2 20:22 编辑

    Tracepro光线追迹达到上万条时比较耗时,当需要进行多个角度仿真并且不使用Scheme语言实现代码化时,我们需要守在电脑旁,这样耗时耗功夫。所以笔者通过基本的调试和慢慢摸索,提供一种基本能够实现Tracepro多角度自动扫描的代码板块仅供参考。当然,代码中的一些选择表面的参数和角度(光源方向向量)调整的参数等自变量是需要按照自身需求进行调整的,笔者不才,望社友对代码进行批评指正,或提出优化意见,谢谢啦!
    该Scheme代码实现的功能是:设定初始条件(包含光源的方向向量)→进行光线追迹→选中目标面→探究辐照度图→将辐照度图结果存储到文件夹中→改变光源方向向量进行循环

    代码示例:(以两个光源角度(方向向量)为例)
    (define Macro1
      (lambda ( )
        (raytrace:set-grid-irradiance 1.000000 "Grid Source 1")%选中光源
        (raytrace:set-beam-orientation-direction-vectors (gvector 20.000000 78.000000 400.000000) (gvector 0.000000 1.000000 0.000000) "Grid Source 1")   %设定光源的方向向量(红色)  指上向量(蓝色)
        (raytrace:all-sources)  %光线追迹
        (edit:select (cadddr(entity:faces(entity 2)))) %红色代表所需要的接受面自变量,需要自行设定你想要探测的接受面
        (analysis:irradiance)   %辐照度图分析
        (analysis:irradiance-save "D:/2021112/1.bmp")  %将辐照度图存储为一张图片
        (analysis:irradiance-close)%将辐照度图进行关闭,一定要关闭!!我当时调试的时候就因为没有这行代码,无法实现下一个角度的扫描
        (raytrace:set-grid-irradiance 1.000000 "Grid Source 1")  %选中光源
        (raytrace:set-beam-orientation-direction-vectors (gvector 20.000000 78.100000 400.000000) (gvector 0.000000 1.000000 0.000000) "Grid Source 1")%改变光源方向向量,剩下的代码就是重复步骤,复制粘贴就行
        (raytrace:all-sources)
        (edit:select (cadddr(entity:faces(entity 2))))
        (analysis:irradiance)   
        (analysis:irradiance-save "D:/2021112/2.bmp")
        (analysis:irradiance-close)

        ))


    当然,希望各路大神提供宝贵的建议,比如scheme语言里有没有像for循环这样的语句,或者对我的过程还有什么优化的地方
    如果你们不止需要辐照度图,发光强度图,可以在这个代码的基础上进行添加
    提醒一下,再度提醒一下,无论打开什么样的功能,一定要在最后close,否则无法进行下一项。
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2020-11-2 09:20
  • 签到天数: 21 天

    [LV.4]偶尔看看III

    0

    主题

    24

    回帖

    4

    积分

    小白

    积分
    4
    发表于 2021-9-3 11:35 | 显示全部楼层
    我用matlab的MTDDE实现了光源循环,但是simulation mode每次光线追迹以前都要手动点击确认,很烦,感觉只能用analysis mode搞
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-1 10:24
  • 签到天数: 161 天

    [LV.7]常住居民III

    13

    主题

    91

    回帖

    3

    积分

    小白

    积分
    3
     楼主| 发表于 2021-9-3 12:52 | 显示全部楼层
    wingings 发表于 2021-9-3 11:35
    我用matlab的MTDDE实现了光源循环,但是simulation mode每次光线追迹以前都要手动点击确认,很烦,感觉只能 ...

    你可以把模型代入Tracepro中,然后通过Tracepro进行模拟,我这个代码就是实现离位自动扫描操作的,设定好角度之后,就可以实现
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-28 11:06
  • 签到天数: 518 天

    [LV.9]以坛为家II

    8

    主题

    26

    回帖

    3

    积分

    小白

    积分
    3
    发表于 2021-9-8 17:20 | 显示全部楼层
    (edit:select (cadddr(entity:faces(entity 2))))   你好,我在使用这条语句的时候总是直接选定surface3,要是更改接受面的话,具体要怎么改啊,我一改就显示错误
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-28 11:06
  • 签到天数: 518 天

    [LV.9]以坛为家II

    8

    主题

    26

    回帖

    3

    积分

    小白

    积分
    3
    发表于 2021-9-8 17:35 | 显示全部楼层
    小渣渣! 发表于 2021-9-8 17:20
    (edit:select (cadddr(entity:faces(entity 2))))   你好,我在使用这条语句的时候总是直接选定surface3, ...

    会了,改cadddr中的d的个数就可以了。
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-28 11:06
  • 签到天数: 518 天

    [LV.9]以坛为家II

    8

    主题

    26

    回帖

    3

    积分

    小白

    积分
    3
    发表于 2021-9-8 18:05 | 显示全部楼层
    你好,我想请问一下,如果我有很多个点,能够用tracepro的scheme直接建模嘛,如果可以的话 要怎么把数据导入到里面啊,谢谢
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-1 10:24
  • 签到天数: 161 天

    [LV.7]常住居民III

    13

    主题

    91

    回帖

    3

    积分

    小白

    积分
    3
     楼主| 发表于 2021-9-8 19:51 | 显示全部楼层
    小渣渣! 发表于 2021-9-8 18:05
    你好,我想请问一下,如果我有很多个点,能够用tracepro的scheme直接建模嘛,如果可以的话 要怎么把数据导 ...

    当然可以,第一种方法是直接在Tracepro里用Macro宏语言建模。第二种方法是在matlab中建模之后,实现Tracepro和matlab之间的DDE通信。第三种方法是在solidworks中建模之后再带在tracepro中。至于导入数据的方法。emmm,目前只摸索出用Matlab和Tracepro之间相互DDE通信实现建模可以导入数据。Tracepro自带的建模导入数据我还没试过。你先去试试我说的DDE通信功能吧!
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-1 10:24
  • 签到天数: 161 天

    [LV.7]常住居民III

    13

    主题

    91

    回帖

    3

    积分

    小白

    积分
    3
     楼主| 发表于 2021-9-8 20:01 | 显示全部楼层
    小渣渣! 发表于 2021-9-8 17:20
    (edit:select (cadddr(entity:faces(entity 2))))   你好,我在使用这条语句的时候总是直接选定surface3, ...

    ”cadddr“这个是scheme语言自带的算法,它是基于car、cdr、caddr等迭代形成的规定的点对运算法则。点对是(a.b)这样的形式,其中在点前面的值被称为 car ,在点后面的值被称为 cdr 。总之就是在car中插入d来实现递进,你可以试试,看增加一个d和减少一个d是什么样的效果就明白是怎么回事了!

    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2023-3-1 10:24
  • 签到天数: 161 天

    [LV.7]常住居民III

    13

    主题

    91

    回帖

    3

    积分

    小白

    积分
    3
     楼主| 发表于 2021-9-8 20:11 | 显示全部楼层
    托马斯羊 发表于 2021-9-8 20:01
    ”cadddr“这个是scheme语言自带的算法,它是基于car、cdr、caddr等迭代形成的规定的点对运算法则。点对 ...

    当然,你要选择的实体对应的是entity 2。这个是你需要选择的实体参数

    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

  • TA的每日心情
    开心
    2024-4-28 11:06
  • 签到天数: 518 天

    [LV.9]以坛为家II

    8

    主题

    26

    回帖

    3

    积分

    小白

    积分
    3
    发表于 2021-9-8 20:31 | 显示全部楼层
    托马斯羊 发表于 2021-9-8 19:51
    当然可以,第一种方法是直接在Tracepro里用Macro宏语言建模。第二种方法是在matlab中建模之后,实现Trace ...

    第三个方法我会,关于dde通信,我能用matlab在tracepro中直接建模分析辐照度等,但是现在需要用matlab计算出一个曲线旋转得到实体,再在tracepro中分析出光,不知道怎么把这个曲线直接弄到tracepro中
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 注册

    本版积分规则

    联系我们|本论坛只支持PC端注册|手机版|小黑屋|吾爱光设 ( 粤ICP备15067533号 )

    GMT+8, 2024-11-6 16:37 , Processed in 0.109375 second(s), 22 queries .

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表