自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

几何螃蟹的代码笔记

C# + .Net,Grasshopper开发,网络开发

  • 博客(39)
  • 资源 (3)
  • 收藏
  • 关注

原创 【C#杂谈】在 .NET Framework 中使用新的C#语言特性

众所都周知,(以下简称 .NF)作为一个被微软官方确认不在继续发布新特性的运行时,它所对应的C#语言版本被(官方形式上)永久地停更在了(对应着.NF 4.8,如果是更早版本的.NF,那么其语言版本可能更古早)。但是,由于C#是语言,而.NF是实现该语言的运行时,如果某些语言特性能够在 .NF 的框架下实现,那么我们实际上还是能在等IDE上直接通过修改对应的.csproj文件,增加,来使用新的语言特性的。运行时与语言的关系就类似于……我用口头说话来指挥雇佣工干活,我说的话(语言)和他能干的活(运行时。

2024-03-05 10:13:00 1031 2

原创 【Grasshopper基础15】“右键菜单似乎不太对劲”

距离上一篇文章已经过去了挺久的,很长时间没有写GH基础部分的内容了,原因其一是本职工作太忙了,进度也有些落后,白天工作累成马,回家只想躺着;其二则是感觉GH基础系列基本上也介绍得差不多了,电池二次开发的一些基本操作(功能/外观)都介绍得差不多了,再加上前几期写的数据类型,这基本上就囊括了所有二次开发需要用到的内容。不过,理论知识和实践总归是有一些差距的,在CSDN上还是会偶尔收到私信问一些细节问题的二开爱好者们。

2023-08-29 17:46:42 1197 6

原创 我的创作纪念日

创作纪念

2023-06-04 16:50:37 624 4

原创 【Cloudreve】正确地用Webdav服务把网盘挂在Windows上

Windows无法添加网络映射至Cloudreve网盘?看这个就能解决!

2023-06-02 13:52:20 6286

原创 【C++ Metaprogramming】0. 在C++中实现类似C#的泛型类

这就是Metaprogramming。是的,这就是Metaprogramming。

2023-04-25 11:55:49 612 1

原创 【杂谈】“CommunityToolkit.Mvvm无法自动生成Get/Set属性对”的解决方案

CommunityToolkit.Mvvm不起作用无法生成属性?一起来解决吧。

2023-03-14 13:48:58 1016 2

原创 How to created a self-signed certificate, became a CA and enable TLS communication via HTTPS

Generate a Self-signed certificate

2022-11-11 21:28:01 418 1

原创 【杂谈】一个快速的C#代码学习环境(Jupyter Notebook 中跑 C# 代码)

JupyterNotebook里执行C#代码,快速学习、测试特性

2022-11-11 15:00:54 1816 3

原创 【Grasshopper基础14】创建可在画布上自由传递的自定义类型数据(下)—— 电池与自定义IGH_Goo的交互

2022年3月至今,这段日子真是一段令人印象深刻的时光。总之,居家这么久了,忙了一阵终于可以来写点东西了。首先要对上一期【基础13】内的两个小错误进行一个勘误:在 class Pudge 中对 IGH_Goo 接口的实现方法中,CastFrom(object source) 和 CastTo<T>(out T target) 函数体内对于目标类型的判断有错误。不应该直接判断int、double或者Circle类型,而是应该判断其GH_xxxx类型,故依次应为GH_Integer、GH_Nu

2022-05-04 06:35:02 2059 11

原创 Windows系统常用运行库安装包(C++及.NET Framework),以及安装.NET Framework时提示证书不受信任的解决方案

C++运行库微软常用运行库合集:https://download.csdn.net/download/bwkair/81269950.NET Framework 4.8 (兼容4.7.2及其以下版本).NET Framework 4.8 运行库: https://download.csdn.net/download/bwkair/81270329.NET Framework 安装时提示证书不受信任解决方案解决方法:https://download.csdn.net/download/bwkair/

2022-02-18 13:03:44 1879

原创 【Grasshopper基础13】创建可在画布上自由传递的自定义类型数据(上)—— IGH_Goo接口的重要性及其实现

