NCF参数化建筑论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 15347|回复: 19
打印 上一主题 下一主题

[在线求助] type mismatch in parameter. array required到底什么问题呢

[复制链接]
跳转到指定楼层
1m
发表于 2011-8-17 01:38:25 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
Option Explicit
'Script written by <insert name>
'Script copyrighted by <insert company name>
'Script version 2009年9月14日 17:58:53

Call Main()
Sub Main()

Dim xxgwshuliang:xxgwshuliang=28                     '小型购物

Dim jgbase(99),i,jg(99)

For i=0 To xxgwshuliang-1 Step 1

jgbase(i)=rhino.Getobject("请输入小型购物点",1)

jgbase(i)=rhino.PointCoordinates(jgbase(i))

'Call rhino.AddPoint(jgbase(i))

'Call rhino.AddText("大树林",jgbase(i),1)

Call rhino.AddLine(jgbase(i),array(9999,9999,0))

Next



Dim dxgwshuliang:dxgwshuliang=6                      '大型购物

For i=xxgwshuliang To xxgwshuliang+dxgwshuliang-1 Step 1

jgbase(i)=rhino.Getobject("请输入大型购物点",1)

jgbase(i)=rhino.PointCoordinates(jgbase(i))

'Call rhino.AddPoint(jgbase(i))

'Call rhino.AddText("湖岸点",jgbase(i),1)

Call rhino.AddLine(jgbase(i),array(9999,9999,0))

Next



Dim cszsshuliang:cszsshuliang=3                       '城市展示

For i=xxgwshuliang+dxgwshuliang To xxgwshuliang+dxgwshuliang+cszsshuliang-1 Step 1

jgbase(i)=rhino.Getobject("请输入城市展示点",1)

jgbase(i)=rhino.PointCoordinates(jgbase(i))

'Call rhino.AddPoint(jgbase(i))

'Call rhino.AddText("景观树",jgbase(i),1)

Call rhino.AddLine(jgbase(i),array(9999,9999,0))

Next



Dim jdshuliang:jdshuliang=4                           '酒店

For i=xxgwshuliang+dxgwshuliang+cszsshuliang To xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang-1 Step 1

jgbase(i)=rhino.Getobject("请输入酒店点",1)

jgbase(i)=rhino.PointCoordinates(jgbase(i))

'Call rhino.AddPoint(jgbase(i))

'Call rhino.AddText("小树林",jgbase(i),1)

Call rhino.AddLine(jgbase(i),array(9999,9999,0))

Next



Dim cyshuliang:cyshuliang=19                          '餐饮

For i=xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang To xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang-1 Step 1

jgbase(i)=rhino.Getobject("请输入餐饮点",1)

jgbase(i)=rhino.PointCoordinates(jgbase(i))

'Call rhino.AddPoint(jgbase(i))

'Call rhino.AddText("小树林",jgbase(i),1)

Call rhino.AddLine(jgbase(i),array(9999,9999,0))

Next



Dim xzlshuliang:xzlshuliang=7                          '写字楼

For i=xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang To xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang+xzlshuliang-1 Step 1

jgbase(i)=rhino.Getobject("请输入写字楼点",1)

jgbase(i)=rhino.PointCoordinates(jgbase(i))

'Call rhino.AddPoint(jgbase(i))

'Call rhino.AddText("小树林",jgbase(i),1)

Call rhino.AddLine(jgbase(i),array(9999,9999,0))

Next



Dim jgshuliang:jgshuliang=20                          '景观

For i=xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang+xzlshuliang To xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang+xzlshuliang+jgshuliang-1 Step 1

jgbase(i)=rhino.Getobject("请输入景观点",1)

jgbase(i)=rhino.PointCoordinates(jgbase(i))

'Call rhino.AddPoint(jgbase(i))

'Call rhino.AddText("小树林",jgbase(i),1)

Call rhino.AddLine(jgbase(i),array(9999,9999,0))

Next



Dim startpt,endpt

Dim stpt(28)

For i=0 To 27 Step 1


stpt(i)=rhino.Getobject("请输入起点")

Next

'Call rhino.AddPoint(stpt1)
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享
2m
 楼主| 发表于 2011-8-17 01:38:41 | 只看该作者
