当前位置:  编程技术>.net/c#/asp.net
本页文章导读:
    ▪Silverlight数学引擎(18)——几何作图游戏      在Win7上装了个IE10,虽然有不少诱人的新特性,但是在调试SL项目的时候却发现它对SL的支持有不少的问题,看来哥也要紧跟时代潮流了。本节应该是该系列的封篇之作了,哪天有空了再实现一.........
    ▪C# AD(Active Directory)域同步 组织单位、用户等信息查询      接上篇 Windows Server 2008 R2 配置AD(Active Directory)域控制器对AD域结合常见需求用C#进行一些读取信息的操作^_^! 目录 示例准备知识了解读取AD域信息示例DirectorySearcher.Filter属性扩充说明用户.........
    ▪C#绘制曲线      using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Windows.Forms;using System.Drawing.Drawing2D;namespace DrawChart{ public partial class .........

[1]Silverlight数学引擎(18)——几何作图游戏
    来源:    发布时间: 2013-10-22

在Win7上装了个IE10,虽然有不少诱人的新特性,但是在调试SL项目的时候却发现它对SL的支持有不少的问题,看来哥也要紧跟时代潮流了。本节应该是该系列的封篇之作了,哪天有空了再实现一个Html5版本吧,不过这个SL代码我会不经意地去维护的,比如Bug修复、易用性改善等等都不需要不断地完善。

在前面我们已经实现了基本的画图功能,如点、线、圆等,这些已经是尺规作图的全部功能了。但是要实现快速方便的作图,仅仅靠这三大件是非常低效的,因此我们需要提供更为复杂的一些画图技能,比如多边形、平行线、对称点之类的,我们称为复合图形。本节的主要工作就是对每个复合图形提供一个画图练习题,用户完成了该练习题后就获得相应的画图技能,并且可以使用新的技能去解新的题目,不必仅仅依靠点线圆三大件了。

首先我们整理一下哪些复合图形是必要的,并且根据优先级进行排序,例如中点是中垂线与线的交点,所以位于中垂线之后:

public enum BehaviorOrder
{
中垂线 = 5,
中点 = 6,
对称点 = 7,
外接圆 = 8,
平行线 = 9,
垂直线 =10,
角平分线 = 11,
None=100,
}

然后提供一个练习题的接口定义:

public interface IExcercises
{
BehaviorOrder BehaviorOrder { get; }//技能
string Content { get; }//题目内容(xml)
bool Validate(CoordinateBase shape);//验证策略
IExcercises Next { get; }//下一个练习
}

该接口很容易理解,但是不是那么容易实现的,难点就是验证策略不好确定,因为作图方法有很多种,我们不能遍历所有的方法,也不能通过简单坐标计算来判断,因为这有可能遇到偶然情况,比如用户画的点恰好在哪个位置。So,那该咋办呢?在我的练习中,主要验证最简单通用的作图思路,然后通过寻找依赖来判断所做的图是否正确,比如作线段AB的中垂线,最简单的作图方法是这样的:

  1.作以AB(或BA)为半径,A为中心的圆A。

  2.作以AB(或BA)为半径,B为中心的圆B。

  3.作两圆的交点C、D,连接CD,CD即为所求。

那么,验证策略就是根据A、B两点来验证其与线段CD的关系,如果符合,通过验证,代码如下:

public static bool Validate(PointShape A, PointShape B, LineShape line)
{
var CS = A.CS;

var circleA = CS.FindCircle(A, A, B, false, false) ?? CS.FindCircle(A, B, A, false, false);
var circleB = CS.FindCircle(B, A, B, false, false) ?? CS.FindCircle(B, B, A, false, false);
if (circleA == null || circleB == null) return false;
if (circleA.Parents[0] != A) return false;
if (circleB.Parents[0] != B) return false;

if (line.P1.DependentOnAll(false, circleA, circleB) &&
line.P2.DependentOnAll(false, circleA, circleB))
return true;

return false;
}

可以发现,我将该方法写成了静态的,是为了可以复用,比如画中点的最简单方法就是先画中垂线,然后直接取交点即可。所以我们只要通过以上验证方法找出一条中垂线,然后再进行交点的验证,比如MidPoint的验证方法如下:

public static bool Validate(PointShape A, PointShape B, IntersectionPointOfLines midPoint)
{
var cs = A.CS;
var AB = cs.FindShapes<LineShape>(false, A, B).FirstOrDefault();
var circleA = cs.FindCircle(A, A, B, false, false) ?? cs.FindCircle(A, B, A, false, false);
var circleB = cs.FindCircle(B, A, B, false, false) ?? cs.FindCircle(B, B, A, false, false);
if (circleA == null || circleB == null) return false;
if (circleA.Parents[0] != A) return false;
if (circleB.Parents[0] != B) return false;

var ps = cs.FindShapes<IntersectionPointOfCircles>(false, circleA, circleB);
if (ps.Count >= 2)
{
var CD = cs.FindShapes<LineShape>(false, ps[0], ps[1]).FirstOrDefault();
if (CD != null && midPoint.DependentOnAll(false, AB, CD))
return true;
}

return false;
}

OK,验证策略有了,那么还有一个问题:何时验证呢?当然也有不少方法,比如每作一个图就遍历验证一下,这样的效率毕竟很差,我们可以最大限度的缩小要验证对象的范围,通过Behavior传入是一个不错的方案,实现代码如下:


    
[2]C# AD(Active Directory)域同步 组织单位、用户等信息查询
    来源:    发布时间: 2013-10-22

接上篇 Windows Server 2008 R2 配置AD(Active Directory)域控制器

对AD域结合常见需求用C#进行一些读取信息的操作^_^!

 

目录

 

  • 示例准备
  • 知识了解
  • 读取AD域信息示例
  • DirectorySearcher.Filter属性扩充说明
  • 用户属性扩充说明(含图文属性对照)
    • 常规
    • 地址
    • 帐户
    • 电话
    • 组织
  • 示例下载

 

示例准备
  • 打开上一篇文章配置好的AD域控制器
  • 开始菜单-->管理工具-->Active Directory 用户和计算机
  • 新建组织单位和用户

   

  • 新建层次关系如下:

  

 

知识了解

  我们要用C#访问Active Directory非常容易,主要用到

  轻量目录访问协议 (LDAP)

  System.DirectoryServices命名空间下的两个组件类

  DirectoryEntry和DirectorySeacher

 

读取AD域信息示例

   示例在Framework 3.5下用Winform程序编写

   主要结合常见需求读取组织单位(OU)及用户(User)信息,以及同步组织单位和用户的层次关系;

     比较着重的还是用户的信息,特别是帐号、邮箱、SID等信息;

  

  • 下面我们开始连接域,并读取出示例准备中键好的组织单位和用户  

  首先编写代码用LDAP尝试对域进行访问

  形式:LDAP://Domain

#region## 是否连接到域
/// <summary>
/// 功能:是否连接到域
/// 作者:Wilson
/// 时间:2012-12-15
/// http://msdn.microsoft.com/zh-cn/library/system.directoryservices.directoryentry.path(v=vs.90).aspx
/// </summary>
/// <param name="domainName">域名或IP</param>
/// <param name="userName">用户名</param>
/// <param name="userPwd">密码</param>
/// <param name="entry">域</param>
/// <returns></returns>
private bool IsConnected(string domainName, string userName, string userPwd, out DirectoryEntry domain)
{
domain = new DirectoryEntry();
try
{
domain.Path = string.Format("LDAP://{0}", domainName);
domain.Username = userName;
domain.Password = userPwd;
domain.AuthenticationType = AuthenticationTypes.Secure;

domain.RefreshCache();

return true;
}
catch(Exception ex)
{
LogRecord.WriteLog("[IsConnected方法]错误信息:" + ex.Message);
return false;
}
}
#endregion

   传用参数,调IsConnected方法,结果如下

  

  • 连接上AD域后,接着我们找到根OU
#region## 域中是否存在组织单位
/// <summary>
/// 功能:域中是否存在组织单位
/// 作者:Wilson
/// 时间:2012-12-15
/// </summary>
/// <param name="entry"></param>
/// <param name="ou"></param>
/// <returns></returns>
private bool IsExistOU(DirectoryEntry entry, out DirectoryEntry ou)
{
ou = new DirectoryEntry();
try
{
ou = entry.Children.Find("OU=" + txtRootOU.Text.Trim());

return (ou != null);
}
catch(Exception ex)
{
LogRecord.WriteLog("[IsExistOU方法]错误信息:" + ex.Message);
return false;
}
}
#endregion

  传入以数,调用IsExistOU方法,结果如下

  

  • 下面来开始读取组织单位及用户的信息。

   示例为了看出层次关系及导出信息是类型区分,给OU和User新建了一个实体类和一个类型的枚举 