接下来的两章,我们来介绍一下在之前章节尚未介绍到的,但却在Grasshopper中占据极其重要地位的另一批我们早就虎视眈眈但却还没想到理由要去触碰的电池们(左侧红色框指示):是的,就是这一些带黑底的电池们经过仔细思考,笔者还是决定将该部分内容拆分为上下两篇。上篇主要讲为什么要存在自定义类型数据,IGH_Goo接口对于我们日常使用 Rhino + Grasshopper 这两个工具而言,到底解决了什么问题。下篇则是直接介绍如何制作一个自己的数据类型来实现这个接口,并且借助 Grasshopper

2022-02-14 12:01:02 2352 2

原创 【Grasshopper进阶】反射?什么反射?用反射屏蔽掉C#Script电池的运行时长

写这次这一篇的原因是来自一个CSDN网友找到我提出了一个拷问:知名网友:“我想把下面的代码放到 C# Script电池里,怎么加?”public override TimeSpan ProcessorTime { get { if (setUp) return TimeSpan.Zero; else return base.ProcessorTime; }}知名网友:“我的目的是想让这个脚本电池不显示运行时间,不知道怎么处理了。”我品了品,em

2022-01-14 13:09:12 857 6

原创 【杂谈】 Listary自带的字典功能失效?没关系,让我们自己来改造它

写在开始:本文内讨论的Listary版本号为 6.0.1,目前最高版本似乎是 6.0.5。文中提到的插件,官方也似乎将接口换成了异步的版本,但是考虑到同步调用和异步调用本质上程序逻辑没有根本的变化,代码主逻辑还是可以一样地跑通,或者直接原封不动换回同步版本也是能用的。某天下午:—— “NICE! Listary的字典能用了!!”——“啥是Listary?”——“啊这……”Listary 是一个革命性的Windows搜索工具,借助 Listary软件,你可以快速搜索电脑文件、定位文件、执行智.

2021-12-30 16:31:56 2107 8

原创 【Grasshopper基础12】打造自定义可复用的有按钮电池外观模版

【Grasshopper基础12】打造自定义可复用的有按钮电池外观模版作者:“咕咕咕?下一篇马上就写好了”上一篇【基础11】向大家介绍了怎么在Grasshopper里制作自己的带有按钮的电池外观。从反馈来看,挺多读者对这个例子十分感兴趣,同时也私信联系到我问了一些更详细的需求细节。其中一位“风起云淡”网友提到了下面的问题:“如果这个自定义属性类是单独写的一个类,想要这个自定义属性类写成通用的是否可以?”“我在构造函数里面传入的IGH_ComponentOwner接口,但是到了在GH_Attribu

2021-12-23 14:51:13 2294 11

原创 【Grasshopper基础11】如何在GH电池上增加一个自己的按钮

作者:“咕咕咕?下一篇马上就写好了”通过上一篇【基础10】的文章,大家已经了解到一个GH电池在画布上的样式是由其背后的 GH_Attribute 类实例来决定的,而大部分的GH电池都使用了它的一个派生类 GH_ComponentAttribute 来配置电池的外观。今天我们就继续上一篇的内容,通过它来给我们的电池配置一个按钮,当我们的按钮被按下去的时候,可以切换我们今天例子中电池的工作模式。首先我们来介绍一下今天的例子,它将会是一个简单的求 某个数的平方根 的电池:public class SqrtR

2021-09-13 15:52:12 3484 15

原创 【C#杂谈】一个有趣的Debug经历 —— 打个断点程序就能正常跑,取消断点程序就崩溃