Dim k
        Dim m(99)
        Dim G:G=5000           '引力系数
        Dim cf:cf=2            '次方
        Dim jl(99)                 '距离
        Dim yl(99)                 '引力
        Dim vf(99)             '引力方向向量
        Dim vd(99)    '引力单位向量
        Dim v(99)        '引力向量
        Dim vsum                 '合力向量
        Dim F                  '合力大小
        Dim vsumd                 '合力单位向量
        Dim s                  '移动距离
        Dim vs                 '移动向量
        Dim t:t=1              '每次时间跨度
        Dim jlmin:jlmin=2.1     '不能太靠近的范围
        Dim kdmax:kdmax=2      '一次行走的最大距离
        Dim kdmin:kdmin=0.5      '一次行走的最小距离
        Dim r:r=0                    '观赏半径
        Dim Fmin:Fmin=1         '疲劳控制
        Dim endptjl(99)            
        Dim cishu:cishu=0
        Dim cishustr
        Dim startpt1
        Dim endpt1
        Dim xxgwquanzhong:xxgwquanzhong=10
        Dim dxgwquanzhong:dxgwquanzhong=1.1
        Dim cszsquanzhong:cszsquanzhong=10
        Dim jdquanzhong:jdquanzhong=10
        Dim cyquanzhong:cyquanzhong=1.1
        Dim xzlquanzhong:xzlquanzhong=10
        Dim jgquanzhong:jgquanzhong=10       
        Dim round:round=25
       
        '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''1大循环
        For k=0 To 27*round-1 Step 1
                For i = 0 To 27 Step 1
                        If k Mod 27 = i Then startpt=stpt(i)
                Next
                For i=0 To xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang+xzlshuliang+jgshuliang-1 Step 1
                        jg(i)=jgbase(i)
                Next
               
                Dim sj1,sj2,sj3,sj4,sj5,sj6,sj7
                Randomize
                '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''        小型购物权重
                sj1=rnd       
                If sj1>=0.5 Then
                        For i=0 To xxgwshuliang-1 Step 1
                                m(i)=xxgwquanzhong-5*rnd
                        Next
                Else
                        For i=0 To xxgwshuliang-1 Step 1
                                m(i)=0.01*rnd
                        Next
                End If
                ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''大型购物权重
                sj2=rnd       
                If sj2>=0.5 Then
                        For i=xxgwshuliang To xxgwshuliang+dxgwshuliang-1 Step 1
                                m(i)=dxgwquanzhong-5*rnd
                        Next
                Else
                        For i=xxgwshuliang To xxgwshuliang+dxgwshuliang-1 Step 1
                                m(i)=0.01*rnd
                        Next
                End If
                ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''城市展示权重
                sj3=rnd
                If sj3>=0.5 Then
                        For i=xxgwshuliang+dxgwshuliang To xxgwshuliang+dxgwshuliang+cszsshuliang-1 Step 1
                                m(i)=cszsquanzhong-5*rnd
                        Next
                Else
                        For i=xxgwshuliang+dxgwshuliang To xxgwshuliang+dxgwshuliang+cszsshuliang-1 Step 1
                                m(i)=0.01*rnd
                        Next
                End If
                ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''酒店权重
                sj4=rnd
                If sj4>=0.5 Then
                        For i=xxgwshuliang+dxgwshuliang+cszsshuliang To xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang-1 Step 1
                                m(i)=jdquanzhong-5*rnd
                        Next
                Else
                        For i=xxgwshuliang+dxgwshuliang+cszsshuliang To xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang-1 Step 1
                                m(i)=0.01*rnd
                        Next
                End If
               
                ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''餐饮权重
                sj5=rnd
                If sj5>=0.5 Then
                For i=xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang To xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang-1 Step 1
                                m(i)=cyquanzhong-5*rnd
                        Next
                Else
                        For i=xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang To xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang-1 Step 1
                                m(i)=0.01*rnd
                        Next
                End If
                ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''写字楼权重
                sj6=rnd       
                If sj6>=0.5 Then
                        For i=xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang To xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang+xzlshuliang-1 Step 1
                                m(i)=xzlquanzhong-5*rnd
                        Next
                Else
                        For i=xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang To xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang+xzlshuliang-1 Step 1
                                m(i)=0.01*rnd
                        Next
                End If
                ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''景观权重
                sj7=rnd               
                If sj7>=0.5 Then
                        For i=xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang+xzlshuliang To xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang+xzlshuliang+jgshuliang-1 Step 1
                                m(i)=jgquanzhong-5*rnd
                        Next
                Else
                        For i=xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang+xzlshuliang To xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang+xzlshuliang+jgshuliang-1 Step 1
                                m(i)=0.01*rnd
                Next
                End If       
               
                ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''求起点的所有引力向量  中循环
                Do
                        For i=0 To xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang+xzlshuliang+jgshuliang-1 Step 1
                                jl(i)=rhino.Distance(startpt,jg(i))
                                yl(i)=G*m(i)/jl(i)^cf
                                vf(i)=rhino.Vectorcreate(jg(i),startpt)
                                vd(i)=rhino.VectorUnitize(vf(i))
                                v(i)=rhino.VectorScale(vd(i),yl(i))
                        Next
                                               
                        ''''''''''''''''''''''''''''''''''''''''''''''求起点的合力向量
                        vsum=array(0,0,0)
                        For i=0 To xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang+xzlshuliang+jgshuliang-1 Step 1
                                vsum=rhino.VectorAdd(vsum,v(i))       
                        Next
                        ''''''''''''''''''''''''''''''''''''''''''''''分离出合力的大小和方向
                        F=rhino.VectorLength(vsum)
                        vsumd=rhino.VectorUnitize(vsum)
                        ''''''''''''''''''''''''''''''''''''''''''''''移动的距离
                        s=1/2*(F/1)*t^2
                        If s>kdmax Then s=kdmax
                        If s<kdmin Then s=kdmin
                        ''''''''''''''''''''''''''''''''''''''''''''''求移动向量和结束点
                        vs=rhino.VectorScale(vsumd,s)
                        endpt=rhino.VectorAdd(startpt,vs)
                        ''''''''''''''''''''''''''''''''''''''''''''''结束点到景观点的距离是否小于观赏半径
                        Dim a
                        a=1
                        For i=0 To xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang+xzlshuliang+jgshuliang-1 Step 1
                                endptjl(i)=rhino.Distance(endpt,jg(i))
                                If endptjl(i)<r Then
                                        a=0
                                        Exit For
                                End If
                        Next
                        ''''''''''''''''''''''''''''''''''''''''''''''大于观赏半径时连线
                        If a=1 Then
                                'Call rhino.AddPoint(endpt)
                                startpt1=rhino.PointAdd(startpt,array(0,0,(10*k+10)))
                                endpt1=rhino.PointAdd(endpt,array(0,0,(10*k+10)))
                                Call rhino.addline(startpt1,endpt1)
                        End If
                        startpt=endpt
                        ''''''''''''''''''''''''''''''''''''''''''''''游览过的点取消影响
                        For i=0 To xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang+xzlshuliang+jgshuliang-1 Step 1
                                If jl(i)<jlmin Then jg(i)=array(99999,99999,0)
                        Next
                        ''''''''''''''''''''''''''''''''''''''''''''''
                        Dim b,c
                        For i=0 To xxgwshuliang+dxgwshuliang+cszsshuliang+jdshuliang+cyshuliang+xzlshuliang+jgshuliang-1 Step 1
                                b=rhino.Distance(jg(i),array(0,0,0))
                                If b>400000 Then
                                        c=1
                                Else c=0
                                        Exit For
                                End If
                        Next
                If c=1 Then Exit Do
                        If F<Fmin Then Exit Do
                Loop
                cishu=cishu+1
                cishustr=CStr(cishu)
                Call rhino.AddText(cishustr,array(cishu,0,0))
        Next
