小编Dav*_*ten的帖子

GDI处理DotNET应用程序

我的纯DotNET库在非托管桌面应用程序中作为插件运行.我一直在获得一个稳定的(虽然很低)崩溃报告流,似乎表明GDI句柄有问题(错误消息中的字体等恢复到系统字体,各种控件的显示中断,大规模崩溃后不久).

我的表单几乎没有控件,但我在用户控件中做了很多GDI +绘图.什么是告诉我正在使用多少手柄甚至泄漏的好方法?

谢谢,大卫

.net memory-leaks gdi count handle

6
推荐指数
3
解决办法
4477
查看次数

一次性删除所有事件处理程序

问题:我有一个包含对象列表的文档类.这些对象引发事件,如SolutionExpired,DisplayExpired等文件需要对此作出回应.

文档有时可以交换对象,但是单个对象永远不应该是多个文档的"一部分".

我的文档类包含许多用作事件处理程序的方法.每当一个对象进入文档时,我就会AddHandler用来设置事件,每当从文档中删除一个对象时,我就会RemoveHandler用来撤消损坏.但是,有些情况下很难确保所有步骤都得到适当的处理,因此我最终可能会遇到流氓事件处理程序.

长话短说; 如何删除指向特定方法的所有处理程序?注意,我没有可能的事件源列表,这些可以存储在任何地方.

就像是:

RemoveHandler *.SolutionExpired, AddressOf DefObj_SolutionExpired
Run Code Online (Sandbox Code Playgroud)

vb.net events

5
推荐指数
1
解决办法
2万
查看次数

插值建议(线性,三次?)

我需要找到未定义函数与阈值相交的点的近似值。我正在逐步穿越空间,每当发现随后的两个步骤位于阈值的不同侧时,我会在两者之间添加一个点:

实际情况