不多说,最近3个月这种现象前前后后出现好几次了,今天又排查了一个这个问题:程序崩溃,通过Debug来排查问题,各种断点挨个打上,Step Step Step …… 成功Pass。然后依次减少断点个数,继续Debug,每次都能成功Pass。直到所有断点取消,直接运行,程序崩溃。???????我模拟了一个这个现象,大家可以在下面的程序的Bomber类的GetReady()函数中打上断点,只要程序运行到断点,在局部变量中展开这个Bomber实例类,即可正常运行。取消断点,则程序会报错(“BOOOOMMM

2021-08-04 19:44:43 2250 8

原创 【C#杂谈】实现主线程UI在执行后台任务时不卡顿,除了await之外,还有IEnumerable了解一下?

记录一下今天用IEnumerable解决一个窗体更新的问题。这个技术也应该是Unity来实现Delay的方法吧,印象中Unity的WaitForXX系列延时函数就是返回的IEnumerable,当时还觉得这是个蛇皮操作,没想到,自己在开发中用上了… 这种灵光乍现的感觉还挺好的。剧透:这篇文章居然又扯到了 多线程 / 协程 / 异步,做前端还真就是离不开这些概念。...

2021-07-29 06:08:27 1738

原创 配置Git使用GPG

安装Git之后,默认会带Git Bash,通过Git Bash可以直接访问gpg命令。GPG支持多种加密方式,一般在Git上使用GPG是指使用RSA非对称加密。RSA非对称加密的密钥是一对密钥,分为 公钥 (public key) 和 私钥 (private key) 。公钥用作加密,私钥用作解密。因为加密/解密用的是不同的密钥,因此称为非对称加密。想要发送加密消息时:消息的接收方将公钥发给你你使用公钥加密消息将加密后消息发出对方收到加密后的消息,使用自己手里的与之对应的私钥解密消息接收

2021-07-16 17:49:18 2409

原创 【Grasshopper进阶】在Grasshopper画布上实现动画效果

最近笔者为了能够做到对用户友好,深入地学习了一些前端的知识,等回过神来,发现已经好久没有在CSDN上更过东西了… 结合最近看到的某些前端框架的底层,突然想到为什么不在Grasshopper上玩动画呢?比如电池拖出来之后,缓缓变形,然后出现一些UI的元素。本来已经做好了手动写 Timer 或者写个线程循环来操作,结果人家Grasshopper自带这些个做动画必备的东西,那就简单了,抱着试试看的态度,完成了一个好玩的动画效果。就如同文章最开始的 gif 动画一般。下面就 “简单” 介绍一下如何在Grass.

2021-07-07 18:12:34 2170 24

原创 「opennurbs」我直接进行一个Opennurbs的手动编译

Opennurbs是Rhion的一个开源几何库,用起来挺舒服的,虽然不带大部分几何运算功能(什么曲线相交、长度、曲面相交等等),但是用它做一些基本的几何数据存储和分发还是妥妥的足够了。它是MIT License。妙啊。Opennurbs 的下载地址是 https://github.com/mcneel/opennurbs 。目前,笔者只成功地编译了它的静态库。有经验的同学们如果在使用 Visual Studio 编译 Opernnubs 时遇到了 Freetype 2.6.3 相关问题, 具体表现

2021-06-17 12:56:41 2992 19

原创 【Grasshopper基础10】GH_Attribute简介 —— 自定义电池样式的终极后台

距离上次的【基础9】已经过去了又有差不多1个月了,工作上的事情越来越多,能抽出空来(主要是要找到“有空并且有舒适的心情来写”的时间挺难的…)的时间也变少了。笔者最近在做的工作跟Grasshopper本身也没有特别多的联系,但是对于Grasshopper的兴趣还是依然存在,这也是笔者能够一直坚持这个系列创作的最重要的原因吧,希望平日大家在设计工作之余,也能做出更多好玩有意思的东西来。好了,闲话少说,【基础1~9】基本上可以算是把GH_Component这个类能做的所有事情都囊括了进去,这其中包括了数据的类型

2021-04-23 16:13:17 3858 9

原创 【Grasshopper基础9】添加右键菜单

其实经过【基础2】~【基础6】、以及【基础8】的内容,几乎所有插件的后台数据处理流程都可以实现了(往往也是最关键的业务核心内容):从RegisterInputParam和RegisterOutputParam中注册数据的入口和出口在SolveInstance中处理及传递数据在Read和Write中进行数据的序列化与反序列化这也是为什么很多时候,目前大部分的GH教程也是大致到这个节点步骤就结束了。因为依靠这些内容,一套完整的业务逻辑可以完成,无非就是电池样子长得平平无奇一点嘛。不过,很多时候我们

2021-03-31 18:00:26 1703 19

原创 【Grasshopper进阶】Grasshopper外部调用

本文主旨是介绍“进程间通讯”在Grasshopper中的应用。常用场景:手头已经有一个程序,这个程序想控制Grasshopper画布中某些组件进行一些数据操作,这个程序是独立Rhino和Grasshopper之外运行的。从另一个程序来控制 Grasshopper 中的组件。进程之间通讯Windows平台下,进程间通讯称为“Interprocess Communications”,具体详见msdn文档,有多重实现模式,在此就不赘述了:https://docs.microsoft.com/en-us

2021-03-05 18:11:57 3982 15

原创 【C#杂谈】当Grasshopper中的C# Scriptable电池遇到LinQ,抛弃Python的理由又多了一条

LinQ的全称Language Integrated Query,是一种将数据库理念,比如常用的查找(Select)、排序(Order By)、条件过滤(Where)等延伸到一般编程中的技术路径。Grasshopper的日常使用其中也包含了大量数据传递/使用的过程,比如按一定规律生成一系列点、将一系列直线按某种条件过滤掉等。虽然Grasshopper自带的运算器可以实现这些功能,但是有时候需要拖入大量的电池来实现一个简单的过滤逻辑。比如要从一堆点里选出X坐标大于1且小于5的点,如果只使用Grasshopp

2021-02-25 14:03:44 1021 8

原创 【Grasshopper基础8】电池的序列化与反序列化 Serilization of Grasshopper Component

这篇文章的内容是介绍GH_Component中另外一对可以被 override 的函数:ReadWrite当我们在自己的电池中直接 override 时,Visual Studio会帮我们添加基类实现:public override bool Read(GH_IReader reader){ return base.Read(reader);}public override bool Write(GH_IWriter writer){ return base.Write

2021-02-20 03:56:23 2968 8

原创 【Grasshopper基础7】如何重写Grasshopper电池的预览 DrawViewportWires / DrawViewportMeshes

经过【基础1~6】的介绍,相信大家对Grasshopper电池的开发的框架已经大致了解了。无论是在电池上修改原有功能还是增加新的功能,都是通过继承自GH_Component类,再在其基础上要么override原来的默认实现,要么就是继承新的接口。在这里对前面的内容小小地总结一下:一个自定义GH电池必须实现的overrides有RegisterInputParams // 用于注册输入参数RegisterOutputParams // 用于注册输出参数SolveInstance // 用于真正实现电

2021-02-09 16:35:14 2311 19

原创 【Grasshopper基础6】输入/输出参数可变的电池 / 如何让电池支持参数增加和减少

相信大家一定在Grasshopper中见过输入或者输出参数可以自由变化的电池,例如,笔者常用的电池“Entwine”就可以在电池的输入端添加一个参数或者减少参数,用来支持更多的电池接入,如下图所示。如果我们想要在电池中实现这样的功能,应该要怎么做呢?本文包含C#语言中的“接口(interface)”的概念,如果你对接口的概念还不是特别清楚的话,可以参考更多CSDN资料: 搜索 “C# 接口”MSDN官方C#文档: 接口编程指南文章最后有电池的cs源码。声明实现 IGH_VariableP

2021-01-27 18:41:50 4933 4

原创 【Grasshopper基础5】在GH里看基金? —— 简单电池项目实战

经过前面【Grasshopper基础1~4】的介绍,相信读者已经了解了如何在Visual Studio里创建电池、如何获取数据、如何传出数据。那么在了解这些原理之后,就让我们来一起实现一个小的项目,来看看一个电池从头到尾到底如何制作吧。正如标题中所述的,我们今天就来做一个 “在GH里看基金净值” 的小电池,大致就是实现一个“给定基金代码,通过网络API调用获取基金净值信息,并输出该基金的所有净值信息”。要实现这个功能,首先我们需要首先进行需求分析,然后确定实现的逻辑,最后进行代码编写和简单的测试。需

2021-01-24 17:32:11 1869 9

原创 【Grasshopper基础4】如何在同一个项目中添加多个电池

笔者在前文中已经介绍了如何使用Grasshopper(一下简称GH)模板搭建一个电池组件项目,并进行一些简单的项目配置,相信各位读者已经在进行各种自定义功能电池的开发了。不过,随着想要制作的电池的增多,每次都从项目模板创建新电池的话,会导致有许许多多的项目存在。倘若这些电池都是服务于同一个目的,将这些电池分散在不同的项目会导致不太方便管理。其次,对于这些电池如果使用到了一些共同的依赖项,还需针对每个项目重新配置一遍,十分费时费力。如何 在同一个项目中实现多个电池 ?从项目模板中创建的但却一直被我们忽略的

2021-01-20 15:58:03 4087 10

原创 【Grasshopper基础3】在SolveInstance中获取数据和传出数据

在RegisterInputParams和RegisterOutputParames中添加数据的输入端/输出端之后的下一步就是我们如何在电池的SolveInstance中拿到我们的数据并进一步处理了。我们先来看看SolveInstance方法重写(override)时的方法定义protected override void SolveInstance(IGH_DataAccess DA) { }方法的传入参数为IGH_DataAccess接口类,返回类型void。当看到返回类型是void时我们就想到

2021-01-13 18:47:33 3096 5

原创 【C#杂谈】异步与多线程的区别与联系 async / await / multithreading

关于异步与多线程,笔者在刚接触的时候一直存在诸多疑惑,甚至一度以为这俩概念是用来描述同一种技术在不同场景下的应用,进而导致对很多与它们相关的概念都一知半解,代码中的async/await关键词也是莫名其妙地在用。但是在不断地接触这类概念(因为现在的场景中异步与多线程几乎无处不在)的过程中,还是不断地修正了这种思维。代码写起来也顺手多了。所以这篇文章也是有感而发,在去年的时间里因为多线程和异步踩了不少雷,希望能够给大家做一点简单的解释和区分把。TL, DR: 请参照文章最后的例子 :)多线程是什么多

2021-01-06 00:24:21 4238 1

原创 【Grasshopper基础2】Grasshopper电池的输入和输出不是那么详的解/进一步了解Params

我们在之前已经介绍过了如何创建自己的第一个电池,其中里面提到了我们制作的大部分电池都需要至少完成下面三个部分的代码RegisterInputParamsRegisterOutputParamsSolveInstance其中 RegisterInputParams 和 RegisterOutputParams 是用来声明电池的输入和输出的两个部分,重要程度不言而喻,本文我们就来看看他们俩到底是什么。进一步认识RegisterInputParam和RegisterOutputParamsPar

2020-12-23 15:40:21 9108 7

原创 【Grasshopper进阶】强制Grasshopper电池输入/输出参数数据结构扁平化 (i.e. Flatten/拍平/展开…)

我们都知道,Grasshopper中一个很重要的概念就是数据结构,把数据输入到电池某个端口时,根据数据的结构的不同(列表/数据树),电池对数据会做出不同的响应。这也是为什么在我们在Grasshopper中进行参数化建模时,经常会使用到电池两端输入/输出参数的几个改变数据结构的选项 —— Flatten 和 Graft。我们在任何一个Grasshopper电池的输入、输出端参数上,或者是某个数据存储电池上点击鼠标右键,都会看到一个菜单弹出,里面包含了几种改变数据结构的选项。这种数据结构的快速改变的确会方

2020-12-17 13:32:53 4166 1

原创 【Grasshopper基础1】怎样制作一个Grasshopper电池 / 二次开发基础

本文旨在介绍如何使用C#编写一个Grasshopper内的Hello World电池,包括如何使用和安装Grasshopper电池模板,如何配置Visual Studio来生成.gha电池,如何配置Grasshopper以识别编译的电池,如何Debug等。后续章节会讲到如何配合多个电池、多个项目、多个Rhino/Grasshopper SDK。以下Grasshopper简称GH。如何制作一个Grasshopper电池制作Grasshopper电池的主要步骤及准备工作安装GH电池项目模板并创建一

2020-12-15 17:42:05 17329 21

原创 【Grasshopper进阶】TaskCapableComponent vs Parallel.For 该怎么选?Grasshopper多线程进阶

TaskCapableComponent vs Parallel.For 该怎么选?在Rhino6更新之后,Grasshopper加入了一个新的API —— TaskCapableComponent,使得电池对多线程有了更深度的支持。官方也早在2018年就做了文档和简单的例子,让大家能够更好的针对使用这个组件进行开发(官方例子链接)。以下Grasshopper简称GH不过官方的例子有点奇怪,为什么我算一个斐波那契数列还要多线程?这玩意儿多线程有啥意义?再进一步说,由于GH的整个画布的单线程架构,我在这

2020-12-09 18:48:51 1144 10

原创 【杂谈】关于EntityFramework(EntityFrameworkCore)的一些思考

关于EntityFramework(EntityFrameworkCore)的一些思考以下EntityFramework简称EF。Asp.net框架里里提供了一种将数据库语言直接糅合到程序语言C#中的方法:利用EF NuGet包,正确设置connection string之后可以直接以C#语言(大部分是Linq)来直接对数据库访问。这种方式省却了许多手动设置SQL语句、拼合字符串的时间,但笔者在最开始学习和尝试使用EF的时候却时常感觉到一知半解,因为EF功能强大,所以需要学习的内容特别多。YouTub

2020-12-08 17:44:44 309 1

原创 【Grasshopper进阶】(未填坑)如何让Grasshopper Component创建后台进程,并对结果进行更新

如何让Grasshopper Component创建后台进程,并对结果进行更新David Rutten的原文解答If you really must use a thread to process data while you keep the Grasshopper GUI alive, then the approach would be something like the following:Your component is called upon to Solve itself for

2020-12-08 17:34:45 1015 1

原创 在matlab里设计使用Bessel Filter(贝塞尔滤波器)进行数据降噪的简单例子

作为一个土木工程系的研究生,现在大家做数据处理也用得越来越多了,自己接触的东西也多。作为土木工程师,很大部分时间其实并不想弄清楚滤波器的原理,只是希望拿来用,拿来把自己采集到的数据降噪一下,拿来做个傅立叶分析看看结构的固有频率变没变。但是matlab自带的文档很多时候都默认大家知道滤波器的原理,很多专有名词搞得不太友好,所以在这里以问题解答的形式直接给出我在科研中遇到的一个简单的用贝塞尔滤波器的例...

2019-06-05 10:12:19 9944 14

转载 matplotlib 小用法

1 - 加入代码import matplotlib as plt2 - 第一个正弦函数假设想要画出正弦函数sin(x)的线性图。得到函数在x坐标轴上0 ≤ x<10内所有点的值。我们将使用 NumPy 中的 linspace 函数来在x坐标轴上创建一个从0到10的线性空间,以及100个采样点:import numpy as npx = np.linspace( 0, 10, 100 )...

2019-06-05 10:05:45 207

RhinoCommon and Grasshopper templates for Rhino 7

RhinoCommon and Grasshopper templates for Rhino 7

2022-10-15

.NET Framework 运行库安装时,提示证书不受信任的解决方案

内含微软官方证书,以及一个教学视频: microsoftrootcertificateauthority2010.cer microsoftrootcertificateauthority2011.cer Solve_Ceritificate_Problem_Installing_dotNetFramework.mp4

2022-02-18

.NET Framework 4.8 运行库

内包含: .NET Framework 4.8 运行库 离线安装包 .NET Framework 4.8 运行库 在线安装包(安装过程需下载数据)

2022-02-18

Grasshopper模板扩展插件

Visual Studio 2017 / 2019中的插件 —— Grasshopper模板扩展插件。直接在Marketplace中下载若比较慢的话,直接用文件手动安装即可。

2020-12-15

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除