End Sub
3m
 楼主| 发表于 2011-8-17 01:39:50 | 只看该作者
是拿坛子里一位前辈的发的代码改的,结果一直报错
4m
 楼主| 发表于 2011-8-17 01:41:20 | 只看该作者
5m
 楼主| 发表于 2011-8-17 01:41:42 | 只看该作者
求教啊 求教
6m
发表于 2011-8-17 09:28:08 | 只看该作者
没学脚本建模真是要了命了
7m
发表于 2011-8-17 11:25:14 | 只看该作者
本帖最后由 uuuf8 于 2011-8-17 11:29 编辑

粗略看了一眼 没敢试 你这要一个一个选点 少说也要选一百多个点了吧。。。。。。哪位前辈让你这么写的。。。。。。。这么发代码 然后截图是个行数。。。。。。这代码复制到mk里 谁跟谁的行数都不一样。。。。。。  但是 明显是startpt出错了
8m
 楼主| 发表于 2011-8-17 22:29:31 | 只看该作者
7# uuuf8 恩 是startpt出问题啦   请教一下怎样才能一次性选择多个点,并且每个点都作为一个数组元素啊
9m
发表于 2011-8-17 22:48:29 | 只看该作者
高手...望而却步啊。。。
10m
发表于 2011-8-18 01:09:30 | 只看该作者
8# zxl900113

getobjects呗,通过index来用其中的元素
11m
 楼主| 发表于 2011-8-18 17:06:31 | 只看该作者
10# uuuf8

Call Main()
Sub Main()
Dim arrPointshad,arrPointscfd
arrPointshad = Rhino.GetObjects("Select huandian", 1)
arrPointscfd = Rhino.GetObjects("Select chufadian", 1)

