赛博整活,你怎么看?当然,没活可以咬打火机🤪

我呢,一个计算机专业的学生,实话实说,我们的课我学不下去一点,太枯燥了。

直到有一天,我看到了一句话:“实践是检验真理的唯一标准”。

这句话如同惊雷在我那混沌不堪的脑中炸开,如同盘古开天地般让我的世界瞬间清晰。

实践!实践!!实践!!!

照着这句真理,我开始疯狂的写项目。 :drooling_face:

照着黑马课程的项目课程开始学习,一步一个脚印的完成了几个Java项目。

就在我自信满满想要自己做一个大的项目的时候,我发现我能想到的就只有 记账软件、论坛、商城这种烂大街的项目。

没有一点点创新好嘛。

于是我的脑子又瞬间成了浆糊,不知道自己要做什么,会做什么。

直到我遇到了两个人,他们呢,不算严格意义上的程序员,因为是大学学的建筑,自学的编程,神奇的是,他们把这两个东西结合在了一起,化两个枯燥的东西为一个新奇的玩意儿。

我不是很懂建筑,我只知道建筑方面需要建模,而这个建模是可以使用编程来做的。

也可能有人觉得,建模嘛,不是要精细的调吗? :thinking:

当然并不是所有的场景都需要精细的调,我举个例子,比如我想在在某个地方的墙上做一个逐步变大的多个相同的条纹。

当然,手动是可以做的,不过就是耗费时间做一些重复的事情。

于是代码的作用就出现了,我们就可以使用代码来搞定这些枯燥的事情,帮助我们省下很多时间。

其实我也从使用这个工具中,学了不少简单的建模和C#代码知识。

可能上面的例子有些不太直观,我就演示一个非常非常简单的例子吧:

创建一系列立方体,这些立方体按照特定的平移向量排列

效果如下:

代码如下:

    RhinoDoc doc = RhinoDoc.ActiveDoc;

    Point3d basePoint = Point3d.Origin;
    double cubeSize = 10.0;

    Box baseCube = new Box(new Plane(basePoint, Vector3d.XAxis, Vector3d.YAxis), new Interval(0, cubeSize), new Interval(0, cubeSize), new Interval(0, cubeSize));

    Vector3d translationVector = new Vector3d(0, cubeSize, 0);
    Transform translation = Transform.Translation(translationVector);

    baseCube.Transform(translation);
        
    int numberOfIterations = 10; 
    List<Brep> cubes = new List<Brep>(); 
        
    for (int i = 0; i < numberOfIterations; i++)
    {

      Box copiedBox = baseCube;

      Vector3d decreasingTranslation = new Vector3d(0, -i * cubeSize, 0);
      Transform decreasingTransform = Transform.Translation(decreasingTranslation);
      copiedBox.Transform(decreasingTransform);
            

      cubes.Add(copiedBox.ToBrep());
    }

    Brep[] result = Brep.CreateBooleanUnion(cubes, 0.001);
        
    if (result != null && result.Length > 0) 
    {

      foreach (var brep in result)
      {
        doc.Objects.AddBrep(brep);
      }
    }
    doc.Views.Redraw();

这就是很简单的批量的工作,我倒是挺喜欢玩的。

或许我们也可以使用代码建模建出一个可莉呢(当然我不是原批 :yum:)

我们回到这篇文章的主题,实践虽然是一个很好的方式,但是相同流程化的实践,创造出来的往往只是一个一个的机器,所以有些创新还是很好的。

所以我想如果论坛里的老哥们能将知识融于有趣的实践,那我就会大喊,好耶!

写完这篇文章,说实话我也不知道这篇文章属于什么分类(因为这可能既专业又不太正经)。

但是如果让我来说的话,我倒是觉得可以做一个 “整活大赏” 板块 ,当然这个整活并不是网络上的原地后空翻、手捏鸡蛋打爆啤酒罐、头破西瓜这类的抽象整活,而是使用代码与自己的专业结合(或者其他的方式),也许你可以使用代码写一个关于疯狂星期四的东西(所以看到这里的你是不是要v我50?)、也许你可以使用医学知识帮助我们这些只程序猿如何调理身子(比如肾虚)、也许你可以使用建筑知识来构建我的世界中的房子等等。

知识放到整活里,就不会显得枯燥无味了。

人生本就无味,自己当然要加一些乐趣啦,多一些创造力,说不定你也可以做出一个惊人的产品呢。

赛博整活+教学大赏,不知你怎么看? :face_with_raised_eyebrow:

如果你看到了这里,那么恭喜你,你应该(其实这才是这篇的主题):

代码贴上:

    RhinoDoc doc = RhinoDoc.ActiveDoc;

    string layerName = "TextLayer";
    int layerIndex = doc.Layers.Find(layerName, true);
    if (layerIndex == -1)
    {
      Layer layer = new Layer();
      layer.Name = layerName;
      doc.Layers.Add(layer);
      layerIndex = doc.Layers.Find(layerName, true);
    }

    Plane plane = Plane.WorldXY;
    string text = "疯狂星期四V我50";
    double height = 10; 
    double extrusionThickness = 2; 

    TextEntity textEntity = new TextEntity();
    textEntity.Plane = plane;
    textEntity.Text = text;
    textEntity.Justification = TextJustification.MiddleCenter;
    textEntity.TextHeight = height; 

    var curves = textEntity.CreateCurves(textEntity.DimensionStyle, true, 0.0, 0.1);
    var extrusions = curves.Select(c => Extrusion.Create(c.ToNurbsCurve(), extrusionThickness, true));

    foreach (var extrusion in extrusions)
    { 
      doc.Objects.AddExtrusion(extrusion, new ObjectAttributes() { LayerIndex = layerIndex });
    }

    doc.Views.Redraw();
1 Like

图片挂了

改好了,谢谢提醒 :smiling_face_with_three_hearts:

我掏出IDE准备敲了,你给我整个活?

1 Like

论坛真是人才济济啊

或许真的可以做一个“整活大赏”模块呢,我想看看论坛各位的创造力,与知识结合,来点好活当赏 :star_struck: :star_struck:

常规话题搞七捻三

#KFC添加

好活当赏!!

赞同!

你怎么又挖一个坟

1 Like

看到好活顶一下

+2

摸金校尉

1 Like

:heart_eyes: :heart_eyes: :heart_eyes:

:muscle: 再挖给你一肘子