#region## 类型
/// <summary>
/// 类型
/// </summary>
public enum TypeEnum : int
{
/// <summary>
/// 组织单位
/// </summary>
OU = 1,

/// <summary>
/// 用户
/// </summary>
USER = 2
}
#endregion

#region## Ad域信息实体
/// <summary>
/// Ad域信息实体
/// </summary>
public class AdModel
{
public AdModel(string id, string name, int typeId, string parentId)
{
Id = id;
Name = name;
TypeId = typeId;
ParentId = parentId;
}

public string Id { get; set; }

public string Name { get; set; }

public int TypeId { get; set; }

public string ParentId { get; set; }
}
#endregion

   下面读取信息

private List<AdModel> list = new List<AdModel>();

     #region## 同步
/// <summary>
/// 功能:同步
/// 创建人:Wilson
/// 创建时间:2012-12-15
/// </summary>
/// <param name="entryOU"></param>
public void SyncAll(DirectoryEntry entryOU)
{
DirectorySearcher mySearcher = new DirectorySearcher(entryOU, "(object); //查询组织单位

DirectoryEntry root = mySearcher.SearchRoot; //查找根OU

SyncRootOU(root);

StringBuilder sb = new StringBuilder();

sb.Append("\r\nID\t帐号\t类型\t父ID\r\n");

foreach (var item in list)
{
sb.AppendFormat("{0}\t{1}\t{2}\t{3}\r\n", item.Id, item.Name, item.TypeId, item.ParentId);
}

LogRecord.WriteLog(sb.ToString());

MessageBox.Show("同步成功", this.Text, MessageBoxButtons.OK, MessageBoxIcon.Information);

Application.Exit();
}
#endregion

#region## 同步根组织单位
/// <summary>
/// 功能: 同步根组织单位
/// 创建人:Wilson
/// 创建时间:2012-12-15
/// </summary>
/// <param name="entry"></param>
private void SyncRo
    
[3]C#绘制曲线
    来源:    发布时间: 2013-10-22
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Drawing.Drawing2D;

namespace DrawChart
{
public partial class DrawingCure : Form
{
public DrawingCure()
{
InitializeComponent();
}


private void DrawingCure_Load(object sender, EventArgs e)
{
Curve2D cuv2D = new Curve2D();
cuv2D.Fit();
Bitmap bmp = cuv2D.CreateImage();
bmp.Save("c:/1.bmp");
}
}

public class Curve2D
{
private Graphics objGraphics;

private Bitmap objBitmap;//位图对象

private float fltWidth = 480;//图像宽度

private float fltHeight = 248;//图像高度

private float fltXSlice = 50;//X轴刻度宽度

private float fltYSlice = 50;//Y轴刻度宽度

private float fltYSliceValue = 20;//Y轴刻度的数值宽度

private float fltYSliceBegin = 0;//Y轴刻度的开始值

private float fltTension = 0.5f;

private string strTitle = "曲线图";//标题

private string strXAxisText = "月份";//X轴说明文字

private string strYxAisText = "万元";//Y轴说明文字

private string[] strsKeys = new string[] { "一月", "一月", "二月", "三月", "四月", "五月", "六月", "七月", "八月", "九月", "十一月", "十二月" };//键

private float[] fltsValues = new float[] { 20.2f, 30.0f, 50.0f, 55.4f, 21.6f, 12.8f, 99.5f, 36.4f, 78.2f, 56.4f, 45.8f, 66.5f, 99.5f, 36.4f, 78.2f, 56.4f, 45.8f, 66.5f, 20.0f, 30.0f, 50.0f, 55.4f, 21.6f, 12.8f };//值

private Color clrBgColor = Color.Snow;//背景色

private Color clrTextColor = Color.Black;//文字颜色

private Color clrBorderColor = Color.Black;//整体边框颜色

private Color clrAxisColor = Color.Black;//轴线颜色

private Color clrAxisTextColor = Color.Black;//轴说明文字颜色

private Color clrSliceTextColor = Color.Black;//刻度文字颜色

private Color clrSliceColor = Color.Black;//刻度颜色

private Color[] clrsCurveColors = new Color[] { Color.Red, Color.Blue };//曲线颜色


    
最新技术文章:
 




特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

©2012-2021,,E-mail:www_#163.com(请将#改为@)

浙ICP备11055608号-3