我的纯DotNET库在非托管桌面应用程序中作为插件运行.我一直在获得一个稳定的(虽然很低)崩溃报告流,似乎表明GDI句柄有问题(错误消息中的字体等恢复到系统字体,各种控件的显示中断,大规模崩溃后不久).
我的表单几乎没有控件,但我在用户控件中做了很多GDI +绘图.什么是告诉我正在使用多少手柄甚至泄漏的好方法?
谢谢,大卫
问题:我有一个包含对象列表的文档类.这些对象引发事件,如SolutionExpired,DisplayExpired等文件需要对此作出回应.
文档有时可以交换对象,但是单个对象永远不应该是多个文档的"一部分".
我的文档类包含许多用作事件处理程序的方法.每当一个对象进入文档时,我就会AddHandler用来设置事件,每当从文档中删除一个对象时,我就会RemoveHandler用来撤消损坏.但是,有些情况下很难确保所有步骤都得到适当的处理,因此我最终可能会遇到流氓事件处理程序.
长话短说; 如何删除指向特定方法的所有处理程序?注意,我没有可能的事件源列表,这些可以存储在任何地方.
就像是:
RemoveHandler *.SolutionExpired, AddressOf DefObj_SolutionExpired
Run Code Online (Sandbox Code Playgroud) 我需要找到未定义函数与阈值相交的点的近似值。我正在逐步穿越空间,每当发现随后的两个步骤位于阈值的不同侧时,我会在两者之间添加一个点:
我的第一种方法是选择中间点,但这显然是一个糟糕的解决方案:
我现在使用的是线性插值,可以得出合理的结果,但是底层函数实际上永远不会是线性的。因此,这仅在我的步长足够小时才有效:
对基本函数进行采样可能会非常昂贵,但是我想尝试添加一个或两个其他采样以获得更好的近似值。这里可以使用三次插值吗?像这样:

(来源:ning.com)
还是有更好的方法?
David Rutten非常有义务
ps。我正在用C#编写,但这是语言不可知的问题。
我有一个对象列表(可能不超过100个),其中每个对象与所有其他对象的距离.该距离仅仅是这些对象共享的所有字段之间的额外绝对差异.可能存在很少(一个)或许多(几十个)场,因此距离的维度并不重要.
我想在2D图形中显示这些点,使得距离较小的物体看起来很近.我希望这将清楚地表达整个列表中有多少个子组.显然这个图的轴是没有意义的(我甚至不确定"图形"是正确使用的词).
将距离网络转换为2D点分布的好算法是什么?理想情况下,我希望对距离网络进行一些小的改动,以使图形发生微小的变化,从而可以将增量进度视为随时间的平滑变化.
我已经找到了我正在寻找的那种结果的一个小例子: 示例图形http://en.wiki.mcneel.com/content/upload/images/GraphExample.png
大卫,非常感谢任何想法
它实际上似乎有效.我将整个值集视为二维粒子云,在所有粒子之间构建反平方排斥力,并基于反距离构造线性吸引力.它不是一个稳定的算法,只要执行额外的迭代,结果就会剧烈旋转,但它似乎总能产生与视觉集群的良好分离:
替代文字http://en.wiki.mcneel.com/content/upload/images/ParticleCloudSolution.png
如果有人感兴趣,我可以发布C#代码(很遗憾)
我们正在写一个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) 这是一个坏主意吗?
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)的附加类.但不知何故,这似乎是错误的.有没有更好的办法?
给定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) 我有一个NotifyIcon,表示可下载的应用程序更新.我希望下载页面在左键单击NotifyIcon上打开并在左侧单击NotifyIcon气球(在屏幕上显示10秒).
但是,当我处理BalloonTipClicked事件时,我无法弄清楚它是左击还是右击.因此,当气球仍然在屏幕上并且用户右键单击图标时,我同时打开弹出菜单和下载页面.
如何检测使用鼠标右键?
给定任意数量的交点,不相交和触摸矩形,如何找到(多个)轮廓折线?矩形在像素坐标中定义,因此它们具有整数精度,但它们可能是数千个单位大.

我真的需要轮廓的数字坐标,合并GDI区域是不行的.我知道我可以通过创建一个GDI区域并调用GetRegionScans来简化问题,但它仍然无法解决问题.
这是实时UI的一部分,因此算法需要相当快(我猜测从不超过十几个盒子,可能是一百个).
我在C#中这样做,但由于这是一个算法问题,我并不真正关心语言.任何想法最受欢迎.
Dim rc As Boolean = "2" Like "*?<*?"
Run Code Online (Sandbox Code Playgroud)
我不明白为什么rc等于True,肯定2不一样*?<*?.
上面的模式需要一个字符串
<)<符号是某处内部.据我所知,<不是一个特殊的角色,这意味着除了<Like运算符之外的其他东西.
使用Visual Studio 2010.
c# ×4
vb.net ×3
.net ×2
geometry ×2
2d ×1
3d ×1
balloon ×1
count ×1
cubic ×1
events ×1
gdi ×1
graph ×1
graphics ×1
handle ×1
ienumerable ×1
ienumerator ×1
math ×1
memory-leaks ×1
mouseevent ×1
notifyicon ×1
region ×1
sdk ×1
sql-like ×1