NCF参数化建筑论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 15839|回复: 12
打印 上一主题 下一主题

[在线求助] 寻找错误——用script的command方法的参数带入错误

[复制链接]
跳转到指定楼层
1m
发表于 2014-6-28 18:55:38 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本人新学rhinoscript,想编写一段script,用于将“在曲面上偏移曲线”,原配的命令每次只能偏移一根曲线,所以我想通过自动循环,做到可以自动偏移,将第一次偏移生成的曲线变成下一次的起始曲线。这个功能在rhino5当中已经有了,但是我尝试在4的script中把它写出来时区老是出错。
高手帮我看看:

Option Explicit
Call moretimeoffside_Main()

Sub moretimeoffside_Main()
        Dim strSrf, strcur
        strcur = rhino.GetObject("sel the curve on surface",4)
        strSrf =  Rhino.GetObject("sel the surface" ,8)
        rhino.Command "_SelNone"
        rhino.Command        "_OffsetCrvOnSrf " & strcur &" " & strSrf &" " &  "100 _enter"
        Do
        strcur = rhino.LastCreatedObjects
        rhino.Command "_SelNone"
         rhino.Command        "_OffsetCrvOnSrf " & strcur &" " & strSrf &" " &  "100 _enter"
        Loop
End Sub

本想使用:rhino.OffsetCrvOnSrf  之类的语句来直接调用,但这个4.0版本没有这个命令。
就想用最原始的script来呼叫command。
运行后,错误表现在:传送到command指令里的表示曲线的名字为: 03394740-94a5-4eec-a7e6-de18a98d4480,不能被识别,就会循环出错。
我想应该是:
strcur = rhino.GetObject("sel the curve on surface",4)
这里出错了,应该是数据类型的错误。
我尝试改用 strcur = Rhino.SelectObject的写法,但是不行,会一闪而过,看不清楚过程。

我猜应该是比较简单的script,但我就是被卡在这里下不去,求各位大师帮忙看看。


分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
2m
发表于 2014-6-28 20:38:36 | 只看该作者
换个rhino5呗
3m
 楼主| 发表于 2014-6-29 18:44:12 | 只看该作者
问题搞了我一天,还未解决
如何将此次生成的结果曲线,作为下一步偏移的起始曲线?

虽然我找到了一个函数Rhino.offsetcurveonsurface
可以直接运行一次“曲线在曲面上的偏移”,生成了第一根偏移后的曲线,
但是后续的循环过程就进行不下去了,出错。如下图:
4m
发表于 2014-6-30 09:55:23 | 只看该作者
#coding=utf-8
import rhinoscriptsyntax as rs
sur=rs.GetObject("选择曲面",8)
curve=rs.GetObject("选着曲线",4)
num=rs.GetReal("输入偏移的条数")
dis=rs.GetReal("输入偏移的距离")
for i in rs.frange(dis,dis*num,dis):
    rs.OffsetCurveOnSurface(curve,sur,i)
以前刚学python的时候写过一个,比较挫,很多情况没有判定,楼主将就看吧

点评

这个是用的距离循环  详情 回复 发表于 2014-6-30 10:05
5m
发表于 2014-6-30 10:05:39 | 只看该作者
#coding=utf-8
a=[]
import rhinoscriptsyntax as rs
sur=rs.GetObject("选择曲面",8)
curve=rs.GetObject("选着曲线",4)
num=rs.GetReal("输入偏移的条数")
dis=rs.GetReal("输入偏移的距离")
a.append(curve)
for j in range(int(num)) :
    cv=rs.OffsetCurveOnSurface(a[-1],sur,dis)
    a.append(cv)
这个是把生成的曲线当成下一次偏移的曲线,先把曲线放到一个列表里,然后去LIST最后一个曲线当偏移的曲线
6m
发表于 2014-6-30 10:05:58 | 只看该作者
7m
 楼主| 发表于 2014-7-1 11:44:47 | 只看该作者
