c#GDI+cad绘图教程能否把两个图形绑定一起,比如和CAD中一样,可以让两个图形按一定 的角度偏移。

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
独立之个性,自由之思想!
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(998)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
在LOFTER的更多文章
loftPermalink:'',
id:'fks_',
blogTitle:'基于Visual C#的AutoCAD开发——实例11 绘制基本图形',
blogAbstract:'
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}&我想要实现的是将测量的点展示到窗体中,可以放大缩小底图以及拖动底图,类似于CAD一样的。求高手指教
回复讨论(解决方案)
纯C#开发CAD系统。
技术点:图形控件开发+GDI+数据模型等等。
纯C#开发CAD系统。
技术点:图形控件开发+GDI+数据模型等等。
可以给我看看你写的代码吗?你发的都有我需要的功能。可以借我参考参考吗?
纯C#开发CAD系统。
技术点:图形控件开发+GDI+数据模型等等。
可以给我看看你写的代码吗?你发的都有我需要的功能。可以借我参考参考吗?
共同进步,qq。不过这是项目,不能发给你
纯C#开发CAD系统。
技术点:图形控件开发+GDI+数据模型等等。
这个是国外开源的项目么?
纯C#开发CAD系统。
技术点:图形控件开发+GDI+数据模型等等。
这个是国外开源的项目么?
自己开发的项目
无非就是在窗体中保存一个叫做zoom的浮点数和offsetx&offsety两个浮点数
然后再在你画图代码中涉及横坐标的地方,都加上offsetx,再乘以zoom,垂直坐标都加上offsety,再乘以zoom。
然后通过鼠标拖动和滚轮,改变这三个变量的大小,即可。C# GDI+技术
C# GDI+技术
GDI+概述
GDI+是GDI(即Windows早期版本中附带的Graphics Device Interface)的后继者。它是一种构成Windows XP操作系统的子系统的应用程序编程接口(API)。
GDI+基类的主要命名空间及说明:
System.Drawing--包含与基本绘图功能相关的大多数类、结构、枚举和委托。System.Drawing.Drawing2D--为大多数高级2D和矢量绘图操作提供了支持,包括消除锯齿、几何转换和图形路径。System.Drawing.Imaging--帮助处理图像(位图和GIF文件等)的各种类。System.Drawing.Printing--把打印机或打印预览窗口作为输出设备时使用的类。System.Drawing.Design--一些预定义的对话框、属性表和其他用户界面元素,与在设计期间扩展用户界面相关。System.Drawing.Text--对字体和字体系列执行更高级操作的类。
基本图形绘制
Graphics类是GDI+的核心,Graphics对象表示GDI+绘图表面,提供了对象绘制到显示设备的方法。Graphics类封装了绘制直线、曲线、图形、图像和文本的方法,是GDI+实现绘制直线、曲线、图形、图像和文本的类,是进行一切GDI+操作的基础类。
Graphics类中的DrawLine方法,可重载,主要用来绘制一条连接由坐标对指定的两个点的线条。
(1)绘制一条连接两个Point结构的线。
public void DrawLine(Pen pen, Point pt1,Point pt2)
pen:Pen对象,确定线条颜色、宽度和样式。pt1:Point结构,表示要连接的第一个点。pt2:Point结构,表示要连接的第二个点。
(2)绘制一条连接由坐标对指定的两个点的线条。
Public void DrawLine(Pen pen,int x1,int y1,int x2,int y2)
绘制直线的示例代码:
private void button1_Click(object sender, EventArgs e)
Graphics graphics = this.CreateGraphics();
Pen myPen = new Pen(Color.Blue, 2);
graphics.DrawLine(myPen, 50, 30, 170, 30);
Graphics类的DrawRectangle方法,可重载。
(1)绘制由Rectangle结构指定的矩形。
public void DrawRectangle(Pen pen,Rectangle rect)
pen:Pen对象,确定线条颜色、宽度和样式。rect:表示要绘制矩形的Rectangle结构。
Rectangle rect = new Rectangle(0, 0, 80, 50);(2)绘制由坐标对、宽度和高度指定的矩形。
public void DrawRectangle(Pen pen, int x, int y, int width, int height)
pen:Pen对象,确定线条颜色、宽度和样式。x:要绘制矩形的左上角x坐标。y:要绘制矩形的左上角y坐标。width和height分别表示宽度和高度。
绘制矩形的示例代码:
private void button1_Click(object sender, EventArgs e)
Graphics graphics = this.CreateGraphics();
Pen myPen = new Pen(Color.Blue, 2);
graphics.DrawRectangle(myPen, 70, 20, 80, 50);
Graphics类中的DrawEllipse方法,可重载。主要用来绘制边界由Rectangle结构指定的椭圆。
(1)绘制边界由Rectangle结构指定的椭圆。
public void DrawEllipse(Pen pen, Rectangle rect)(2)绘制一个由边框(该边框由一对坐标、高度和宽度指定)定义的椭圆。
public void DrawEllipse(Pen pen, int x, int y, int width, int height)
绘制椭圆的示例代码:
private void button1_Click(object sender, EventArgs e)
Graphics graphics = this.CreateGraphics();
Pen myPen = new Pen(Color.Blue, 3);
Rectangle myRectangle = new Rectangle(70, 20, 100, 60);
graphics.DrawEllipse(myPen, myRectangle);
Graphics类中的DrawArc方法,可重载。
(1)绘制一段弧线,它表示由Rectangle结构指定的椭圆的一部分。
public void DrawArc(Pen pen, Rectangle rect, float startAngle, float sweepAngle)
pen:Pen对象,确定线条颜色、宽度和样式。rect:Rectangle结构,定义椭圆边界。startAngle:从x轴到弧线的起始点沿顺时针方向度量的角(以度为单位)。sweepAngle:从startAngle参数到弧线的结束点沿顺时针方向度量的角(以度为单位)。
(2)绘制一段弧线,它表示由一对坐标、宽度和高度指定的椭圆部分。
public void DrawArc(Pen pen, int x, int y, int width, int height, int startAngle, int sweepAngle)
绘制圆弧的实例代码:
private void button1_Click(object sender, EventArgs e)
Graphics graphics = this.CreateGraphics();
Pen myPen = new Pen(Color.Blue, 5);
Rectangle myRectangle = new Rectangle(70, 20, 100, 60);
graphics.DrawArc(myPen, myRectangle,210,120);
绘制多边形
需要Graphics对象、Pen对象和Point(或PointF)对象数组。Graphics类提供DrawPolygon方法,Pen对象存储用于呈现多边形的线条属性,如宽度和颜色等,Point(或PointF)对象数组存储多边形的各个顶点。可重载。
(1)绘制由一组Point结构定义的多边形。
public void DrawPolygon(Pen pen, Point[] pints)(2)绘制由一组PointF结构定义的多边形。
public void DrawPolygon(Pen pen, PointF[] pints)
绘制多边形示例代码:
private void button1_Click(object sender, EventArgs e)
Graphics graphics = this.CreateGraphics();
Pen myPen = new Pen(Color.Red, 5);
Point point1 = new Point(80, 20);
Point point2 = new Point(40, 50);
Point point3 = new Point(80, 80);
Point point4 = new Point(160, 80);
Point point5 = new Point(200, 50);
Point point6 = new Point(160, 20);
Point[] myPoints = { point1, point2, point3, point4, point5, point6 };
graphics.DrawPolygon(myPen, myPoints);
绘制基数样条
基数样条是一连串单独的曲线,连接起来组成较大的曲线。由点的数组和张力参数指定,样条平滑地经过数组的每个点,曲线的陡度上没有尖角和突然的变化。
(1)绘制经过一组指定Point结构的基数样条。
public void DrawCurve(Pen pen, Point[] points)(2)使用指定的张力,绘制经过一组指定Point结构的基数样条。
public void DrawCurve(Pen pen, Point[] points, float tension)
tension:大于或等于0.0F的值,指定曲线的张力。
(3)从相对于数组开始位置的偏移量开始,绘制经过一组指定PointF结构的基数样条。
public void DrawCurve(Pen pen, Point[] points, int offset, int numberOfSegments)
offset:从points参数数组中的第一个元素到曲线中起始点的偏移量。numberOfSegments:起始点之后要包含在曲线中的段数。
(4)使用指定张力,绘制经过一组指定Point结构的基数样条。
public void DrawCurve(Pen pen, Point[] points, int offset, int numberOfSegments, float tension)
绘制基数样条示例代码:
private void button1_Click(object sender, EventArgs e)
Graphics graphics = this.CreateGraphics();
Pen myPen = new Pen(Color.Red, 5);
Point point1 = new Point(50, 20);
Point point2 = new Point(60, 30);
Point point3 = new Point(70, 25);
Point point4 = new Point(100, 50);
Point point5 = new Point(130, 30);
Point point6 = new Point(150, 45);
Point[] myPoints = { point1, point2, point3, point4, point5, point6 };
graphics.DrawCurve(myPen, myPoints, 1.0F);
绘制贝赛尔样条
贝塞尔样条是由4个点指定的曲线:两个端点(p1,p2)和两个控制点(c1,c2)。曲线开始于p1,结束于p2。曲线不经过控制点,但是控制点像磁铁一样,在某些方向上拉伸曲线并影响曲线弯曲的方式。
调用Graphics类的DrawBezier方法,可重载。
(1)绘制由4个Point结构定义的贝塞尔样条。
public void DrawBezier(Pen pen, Point pt1, Point pt2, Point pt3, Point pt4)
4个Point点分别表示起始点、第一个控制点、第二个控制点和结束点。
(2)绘制由4个表示点的有序坐标对定义的贝塞尔样条。
public void DrawBezier(Pen pen, float x1, float y1, float x2, float y2, float x3, float y3, float x4, float y4)
x2,y2及x3,y3分别表示第1个、第2个控制点相应坐标。顺序和第一种方法类似。
绘制贝塞尔样条示例代码:
private void button1_Click(object sender, EventArgs e)
Graphics graphics = this.CreateGraphics();
Pen myPen = new Pen(Color.Red, 5);
float startX = 50.0F;
float startY = 80.0F;
float controlX1 = 150.0F;
float controlY1 = 20.0F;
float controlX2 = 230.0F;
float controlY2 = 50.0F;
float endX = 190.0F;
float endY = 80.0F;
graphics.DrawBezier(myPen, startX, startY, controlX1, controlY1, controlX2, controlY2, endX, endY);
绘制图形路径
路径是通过组合直线、矩形和简单的曲线而形成的。在GDI+中,GraphicsPath对象允许将基本构造块收集到一个单元中,调用一次Graphics类的DrawPath方法,就可以绘制出整个单元的直线、矩形、多边形和曲线。
public void DrawPath(Pen pen, GraphicsPath path)
pen:Pen对象,确定线条颜色、宽度和样式。path:要绘制的GraphicsPath图形路径。
PS:注意要引用System.Drawing.Drawing2D命名空间。
绘制图形路径示例代码:
private void button1_Click(object sender, EventArgs e)
Graphics graphics = this.CreateGraphics();
GraphicsPath myGraphicsPath = new GraphicsPath();
Pen myPen = new Pen(Color.Blue, 1);
Point[] myPoints = { new Point(15, 30), new Point(30, 40), new Point(50, 30) };
myGraphicsPath.AddArc(15, 20, 80, 50, 210, 120);
myGraphicsPath.StartFigure();
myGraphicsPath.AddCurve(myPoints);
myGraphicsPath.AddString("图形路径", new FontFamily("华文行楷"), (int)FontStyle.Underline, 50, new PointF(20, 50), new StringFormat());
myGraphicsPath.AddPie(180,20,80,50,210,120);
graphics.DrawPath(myPen, myGraphicsPath);
(window.slotbydup=window.slotbydup || []).push({
id: '2467140',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467141',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467142',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467143',
container: s,
size: '1000,90',
display: 'inlay-fix'
(window.slotbydup=window.slotbydup || []).push({
id: '2467148',
container: s,
size: '1000,90',
display: 'inlay-fix'Visual C#图形图像编程之一——基础知识及基本绘图方法--《电脑编程技巧与维护》2004年08期
Visual C#图形图像编程之一——基础知识及基本绘图方法
【摘要】:正 Visual C#是微软公司极力推荐的开发基于.Net平台应用程序的开发语言,从它正式推出到目前,凭借着其优秀的性能和操控性,受到越来越多的软件公司和开发者欢迎。Visual C#的图形图像编程又简称GDI+编程,GDI+是从GDI发展而来的,
【关键词】:
【分类号】:TP311.1【正文快照】:
visualC#是微软公司极力推荐的并发基子.Net平台应用程序的开发语言,从它正式推「出到目前,凭借着其优秀的性能和操控性,受到越来越多的软件公司和开发者欢迎、vis。滋c#的图形图像编程又简称曲r+编程_,GDI+是从CDI发展而来的,GD卜不仅改善了一GDI性育继行了优化口还添加了根
欢迎:、、)
支持CAJ、PDF文件格式,仅支持PDF格式
【同被引文献】
中国期刊全文数据库
赵鹏;杨浩;;[J];北京交通大学学报;2006年03期
付梦印,李杰,邓志红;[J];北京理工大学学报;2004年10期
余祖德;周明友;陈俊芳;;[J];重庆交通学院学报;2006年03期
李旭华,王建中;[J];电脑开发与应用;2005年01期
林和平;杨晨;;[J];航空计算技术;2006年06期
何胜学;范炳全;;[J];交通运输工程与信息学报;2007年01期
张铱莹;彭其渊;;[J];交通科技与经济;2006年01期
王华,季令;[J];上海铁道大学学报;1999年04期
缪江华,袁振洲,沙滨,曹守华;[J];交通科技;2005年05期
史峰,马钧培,向联慧,张彦;[J];铁道学报;1999年05期
中国硕士学位论文全文数据库
荣玮;[D];武汉理工大学;2005年
郭磊;[D];西安电子科技大学;2007年
朱周春;[D];西南大学;2008年
【相似文献】
中国期刊全文数据库
赵晓燕;刘志刚;;[J];机械管理开发;2008年01期
陆可喜;石文学;刘继朝;;[J];地下水;2008年03期
周爱民;;[J];电脑编程技巧与维护;2009年10期
刘昕;;[J];硅谷;2011年15期
郭遂峰;赵春;张雅歌;;[J];新乡师范高等专科学校学报;2006年05期
黄劲涛;杨智;;[J];微计算机应用;1986年02期
王维英;陆新;;[J];机电信息;2010年18期
马金虎;[J];电脑编程技巧与维护;2004年09期
刘洪坡,吕冰清;[J];南阳师范学院学报;2004年09期
吴建华,徐鹰,黎鹰,王顺长;[J];微机发展;1998年01期
中国重要会议论文全文数据库
宋迎年;;[A];全国数字地质制图学术讨论会部分论文、论文摘要汇编[C];2004年
刘兵;;[A];全国第19届计算机技术与应用(CACIS)学术会议论文集(上册)[C];2008年
吴国珍;王君为;;[A];中国地质科学院水文地质工程地质研究所文集(7)[C];1991年
孙永兴;;[A];2008年度海洋工程学术会议论文集[C];2008年
张云;;[A];全国建筑给水排水青年学术论文选[C];1996年
王宇伟;;[A];全国矿山测量新技术学术会议论文集[C];2009年
杨艳;段振中;;[A];2007年湖北省气象学会学术年会暨全省青年气象科技工作者学术交流会议学术论文详细文摘汇集[C];2007年
肖力田;;[A];计算机技术在工程建设中的应用——第十一届全国工程建设计算机应用学术会议论文集[C];2002年
张梅庭;张一平;;[A];计算机技术在工程建设中的应用——第十一届全国工程建设计算机应用学术会议论文集[C];2002年
中国重要报纸全文数据库
廖炜;[N];中国文物报;2007年
赫丽萍;[N];中华建筑报;2008年
王伟光;[N];电脑报;2005年
张有蓬;[N];建筑时报;2002年
张自涛;[N];电脑报;2004年
特约作者:贾顺星;[N];电脑报;2004年
王曦;[N];中华建筑报;2008年
中国硕士学位论文全文数据库
刘兵;[D];合肥工业大学;2009年
王鹏;[D];电子科技大学;2011年
王荣;[D];武汉理工大学;2007年
潘文熹;[D];电子科技大学;2008年
谭凯;[D];山东大学;2009年
刘伟宁;[D];浙江大学;2010年
&快捷付款方式
&订购知网充值卡
400-819-9993
《中国学术期刊(光盘版)》电子杂志社有限公司
同方知网数字出版技术股份有限公司
地址:北京清华大学 84-48信箱 大众知识服务
出版物经营许可证 新出发京批字第直0595号
订购热线:400-819-82499
服务热线:010--
在线咨询:
传真:010-
京公网安备75号查看: 2366|回复: 8
如何让图形处于被选中状态(类似于鼠标框中后的效果)
最近做程序发现个小问题,通过选择集筛选的图形执行完程序后,在CAD图中无法处于被选中状态(类似于鼠标框中后的效果),因为我还有很多后续操作需要人工判断执行,不知道哪位达人能否相助。是否有代码可以实现此功能?
highlight方法
highlight 系统变量改为1
(sssetfirst nil (ssget))
ed.SetImpliedSelection(res2.Value.GetObjectIds());
谢谢大家 问题解决了
你是怎样做到的,共享一下,我搞了好多天,也没搞成
一段测试代码
&CommandMethod(&SSS&)& Public Shared Sub 筛选()
& && &&&Dim dm As DocumentCollection = Application.DocumentManager
& && &&&Dim ed As Editor = dm.MdiActiveDocument.Editor
& && &&&'获取当前数据库作为目标数据库
& && &&&Dim Db As Database = dm.MdiActiveDocument.Database
& && &&&dm.MdiActiveDocument.LockDocument()
& && &&&Dim ids() As ObjectId
& && &&&Dim N As Integer = 0
& && &&&Using trans As Transaction = Db.TransactionManager.StartTransaction()
& && && && &Dim bt As BlockTable = trans.GetObject(Db.BlockTableId, OpenMode.ForRead)
& && && && &Dim btr As BlockTableRecord = trans.GetObject(bt(BlockTableRecord.ModelSpace), OpenMode.ForRead)
& && && && &' 遍历选择集.
& && && && &For Each EntId As ObjectId In btr
& && && && && & Dim en As Entity = trans.GetObject(EntId, OpenMode.ForRead)
& && && && && & If TypeOf en Is Line Then
& && && && && && &&&ReDim Preserve ids(N)
& && && && && && &&&ids(N) = EntId
& && && && && && &&&en.Highlight()
& && && && && && &&&N = N + 1
& && && && && & End If
& && && && &Next
& && && && &ed.SetImpliedSelection(ids)
& && &&&End Using
& & End Sub
感谢楼上的分享
& 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途
Powered by}

我要回帖

更多关于 cad绘图教程 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信