(来源:ning.com

我的第一种方法是选择中间点,但这显然是一个糟糕的解决方案:

中点

(来源:ning.com

我现在使用的是线性插值,可以得出合理的结果,但是底层函数实际上永远不会是线性的。因此,这仅在我的步长足够小时才有效:

线性插值

(来源:ning.com

对基本函数进行采样可能会非常昂贵,但是我想尝试添加一个或两个其他采样以获得更好的近似值。这里可以使用三次插值吗?像这样:

三次插值
(来源:ning.com

还是有更好的方法?

David Rutten非常有义务

ps。我正在用C#编写,但这是语言不可知的问题。

approximation cubic linear-interpolation

5
推荐指数
1
解决办法
3327
查看次数

绘制二维点图

我有一个对象列表(可能不超过100个),其中每个对象与所有其他对象的距离.该距离仅仅是这些对象共享的所有字段之间的额外绝对差异.可能存在很少(一个)或许多(几十个)场,因此距离的维度并不重要.

我想在2D图形中显示这些点,使得距离较小的物体看起来很近.我希望这将清楚地表达整个列表中有多少个子组.显然这个图的轴是没有意义的(我甚至不确定"图形"是正确使用的词).

将距离网络转换为2D点分布的好算法是什么?理想情况下,我希望对距离网络进行一些小的改动,以使图形发生微小的变化,从而可以将增量进度视为随时间的平滑变化.

我已经找到了我正在寻找的那种结果的一个小例子: 示例图形http://en.wiki.mcneel.com/content/upload/images/GraphExample.png

大卫,非常感谢任何想法


编辑:

它实际上似乎有效.我将整个值集视为二维粒子云,在所有粒子之间构建反平方排斥力,并基于反距离构造线性吸引力.它不是一个稳定的算法,只要执行额外的迭代,结果就会剧烈旋转,但它似乎总能产生与视觉集群的良好分离:

替代文字http://en.wiki.mcneel.com/content/upload/images/ParticleCloudSolution.png

如果有人感兴趣,我可以发布C#代码(很遗憾)

language-agnostic graphics visualization graph

5
推荐指数
1
解决办法
363
查看次数

.Net SDK问题,哪种方式去?

我们正在写一个SDK用于CAD程序,并针对特定类型的功能(不是不同的人之间的分歧只是,我的两个脑半之间也不一致)碰上轻微的分歧.

想象一下,特定曲线类型(椭圆形,圆形,弧形,直线,贝塞尔曲线等)有很多类.所有这些类都可以用Nurbs曲线表示.那么我们应该将Circle-> Nurbs函数放在Circle上:

public NurbsCurve Circle.ToNurbsCurve()
{
  // Return a circular NurbsCurve or null if the Circle is invalid.
}
Run Code Online (Sandbox Code Playgroud)

或者它应该是NurbsCurve上的静态:

public static NurbsCurve NurbsCurve.CreateFromCircle(Circle)
{
  // Return a circular NurbsCurve or null if the Circle is invalid.
}
Run Code Online (Sandbox Code Playgroud)

.net c# sdk

5
推荐指数
1
解决办法
150
查看次数

IEnumerable和IEnumerator在同一个类中,不好主意?

这是一个坏主意吗?

Private Class GH_DataStructureEnumerator(Of Q As Types.IGH_Goo)
  Implements IEnumerable(Of Q)
  Implements IEnumerator(Of Q)
  ....
  ....
  'Current, MoveNext, Reset etc.'
  ....
  ....

  Public Function GetEnumerator_Generic() As IEnumerator(Of Q) _
                  Implements IEnumerable(Of Q).GetEnumerator
    Return Me
  End Function
End Class
Run Code Online (Sandbox Code Playgroud)

此类仅作为IEnumerable(Of T)readonly属性可见,它为我节省了一个包装IEnumerator(Of T)的附加类.但不知何故,这似乎是错误的.有没有更好的办法?

c# ienumerable ienumerator

5
推荐指数
2
解决办法
711
查看次数

3D中圆和弧的边界框

给定3D空间中圆形和圆弧类型的曲线,计算精确边界框(世界轴对齐)的好方法是什么?


编辑:找到圆圈的解决方案,仍需要Arcs的帮助.

用于解决Circles BoundingBoxes的C#代码段:

public static BoundingBox CircleBBox(Circle circle)
{
  Point3d O = circle.Center;
  Vector3d N = circle.Normal;

  double ax = Angle(N, new Vector3d(1,0,0));
  double ay = Angle(N, new Vector3d(0,1,0));
  double az = Angle(N, new Vector3d(0,0,1));

  Vector3d R = new Vector3d(Math.Sin(ax), Math.Sin(ay), Math.Sin(az));
  R *= circle.Radius;

  return new BoundingBox(O - R, O + R);
}

private static double Angle(Vector3d A, Vector3d B)
{
  double dP = A * B;
  if (dP <= -1.0) { return Math.PI; }
  if (dP >= …
Run Code Online (Sandbox Code Playgroud)

math 3d geometry

5
推荐指数
1
解决办法
1736
查看次数

NotifyIcon.BalloonTipClicked事件和鼠标按钮

我有一个NotifyIcon,表示可下载的应用程序更新.我希望下载页面在左键单击NotifyIcon上打开并在左侧单击NotifyIcon气球(在屏幕上显示10秒).

但是,当我处理BalloonTipClicked事件时,我无法弄清楚它是左击还是右击.因此,当气球仍然在屏幕上并且用户右键单击图标时,我同时打开弹出菜单下载页面.

如何检测使用鼠标右键?

c# vb.net balloon notifyicon mouseevent

5
推荐指数
1
解决办法
4112
查看次数

合并(布尔联合)矩形区域,具有整数精度

给定任意数量的交点,不相交和触摸矩形,如何找到(多个)轮廓折线?矩形在像素坐标中定义,因此它们具有整数精度,但它们可能是数千个单位大.

盒子集合

我真的需要轮廓的数字坐标,合并GDI区域是不行的.我知道我可以通过创建一个GDI区域并调用GetRegionScans来简化问题,但它仍然无法解决问题.

这是实时UI的一部分,因此算法需要相当快(我猜测从不超过十几个盒子,可能是一百个).

我在C#中这样做,但由于这是一个算法问题,我并不真正关心语言.任何想法最受欢迎.

c# geometry 2d region

5
推荐指数
1
解决办法
2211
查看次数

VB.NET与运算符混淆,模式小于签名

Dim rc As Boolean = "2" Like "*?<*?"
Run Code Online (Sandbox Code Playgroud)

我不明白为什么rc等于True,肯定2不一样*?<*?.

上面的模式需要一个字符串

  • 至少三个字符(两个?和一个<)
  • 其中,<符号是某处内部.

据我所知,<不是一个特殊的角色,这意味着除了<Like运算符之外的其他东西.

使用Visual Studio 2010.

vb.net sql-like

5
推荐指数
1
解决办法
1993
查看次数