非常感谢月之眼前辈的指教!
我现在还在用rhinoscript在写这一段程序,还是没有调出来。
不过我还会继续试验下去。
只是我产生了一个疑问:
rhinoscript的数据类型太繁杂,变量的类型不够灵活。
我很多年前尝试运用VBA在AutoCAD中编程,极其吃力,后来还是改用lisp。
只有在Excel里面VBA还算比较好用。
现在在Rhino,大家都在用GH,那么是不是说明:script已经没有人理睬了呢?
我看月之眼前辈的代码,使用的是python,我感觉python更像是lisp,灵活,还居然可以变成GH的一颗电池,实在太牛x了。
所以我对从头学习rhinoscript产生了怀疑。我是否可以放弃rhinoscript,直奔python而去,还是先练习一段时间rhinoscript?

点评

GH是可视化编程,大大降低了入门参数化的门槛啊,很多人不用和代码打交道就可以做出比较复杂的造型了,我感觉如果想把这条路走的更长的话,学习一两门语言还是很有必要的  详情 回复 发表于 2014-7-1 14:00
我感觉都差不多的啊,,以前看过一段时间rhinoscript,最后感觉python比较简洁风格不错就转到python了。GH是可视化编程也差不多,不过对循环不咋在行还是没有代码好,适合自己的就是最好的啦。rhino5自带了猴子插件啊  详情 回复 发表于 2014-7-1 13:57
8m
发表于 2014-7-1 13:57:30 | 只看该作者
woodwest 发表于 2014-7-1 11:44
非常感谢月之眼前辈的指教!
我现在还在用rhinoscript在写这一段程序,还是没有调出来。
不过我还会继续试 ...

我感觉都差不多的啊,,以前看过一段时间rhinoscript,最后感觉python比较简洁风格不错就转到python了。GH是可视化编程也差不多,不过对循环不咋在行还是没有代码好,适合自己的就是最好的啦。rhino5自带了猴子插件啊,感觉方便些,
9m
发表于 2014-7-1 14:00:51 | 只看该作者
woodwest 发表于 2014-7-1 11:44
非常感谢月之眼前辈的指教!
我现在还在用rhinoscript在写这一段程序,还是没有调出来。
不过我还会继续试 ...

GH是可视化编程,大大降低了入门参数化的门槛啊,很多人不用和代码打交道就可以做出比较复杂的造型了,我感觉如果想把这条路走的更长的话,学习一两门语言还是很有必要的
10m
 楼主| 发表于 2014-7-2 11:04:06 | 只看该作者
其实这算是我第一次用rhinoscript写程序,基本没有看书,就是靠以前学VB的记忆,再加上网络上下来的只言片语,再根据帮助文件来学着写,摸石头过河,还都是英文的,很吃力,到今天第5天了,还是很有收获。
那个问题已经找到两种方法解决了,就是使用FirstObject属性来定义最后生成的那条曲线。或者是new_strCurve改写为:new_strCurve(0),一搞通了,居然就那么简单!

继续探索中!
11m
发表于 2014-7-6 01:55:14 | 只看该作者
楼主还是用python吧,既然有vb基础就没必要在写rhinoscript了,vb是面向过程的,而python是面向对象的,差别很大呀,我之前就是用vb写的,涉及到循环和迭代问题vb就有点不给力呀(这是面向过程语言的通病吧),python更简洁,代码更灵活,而且更多的软件都开始支持python了(比如说maya,除了mel,现在也支持python编程了),so,推荐python
12m
发表于 2016-7-8 10:32:39 | 只看该作者
谢谢分享,辛苦了。
13m
发表于 2016-7-10 23:51:02 | 只看该作者
看到这些,就知道好厉害了,学些了

小黑屋|手机版|NCF参数化建筑论坛 ( 浙ICP备2020044100号-2 )    辽公网安备21021102000973号

GMT+8, 2024-5-5 07:23 , Processed in 0.337460 second(s), 23 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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