rhino官方提供了基于Rhino WIP的ghpython调试方法,苦逼作者还是win7系统,装不上Rhino WIP,经过一番探索,总算是在rhino6上走通了vs调试ghpython这条路。因此本文的所有操作是基于Rhino6,如果Rhino6都会了,Rhino WIP应该更加不成问题。

众所周知,在grasshopper中用ghpython做开发可以说是极其方便,python的各种优势与rhino gh强强联合,对rhino来说可以说是如虎添翼。然而grasshopper中一个小小的ghpython电池能提供的调试,代码缩进等功能那是相当有限,真正用过的人都知道在这里调整缩进、print定位错误有多么痛苦。

好在经过作者一番英勇探索,终于解决了这个难题,下面逐步说明:
开始之前,首先要装好visual studio,且要包含python模块,作者是直接装了一个vs2019,直接自带python。
1首先打开vs,创建一个新的Iron Python项目,将其命名为GHPythonDebug。

2然后选择:调试-选项-Python-调试,勾选“使用旧版调试程序”。

# This is the path where the Visual Studio Python modules are locate.
loc = r'C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\Extensions\Microsoft\Python\Core'
ifnotptvsd.is_attached():
#set up secret, address and port for ptvsd
ptvsd.enable_attach(secret = 'dev', address = ('localhost', 2020))
ptvsd.wait_for_attach() #in order for GH to wait for the process to be attached
4找到vs自带的ptvsd模块所在目录。对于vs2019和2017,该目录为:
%ProgramFiles(x86)%\Microsoft Visual Studio
Common7\IDE\Extensions\Microsoft\Python
\
Core
,其中<< em="">VS_Version>为版本号如2019,
为版本类型,如Enterprise Community, Professional。找到之后复制该路径,替换代码中loc的定义为该值。
5启动犀牛6,输入_EditPythonScript命令,点Tools-Options,点Script Engine,两个都勾选。
6,进入Grasshopper,拖进来一个新的ghpython电池,右键勾选“
Show Code”选项。此时电池的左边会出现一个code输入口。
7拖入一个panel,将
GHPythonDebug.py 所在路径输入其中,然后输入filepath电池,filepath电池再连接Read file电池,,再连接一个作者自编的ghpython转换器电池(其实就3句代码),将文件内容转换成代码字符串。此时用到的电池如图:
8 将转换器电池输出的代码连接到第6步拖进来的ghpython电池的code接口 上,注意注意!此时gh会冻结住,陷入假死状态,因为它要等待ptvsd模块来与它链接,千万不要关闭它。
9回到vs中,依次选择调试-附加到进程,其中“连接类型”选择Python远程(ptvsd),连接目标填tcp://dev@localhost:2020/,细心的同学可能已经注意到了,这里dev和2020都是上面代码里面定义好的,比如图中我就用了其它的文字和端口号。然后勾选左下角“显示所有用户进程”,点刷新,会看到出现IronPython2.7.8这样的标题的一项,此时点击附加。

如果这时候没有出错,那么恭喜你!接下来你就可以在vs里面调试ghpython啦!添加断点,添加监视……有vs就是可以为所欲为!
扫描下方二维码关注公众号“建筑结构参数化”,后台回复“调试”获取文中提到的代码及电池文件。