我呢,一个计算机专业的学生,实话实说,我们的课我学不下去一点,太枯燥了。
直到有一天,我看到了一句话:“实践是检验真理的唯一标准”。
这句话如同惊雷在我那混沌不堪的脑中炸开,如同盘古开天地般让我的世界瞬间清晰。
实践!实践!!实践!!!
照着这句真理,我开始疯狂的写项目。
照着黑马课程的项目课程开始学习,一步一个脚印的完成了几个Java项目。
就在我自信满满想要自己做一个大的项目的时候,我发现我能想到的就只有 记账软件、论坛、商城这种烂大街的项目。
没有一点点创新好嘛。
于是我的脑子又瞬间成了浆糊,不知道自己要做什么,会做什么。
直到我遇到了两个人,他们呢,不算严格意义上的程序员,因为是大学学的建筑,自学的编程,神奇的是,他们把这两个东西结合在了一起,化两个枯燥的东西为一个新奇的玩意儿。
我不是很懂建筑,我只知道建筑方面需要建模,而这个建模是可以使用编程来做的。
也可能有人觉得,建模嘛,不是要精细的调吗?
当然并不是所有的场景都需要精细的调,我举个例子,比如我想在在某个地方的墙上做一个逐步变大的多个相同的条纹。
当然,手动是可以做的,不过就是耗费时间做一些重复的事情。
于是代码的作用就出现了,我们就可以使用代码来搞定这些枯燥的事情,帮助我们省下很多时间。
其实我也从使用这个工具中,学了不少简单的建模和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();
这就是很简单的批量的工作,我倒是挺喜欢玩的。
或许我们也可以使用代码建模建出一个可莉呢(当然我不是原批 )
我们回到这篇文章的主题,实践虽然是一个很好的方式,但是相同流程化的实践,创造出来的往往只是一个一个的机器,所以有些创新还是很好的。
所以我想如果论坛里的老哥们能将知识融于有趣的实践,那我就会大喊,好耶!
写完这篇文章,说实话我也不知道这篇文章属于什么分类(因为这可能既专业又不太正经)。
但是如果让我来说的话,我倒是觉得可以做一个 “整活大赏” 板块 ,当然这个整活并不是网络上的原地后空翻、手捏鸡蛋打爆啤酒罐、头破西瓜这类的抽象整活,而是使用代码与自己的专业结合(或者其他的方式),也许你可以使用代码写一个关于疯狂星期四的东西(所以看到这里的你是不是要v我50?)、也许你可以使用医学知识帮助我们这些只程序猿如何调理身子(比如肾虚)、也许你可以使用建筑知识来构建我的世界中的房子等等。
知识放到整活里,就不会显得枯燥无味了。
人生本就无味,自己当然要加一些乐趣啦,多一些创造力,说不定你也可以做出一个惊人的产品呢。
赛博整活+教学大赏,不知你怎么看?
如果你看到了这里,那么恭喜你,你应该(其实这才是这篇的主题):
代码贴上:
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();