Dim i,j
For i = 0 To UBound(arrPointscfd)
  For j = 0 To UBound(arrPointshad)
   Dim vec
   vec = Rhino.AddLine(arrPointscfd(i),arrPointshad(j))
  Next
Next
End Sub

加粗部分报错 像这类错误都是什么原因引起的呀
12m
 楼主| 发表于 2011-8-18 17:08:18 | 只看该作者
10# uuuf8

另外,如何把多个数组合并成一个数组呀
13m
发表于 2011-8-18 22:39:00 | 只看该作者
11# zxl900113

rhino.PointCoordinates(arrPointscfd(i)),rhino.PointCoordinates(arrPointshad(j))
14m
发表于 2011-8-18 22:40:12 | 只看该作者
12# zxl900113

read my book~
15m
 楼主| 发表于 2011-8-18 23:44:10 | 只看该作者
14# uuuf8 哈哈,我第一时间就买了你的书,看了一段时间后就一直没抽出时间继续,目前在做一个竞赛,临时抱抱佛脚
16m
发表于 2011-8-26 20:43:23 | 只看该作者

可否 请教一个问题 ,在rhinoscript 中 如何判断  奇数和偶数
还有就是 l例如dbllength = 1.3256660  如何控制小数点位数,好像CDbl(dbllength) = 1.32567
我怎样才能让 dbllength 显示为 我的系统预设值 0.001
17m
发表于 2012-1-15 10:59:20 | 只看该作者
7# uuuf8


我这两天也有这个问题,好像是我生成的是str类型的,boolean需要的是arr这个类型,但是我不知道怎么转换,booleandifference这个命令就用不了。请高手指教啊!!!

谢谢~附上我简单的程序
Dim arrInput0,arrInput1
Dim arrPlane, dblHeight, dblRadius
dblRadius = 10.0
arrPlane = Rhino.WorldXYPlane
dblHeight=10
arrInput0=Rhino.AddCylinder
Call Rhino.AddCylinder(arrPlane, dblHeight, dblRadius)

Dim dblHeight1, dblRadius1
dblRadius1 = 5.0
arrPlane = Rhino.WorldXYPlane
dblHeight1=10
arrInput1=Rhino.AddCylinder
Call Rhino.AddCylinder(arrPlane, dblHeight1, dblRadius1)


Rhino.BooleanDifference arrInput0, arrInput1
18m
发表于 2012-1-15 11:00:31 | 只看该作者
7# uuuf8


7# uuuf8


我这两天也有这个问题,好像是我生成的是str类型的,boolean需要的是arr这个类型,但是我不知道怎么转换,booleandifference这个命令就用不了。请高手指教啊!!!

谢谢~附上我简单的程序
Dim arrInput0,arrInput1
Dim arrPlane, dblHeight, dblRadius
dblRadius = 10.0
arrPlane = Rhino.WorldXYPlane
dblHeight=10
arrInput0=Rhino.AddCylinder
Call Rhino.AddCylinder(arrPlane, dblHeight, dblRadius)

Dim dblHeight1, dblRadius1
dblRadius1 = 5.0
arrPlane = Rhino.WorldXYPlane
dblHeight1=10
arrInput1=Rhino.AddCylinder
Call Rhino.AddCylinder(arrPlane, dblHeight1, dblRadius1)


Rhino.BooleanDifference arrInput0, arrInput1
19m
发表于 2012-1-15 11:00:56 | 只看该作者
7# uuuf8


7# uuuf8


我这两天也有这个问题,好像是我生成的是str类型的,boolean需要的是arr这个类型,但是我不知道怎么转换,booleandifference这个命令就用不了。请高手指教啊!!!

谢谢~附上我简单的程序
Dim arrInput0,arrInput1
Dim arrPlane, dblHeight, dblRadius
dblRadius = 10.0
arrPlane = Rhino.WorldXYPlane
dblHeight=10
arrInput0=Rhino.AddCylinder
Call Rhino.AddCylinder(arrPlane, dblHeight, dblRadius)

Dim dblHeight1, dblRadius1
dblRadius1 = 5.0
arrPlane = Rhino.WorldXYPlane
dblHeight1=10
arrInput1=Rhino.AddCylinder
Call Rhino.AddCylinder(arrPlane, dblHeight1, dblRadius1)


Rhino.BooleanDifference arrInput0, arrInput1
20m
发表于 2012-2-3 09:33:03 | 只看该作者
不错!学习!

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

GMT+8, 2024-5-13 20:27 , Processed in 0.074857 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

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