c#自定义控件开发实例

c#自定义控件开发实例
c#自定义控件开发实例

c#自定义控件开发实例

最近做一个图象的采集,需要一个图形的选择控件,但是在.net下没有类似vb中的shape 控件,所以考虑了自己写一个控件。

下面我将从头创建控件,这个控件主要是用来选择图形的Rectangle,有一下几个属性Col or BorderColor:边框颜色,Color BackColor:背景颜色,bool ReSizeble:是否可移动,Rectangle SelectRectangle:选择区域。

打开vs2003(我用的这个版本),新建一个c#控件库,ok,拷贝如下代码到你的代码里。

using System;

using System.Collections;

using https://www.360docs.net/doc/2c2617554.html,ponentModel;

using System.Drawing;

using System.Data;

using System.Windows.Forms;

namespace WindowsExtendedControls

{

///

/// 控件

///

public class ShapeEx : System.Windows.Forms.Control

{

///

/// 必需的设计器变量。

///

///

private Color _BorderColor=new Color();

private Color _BackColor=new Color();

private bool _ReSizeble;

private Point _SelfLocation=new Point();

private Point _MouseLocation=new Point();

private int _SelfWidth;

private int _SelfHeight;

private int _SelectSelctedIndex;//0-8,0:SizeAll

private Rectangle _rectLeftSelector=new Rectangle();

private Rectangle _rectTopSelector=new Rectangle();

private Rectangle _rectRightSelector=new Rectangle();

private Rectangle _rectBottomSelector=new Rectangle();

private Rectangle _rectLeftTopSelector=new Rectangle();

private Rectangle _rectRightTopSelector=new Rectangle();

private Rectangle _rectRightBottomSelector=new Rectangle();

private Rectangle _rectLeftBottomSelector=new Rectangle();

private https://www.360docs.net/doc/2c2617554.html,ponentModel.Container components = null;

public ShapeEx()

{

// 该调用是Windows.Forms 窗体设计器所必需的。

InitializeComponent();

// TODO: 在InitComponent 调用后添加任何初始化

}

[DefaultValue("Black"),Description("边框颜色"),Category("Appearance")]

public Color BorderColor

{

get

{

// Insert code here.

return _BorderColor;

}

set

{

_BorderColor=value;

this.Invalidate();

}

}

[DefaultValue("Control"),Description("背景颜色"),Category("Appearance")]

public override Color BackColor

{

get

{

// Insert code here.

return _BackColor;

}

set

{

_BackColor=value;

this.Invalidate();

}

}

[DefaultValue(false),Description("运行中控件大小是否可拖拽编辑"),Category("Behavior ")]

public bool ReSizeble

{

get

{

// Insert code here.

return _ReSizeble;

}

set

{

_ReSizeble=value;

this.Invalidate();

}

}

[Description("控件选择区域"),Category("Behavior")]

public Rectangle SelectRectangle

{

get

{

Rectangle selectRectangler=new Rectangle();

selectRectangler.X = this.Location.X+7;

selectRectangler.Y = this.Location.Y+7;

selectRectangler.Height = this.Height-15;

selectRectangler.Width = this.Width-15;

return selectRectangler;

}

}

protected override void OnPaint(PaintEventArgs pe)

{

// Calling the base class OnPaint

base.OnPaint(pe);

ReDrawControl(pe.Graphics);

}

private void DrawSelector(Graphics graphics)

{

SolidBrush SelectorPen=new SolidBrush(Color.White);

Pen borderPen=new Pen(this._BorderColor,1);

try

{

//实心

PointF[] LeftPoints=getPointF(0,this.Height/2-3,6,6);

graphics.FillClosedCurve(SelectorPen, LeftPoints);

PointF[] TopPoints=getPointF(this.Width/2-3,0,6,6);

graphics.FillClosedCurve(SelectorPen, TopPoints);

PointF[] RightPoints=getPointF(this.Width-7,this.Height/2-3,6,6); graphics.FillClosedCurve(SelectorPen, RightPoints);

PointF[] BottomPoints=getPointF(this.Width/2-3,this.Height-7,6,6);

graphics.FillClosedCurve(SelectorPen, BottomPoints);

PointF[] LeftTopPoints=getPointF(0,0,6,6);

graphics.FillClosedCurve(SelectorPen, LeftTopPoints);

PointF[] RightTopPoints=getPointF(this.Width-7,0,6,6);

graphics.FillClosedCurve(SelectorPen, RightTopPoints);

PointF[] RightBottomPoints=getPointF(this.Width-7,this.Height-7,6,6); graphics.FillClosedCurve(SelectorPen, RightBottomPoints);

PointF[] LeftBottomPoints=getPointF(0,this.Height-7,6,6);

graphics.FillClosedCurve(SelectorPen, LeftBottomPoints);

//边框

_rectLeftSelector.X = 0;

_rectLeftSelector.Y = this.Height/2-3;

_rectLeftSelector.Height = 6;

_rectLeftSelector.Width = 6;

graphics.DrawRectangle(borderPen, _rectLeftSelector);

_rectTopSelector.X = this.Width/2-3;

_rectTopSelector.Y = 0;

_rectTopSelector.Height = 6;

_rectTopSelector.Width = 6;

graphics.DrawRectangle(borderPen, _rectTopSelector);

_rectRightSelector.X = this.Width-7;

_rectRightSelector.Y = this.Height/2-3;

_rectRightSelector.Height = 6;

_rectRightSelector.Width = 6;

graphics.DrawRectangle(borderPen, _rectRightSelector);

_rectBottomSelector.X = this.Width/2-3;

_rectBottomSelector.Y = this.Height-7;

_rectBottomSelector.Height = 6;

_rectBottomSelector.Width = 6;

graphics.DrawRectangle(borderPen, _rectBottomSelector);

_rectLeftTopSelector.X=0;

_rectLeftTopSelector.Y=0;

_rectLeftTopSelector.Width=6;

_rectLeftTopSelector.Height=6;

graphics.DrawRectangle(borderPen, _rectLeftTopSelector);

_rectRightTopSelector.X=this.Width-7;

_rectRightTopSelector.Y=0;

_rectRightTopSelector.Width=6;

_rectRightTopSelector.Height=6;

graphics.DrawRectangle(borderPen, _rectRightTopSelector);

_rectRightBottomSelector.X=this.Width-7;

_rectRightBottomSelector.Y=this.Height-7;

_rectRightBottomSelector.Width=6;

_rectRightBottomSelector.Height=6;

graphics.DrawRectangle(borderPen, _rectRightBottomSelector); _rectLeftBottomSelector.X=0;

_rectLeftBottomSelector.Y=this.Height-7;

_rectLeftBottomSelector.Width=6;

_rectLeftBottomSelector.Height=6;

graphics.DrawRectangle(borderPen, _rectLeftBottomSelector); }

catch(Exception E)

{

throw E;

}

finally

{

SelectorPen.Dispose();

borderPen.Dispose();

}

}

private void ReDrawControl(Graphics graphics)

{

try

{

//绘制背景

/*

graphics.Clear(this._BackColor);

SolidBrush backPen=new SolidBrush(this._BackColor);

PointF point1 = new PointF(1,1);

PointF point2 = new PointF(this.Width-2,1);

PointF point3 = new PointF(this.Width-2,this.Height-2);

PointF point4 = new PointF(1,this.Height-2);

PointF[] points = {point1, point2, point3, point4};

graphics.FillClosedCurve(backPen, points);

*/

//绘制边框

Rectangle rectBorder=new Rectangle();

Pen borderPen=new Pen(this._BorderColor,1);

rectBorder.X = 7;

rectBorder.Y = 7;

rectBorder.Height = this.Height-15;

rectBorder.Width = this.Width-15;

graphics.DrawRectangle(borderPen, rectBorder);

//绘制编辑框

if (_ReSizeble)

{

DrawSelector(graphics);

}

}

catch(Exception E)

{

throw E;

}

finally

{

graphics.Dispose();

}

}

///

/// 清理所有正在使用的资源。

///

private PointF[] getPointF(int x,int y,int Width,int Height){ PointF point1 = new PointF(x,y);

PointF point2 = new PointF(x+Width,y);

PointF point3 = new PointF(x+Width,y+Height);

PointF point4 = new PointF(x,y+Height);

PointF[] points = {point1, point2, point3, point4};

return points;

}

protected override void Dispose( bool disposing )

{

if( disposing )

{

if( components != null )

components.Dispose();

}

base.Dispose( disposing );

}

#region 组件设计器生成的代码

///

/// 设计器支持所需的方法- 不要使用代码编辑器

/// 修改此方法的内容。

///

private void InitializeComponent()

{

components = new https://www.360docs.net/doc/2c2617554.html,ponentModel.Container();

this.Resize+=new EventHandler(ShapeEx_Resize);

this.MouseDown+=new MouseEventHandler(ShapeEx_MouseDown);

this.MouseMove+=new MouseEventHandler(ShapeEx_MouseMove);

this.MouseLeave+=new EventHandler(ShapeEx_MouseLeave);

this.MouseUp+=new MouseEventHandler(ShapeEx_MouseUp);

this._BorderColor=Color.Black;

this._BackColor=Color.FromName("Control");

this._ReSizeble=false;

this._SelectSelctedIndex=-1;

SetStyle(ControlStyles.SupportsTransparentBackColor, true);

}

#endregion

private void ShapeEx_Resize(object sender, EventArgs e)

{

if (this.Width<16 || this.Height<16)

{

this.Width=16;

this.Height=16;

}

this.Invalidate();

}

private void ShapeEx_MouseDown(object sender, MouseEventArgs e)

{

if (_ReSizeble)

{

if (_rectLeftSelector.Contains(e.X,e.Y) || _rectRightSelector.Contains(e.X,e.Y) || _re ctTopSelector.Contains(e.X,e.Y) || _rectBottomSelector.Contains(e.X,e.Y) ||_rectLeftTop Selector.Contains(e.X,e.Y) || _rectRightTopSelector.Contains(e.X,e.Y) || _rectRightBott omSelector.Contains(e.X,e.Y) || _rectLeftBottomSelector.Contains(e.X,e.Y))

{

if (_rectLeftTopSelector.Contains(e.X,e.Y) )

{

this.Cursor=Cursors.SizeNWSE;

this._SelectSelctedIndex=1;

}

if (_rectTopSelector.Contains(e.X,e.Y) )

{

this.Cursor=Cursors.SizeNS;

this._SelectSelctedIndex=2;

}

if (_rectRightTopSelector.Contains(e.X,e.Y) )

{

this.Cursor=Cursors.SizeNESW;

this._SelectSelctedIndex=3;

}

if (_rectRightSelector.Contains(e.X,e.Y) )

{

this.Cursor=Cursors.SizeWE;

this._SelectSelctedIndex=4;

}

if (_rectRightBottomSelector.Contains(e.X,e.Y) ) {

this.Cursor=Cursors.SizeNWSE;

this._SelectSelctedIndex=5;

}

if (_rectBottomSelector.Contains(e.X,e.Y))

{

this.Cursor=Cursors.SizeNS;

this._SelectSelctedIndex=6;

}

if (_rectLeftBottomSelector.Contains(e.X,e.Y) ) {

this.Cursor=Cursors.SizeNESW;

this._SelectSelctedIndex=7;

}

if (_rectLeftSelector.Contains(e.X,e.Y))

{

this.Cursor=Cursors.SizeWE;

this._SelectSelctedIndex=8;

}

}

else

{

this.Cursor=Cursors.SizeAll;

this._SelectSelctedIndex=0;

}

this._SelfLocation.X=this.Location.X;

this._SelfLocation.Y=this.Location.Y;

this._MouseLocation.X=Cursor.Position.X;

this._MouseLocation.Y=Cursor.Position.Y;

this._SelfWidth=this.Width;

this._SelfHeight=this.Height;

}

}

private void ShapeEx_MouseMove(object sender, MouseEventArgs e)

{

//move and resize

switch (this._SelectSelctedIndex)

{

case 0:

this.Location=new Point(Cursor.Position.X-(_MouseLocation.X-_SelfLocation.X),Curso r.Position.Y-(_MouseLocation.Y-_SelfLocation.Y));

break;

case 1:

this.Height=this._SelfHeight-(Cursor.Position.Y-_MouseLocation.Y);

this.Width=this._SelfWidth-(Cursor.Position.X-_MouseLocation.X);

this.Location=new Point(Cursor.Position.X-_MouseLocation.X+_SelfLocation.X,Cursor. Position.Y-_MouseLocation.Y+_SelfLocation.Y);

break;

case 2:

this.Height=this._SelfHeight-(Cursor.Position.Y-_MouseLocation.Y);

this.Location=new Point(_SelfLocation.X,Cursor.Position.Y-_MouseLocation.Y+_SelfL ocation.Y);

break;

case 3:

this.Height=this._SelfHeight-(Cursor.Position.Y-_MouseLocation.Y);

this.Width=this._SelfWidth+(Cursor.Position.X-_MouseLocation.X);

this.Location=new Point(_SelfLocation.X,Cursor.Position.Y-(_MouseLocation.Y-_SelfL ocation.Y));

break;

case 4:

this.Width=this._SelfWidth+(Cursor.Position.X-_MouseLocation.X);

break;

case 5:

this.Height=this._SelfHeight+(Cursor.Position.Y-_MouseLocation.Y);

this.Width=this._SelfWidth+(Cursor.Position.X-_MouseLocation.X);

break;

case 6:

this.Height=this._SelfHeight+(Cursor.Position.Y-_MouseLocation.Y);

break;

case 7:

this.Height=this._SelfHeight+(Cursor.Position.Y-_MouseLocation.Y);

this.Width=this._SelfWidth-(Cursor.Position.X-_MouseLocation.X);

this.Location=new Point(Cursor.Position.X-_MouseLocation.X+_SelfLocation.X,_SelfL ocation.Y);

break;

case 8:

this.Width=this._SelfWidth-(Cursor.Position.X-_MouseLocation.X);

this.Location=new Point(Cursor.Position.X-_MouseLocation.X+_SelfLocation.X,_SelfL ocation.Y);

break;

}

}

private void ShapeEx_MouseLeave(object sender, EventArgs e)

{

this.Cursor=Cursors.Default;

this._SelectSelctedIndex=-1;

}

private void ShapeEx_MouseUp(object sender, MouseEventArgs e)

{

this.Cursor=Cursors.Default;

this._SelectSelctedIndex=-1;

}

}

}

下面讲一下控件具体如何工作,首先要写他的属性以及重写他的属性,

private Color _BorderColor=new Color();

[DefaultValue("Black"),Description("边框颜色"),Category("Appearance")]

public Color BorderColor

{

get

{

// Insert code here.

return _BorderColor;

}

set

_BorderColor=value;

this.Invalidate();

}

}

DefaultValue:设定默认值,Description:描述,就是属性下面的说明,Category:属性分类.其他的同理

设置好属性以后应该重写他的绘制过程,也就是

protected override void OnPaint(PaintEventArgs pe)

{

// Calling the base class OnPaint

base.OnPaint(pe);

ReDrawControl(pe.Graphics);

}

private void ReDrawControl(Graphics graphics)

{

try

{

//绘制边框

Rectangle rectBorder=new Rectangle();

Pen borderPen=new Pen(this._BorderColor,1);

rectBorder.X = 7;

rectBorder.Y = 7;

rectBorder.Height = this.Height-15;

rectBorder.Width = this.Width-15;

graphics.DrawRectangle(borderPen, rectBorder);

//绘制编辑框

if (_ReSizeble)

{

DrawSelector(graphics);

}

}

catch(Exception E)

{

throw E;

}

finally

{

graphics.Dispose();

}

}

[Description("控件选择区域"),Category("Behavior")]

public Rectangle SelectRectangle

get

{

Rectangle selectRectangler=new Rectangle();

selectRectangler.X = this.Location.X+7;

selectRectangler.Y = this.Location.Y+7;

selectRectangler.Height = this.Height-15;

selectRectangler.Width = this.Width-15;

return selectRectangler;

}

}

ReDrawControl中定义了Rectangle (矩形),让后填充改矩形的边框:graphics.DrawRe ctangle(borderPen, rectBorder);,这里要说明的是边框外面还有编辑框,所以大小不是控件的大小。DrawSelector就是绘制8个选择框的,基本和绘制边框差不多,即使定义好坐标就可以了。干好了之后不要忘了释放资源:graphics.Dispose();

SelectRectangle:控件所选择的Rectangle,最终要得就是它了

ok,这样一个基本的东西出来了,下面我们要写他的move和resize函数了,先添加事件:

this.Resize += new System.EventHandler(this.ShapeEx_Resize);

this.MouseUp += new System.Windows.Forms.MouseEventHandler(this.ShapeEx_Mo useUp);

this.MouseMove += new System.Windows.Forms.MouseEventHandler(this.ShapeEx_ MouseMove);

this.MouseLeave += new System.EventHandler(this.ShapeEx_MouseLeave);

this.MouseDown += new System.Windows.Forms.MouseEventHandler(this.ShapeEx_ MouseDown);

原理:当鼠标点击的时候this.MouseDown,记录鼠标的位置,控件的原始位置和大小,判断位置:_rectLeftBottomSelector.Contains(e.X,e.Y):表示点击的是左下,设置鼠标,记录状态this._SelectSelctedIndex:判断点击了那个选择框,取值0-8:0代表移动整个控件,1是右上移动,2-8顺时针索引选择框。this.MouseMove处理如何改变控件的大小和位置case 0://只移动位置

this.Location=new Point(Cursor.Position.X-(_MouseLocation.X-_SelfLocation.X),Curso r.Position.Y-(_MouseLocation.Y-_SelfLocation.Y));

break;

1,5不仅移动位置,还改变大小,2,3,4,6,7,8只改变大小

其他则是清理工作。

好了,那么赶紧编译。生成就可以了。

基于VBA的AutoCAD二次开发及应用实例

基于VBA的AutoCAD二次开发及应用实例 时间:2011-10-03 18:25:09 来源:作者: 1引言 AutOCAD2005是AutOdesk公司的系列产品,该软件从其使用和设计思路上都秉承了工程制图人员的绘图习惯,能够非常轻松地绘制出带有平面视图和三维渲染效果的工程图纸,是绘图人员的一个理想工具。随着CAD基础理论和应用技术的不断发展,对CAD系统的功能要求也越来越高。因而AutoCAD 不可能完全满足每个用户的具体而特定的要求。设计人员希望它能从本质上减轻大量简单烦琐的工作量,使他们能集中精力于那些富有创造性的高层次思维活动中。 AutoCAD提供的开放式体系结构允许用户和开发者采用高级编程语言对其进行扩充和修改,即二次开发,能最大限度地满足用户的特殊要求,更方便、更规范、更专业的实现设计和绘图中的应用。VBA最早是建立在0ffice97中的标准宏语言,由于它在开发方面的易用性及具有的强大功能,许多软件开发商都将其嵌入自己的应用程序中,作为一种开发工具提供给用户使用。AutOdeSk公司自从Aut0CADRl4.0l版开始,内置了VBA开发工具。 新一代程序开发工具ViSual BaSic,不仅继承了面向对象方法的特性,同时具备可视化程序语言及程序产生器的概念。 VBA(visual Basic For Apphcation)是AutoCAD R12以后推出的一种新的编程环境,提供了以Visual Basic为基础的面向对象的开发特征及程序接口,能真正快速地访问AutOCAD图形数据库,能明显提高软件开发和维护的效率。 2 VBA的技术特性 2.1 VBA开发AUTOCAD的技术特点 VBA是微软开发出来的应用程序共享一种通用的自动化语言,它可以使常用的程序自动化,并可以创建自定义的解决方案。 VBA被集成到AutoCAD中,VBA和AutoCAD中强大的Activex自动化对象模型的结合,代表了一种新型的定制AutoCAD的模式构架。通过VBA,我们可以操作AutoCAD2004,控制ActiveX和其它一些应用程序,使之相互之间发生互易活动下面就是VBA的主要功能: (1)VBA提供强大的窗体创建功能,为应用程序建立对话框及其他屏幕界面。 (2)可以创建自己的工具条。 (3)可以创建功能强大的模块级宏指令,宏名实质上就是模块的过程名。 (4)提供建立类模块的功能,这对开发大型工程非常有用,因此类可以提供重用组。 (5)具备完善的数据访问和管理能力,通过ADO(ActivexData Objects),可以对Access数据库或其他外部数据库(像dBase,FoxPro等)实现访问和管理。此功能比直接使用AutoCAD的数据库管理系统要方便,且功能强大。 2.2 VBA AutoCAD ActiveX Automation对象模型 VBA是通过AutoCAD ActiveX Automation接口来建立和AutoCAD对象问的联系。ActiveX是建立在COM对象模型之上的一个标准通信协议,它允许对象之间通过一定的接口相互通信。

.NET4.0 用户控件的概述

https://www.360docs.net/doc/2c2617554.html,4.0 用户控件的概述 用户控件是页面的一段,包含了静态HTML代码和服务器控件。其优点在于一旦创建了一个用户控件,可以在同一个应用的多个页面中重用。并且,用户可以在Web用户控件中,添加该控件的属性、事件和方法。 1.什么是用户控件 用户控件(后缀名为.ascx)文件与https://www.360docs.net/doc/2c2617554.html,网页窗体(后缀名为.aspx)文件相似。就像网页窗体一样,用户控件由用户接口部分和控制标记组成,而且可以使用嵌入脚本或者.cs代码后置文件。用户控件能够包含网页所能包含的任何东西,包括静态HTML内容和https://www.360docs.net/doc/2c2617554.html,控件,它们也作为页面对象(Page Object)接收同样的事件(如Load和PreRender),也能够通过属性(如Application,Session,Request 和Response)来展示https://www.360docs.net/doc/2c2617554.html,内建对象。 用户控件使程序员能够很容易地跨Web应用程序划分和重复使用公共UI功能。与窗体页相同,用户可以使用任何文本编辑器创作用户控件,或者使用代码隐藏类开发用户控件。 此外,用户控件可以在第一次请求时被编译并存储在服务器内存中,从而缩短以后请求的响应时间。与服务器端包含文件(SSI)相比,用户控件通过访问由https://www.360docs.net/doc/2c2617554.html,提供的对象模型支持,使程序员具有更大的灵活性。程序员可以对在控件中声明的任何属性进行编程,而不只是包含其他文件提供的功能,这与其他任何https://www.360docs.net/doc/2c2617554.html,服务器控件一样。 此外,可以独立于包含用户控件的窗体页中除该控件以外的部分来缓存该控件的输出。这一技术称作片段缓存,适当地使用该技术能够提高站点的性能。例如,如果用户控件包含提出数据库请求的https://www.360docs.net/doc/2c2617554.html,服务器控件,但该页的其余部分只包含文本和在服务器上运行的简单代码,则程序员可以对用户控件执行片段缓存,以改进应用程序的性能。 用户控件与普通网页页面的区别是: ●用户控件开始于控件指令而不是页面指令。 ●用户控件的文件后缀是.ascx,而不是.aspx。它的后置代码文件继承于 https://www.360docs.net/doc/2c2617554.html,erControl类.事实上,UserControl类和Page类都继承于同一个 TemplateControl类,所有它们能够共享很多相同的方法和事件。 ●没有@Page指令,而是包含@Control指令,该指令对配置及其他属性进行定义。 ●用户控件不能被客户端直接访问,不能作为独立文件运行,而必须像处理任何控件一 样,将它们添加到https://www.360docs.net/doc/2c2617554.html,页中。 ●用户控件没有html、body、form元素,但同样可以在用户控件上使用HTML元素和 Web控件。 用户可以将常用的内容或者控件以及控件的运行程序逻辑,设计为用户控件,

a于ANSYS二次开发的管系结构应力分析系统

万方数据

第3期张庆峰等:基于ANSYS二次开发的管系结构应力分析系统—-79—.大,计算结果可靠。但它要求使用者具有一定的有限元知识背简单。 景,并同时具有较强专业知识水平、较强的结构分析能力和扎实 的英语基础。鉴于上述特点,使其对压力管系的有限元分析不 具有针对性。复杂的英文界面和繁琐的分析步骤都给从事压力 管系有限元分析的技术人员造成了很大的障碍。因此,基于这 些不便因素,为适用不同层次的用户使用,利用ANSYS内部提 供的二次开发工具。把ANSYS作为结构分析工具,建立了特别 适用于结构应力分析的中文界面环境、菜单和工具杆的管系结 构分析系统模块。此模块以向导的方式来进行每一步骤,各步 骤附有帮助文件,充分体现了专业化、用户化、便捷化的特点。 如图1所示。 图3管系图 图1绘制管系图 4应用实例 利用在役压力管道系统的应力分析模块对某厂核反应器再循环装置管线进行应力分析,如图2所示。 图2核反应器再循环装置回路管线图 4.1核反应器再循环装置回路管线概况 下面是一个应用该软件对在役核压力回路管线进行应力结构分析的简例。如图3所示,假定核反应器再循环装置的回路管线中发现了二处裂纹。这些裂纹可能是由于在生产或制造过程没有操作经验或某种晶间应力腐蚀所引起的。这两个裂纹,①和②,存在于旁路与核反应再循环装置回路管线主管路相连的焊接部位,它们可认为是复合缺陷。旁路管线的内径是282mm,主管路的内径是450ram,厚度是31.76mm。这些管路和弯管是SA333GR6型材料,弹性模量是188GPa。 4.2管系的结构分析 借助ANSYS的二次开发功能,在开发“含缺陷压力管系风险分析系统”时。在结构应力分析模块中,选择了国际著名的ANSYS有限元分析软件作为结构应力分析工具,并为适用不同层次的用户的需要,针对ANSYS的管路系统模块的特征,对ANSYS进行了二次开发,建立了专用程序的同时建立起对应的图形驱动界面,使得前处理建模、计算和后处理操作等变得十分 图4管系应力分布云图 5结论 通过开发以ANSYS为平台的管系应力分析系统,证实了运用ANSYS内部提供的APDL语言和UIDL语言进行开发专业模块的可行性,并且达到了界面简洁、易操作的预期功能。 利用建立在ANSYS二次开发基础上强大的管道结构应力分析模块,可以在制定管道的检修计划时,方便地确定出管道高度应集中部位,有针对性地选择焊缝并进行射线探伤,使管线的安全状况分析更加准确。有针对性地选择焊缝并进行射线探伤,使得管道的安全状况分析更为准确。同时,也可以利用该系统为分析工具,制定出旨在降低失效风险的管道结构改进措施,优化管道结构。以较低的成本提高管道的完整性水平。 因此,该系统的推广应用,对提高企业的压力管道管理水平,保障安全生产和技术进步具有重要意义。 参考文献 1ANSYSAPDLProgrammer’sGuideRelease5.5.ANSYS。Ine. 2TheUIDLProgrammer’sGuideRelease5.5.ANSYS.Ine. 3谢禹钧,蔺永诚,等.含缺陷压力关系失效风险分析系统(I)【J】.石油化工设备,2002,31(4):4—6. 4谢禹钧,蔺永诚等.含缺陷压力关系失效风险分析系统(n)【J】.石油化工设备,2002,31(5):4~6. 5程进,江见鲸等.基于ANSYS的程序界面设计及应用。四川建筑科学研究。2002,28. 6沈士明,在役压力管道安全评定研究的现状与发展。中国机械工程。 1997.8. 7APDL参数化有限元分析技术及其应用实例,中国水利水电出版社, 2003. 万方数据

ADAMS二次开发及实例

第11章ADAMS二次开发及实例 ADAMS具有很强的二次开发功能,包括ADAMS/View界面的用户化设计,利用cmd语言实现自动建模和仿真控制,通过编制用户子程序满足用户的某些特定需求,甚至可以拓展ADAMS的功能。 本章主要介绍如何定制用户化界面、宏命令的用法和条件循环命令的用法,以及综合以上功能的应用实例。由于用户子程序的主要内容已在第9章进行了详细介绍,因此本章只对所涉及到的用户子程序编译联接操作过程进行简单介绍。 11.1 定制用户界面 ADAMS/View的界面对象都是以层次结构存储在模型数据库中,类似于零件模型的层次结构。所有定制的界面对象都存储在名为GUI的数据库中,该数据库可以很方便地管理所有的标准界面对象。如图11-1所示。

图11-1 界面对象的层次结构 最上层的界面对象是窗口和对话框。如果主要建模窗口起名为main的话,其数据库全名应为.gui.main。 尽管窗口和对话框看起来很相似,但它们却是很不相同的。窗口通常是在用户工作的时候在屏幕上停留一段时间,而对话框通常是在用户输入数据或是进行访问控制时才会出现。窗口有工具条和菜单栏,窗口和对话框也包含其他的界面对象如按钮,标签等等。 大多数用户化操作涉及到创建对话框或者修改标准对话框。但若不用创建一个完整的用户化界面时,则通常只用修改菜单条和工具栏。

ADAMS所包含界面对象属性如表11-1所示。

在大多数情况下,用户定制界面是指制作用户自己的菜单和对话框。

通常可使用菜单编辑器和对话框编辑器来定制界面,通过它们可以很快地访问并改变大多数界面对象和功能。下面就这两方面的内容作简单介绍。11.1.1 定制菜单 1。菜单编辑器 通过以下菜单路径可以调出菜单编辑器窗口: Main menu==》Tools==》Menu==》Modify…… 菜单编辑器窗口如图11-2所示: 图11-2 菜单编辑窗口 在菜单编辑器窗口中显示的是ADAMS菜单文件,菜单文件是按照一定的语法书写的解释性程序文件,在默认情况下,菜单编辑器窗口里显示的是描述ADAMS标准菜单的菜单文件,通过按照一定的语法规则修改该菜

C# 自定义控件制作和使用实例

C# 自定义控件制作和使用实例 第一步:新建一个控件库项目:myControl 第二步:从工具箱里面拖动1个PictureBox、1个Button、6个Lable控件到用户界面上,布局如下: 如上图,设置pictureBox的Name为picBox,背景为白色,Button的Name为btnOpen,

另外靠左的三个Lable的Text属性分别为:文件名称,文件大小,文件尺寸,靠右的三个Lable的Name分别为:lblName, lblLength, lblSize. 第三步:添加处理程序代码 在btnOpen的Click事件写入代码,打开一个打开文件对话框,选择一个图形文件,打开并将它显示在picBox上。 private void btnOpen_Click(object sender, EventArgs e) { OpenFileDialog ofdPic = new OpenFileDialog(); ofdPic.Filter = "JPG(*.JPG;*.JPEG);gif文件(*.GIF)|*.jpg;*.jpeg;*.gif"; ofdPic.FilterIndex = 1; ofdPic.RestoreDirectory = true; ofdPic.FileName = ""; if (ofdPic.ShowDialog() == DialogResult.OK) { string sPicPaht = ofdPic.FileName.ToString(); FileInfo fiPicInfo = new FileInfo(sPicPaht); long lPicLong = fiPicInfo.Length / 1024; string sPicName = https://www.360docs.net/doc/2c2617554.html,; string sPicDirectory = fiPicInfo.Directory.ToString(); string sPicDirectoryPath = fiPicInfo.DirectoryName; Bitmap bmPic = new Bitmap(sPicPaht); if (lPicLong > 400) { MessageBox.Show("此文件大小為" + lPicLong + "K;已超過最大限制的K范圍!"); } else { Point ptLoction = new Point(bmPic.Size); if (ptLoction.X > picBox.Size.Width || ptLoction.Y > picBox.Size.Height) { picBox.SizeMode = PictureBoxSizeMode.Zoom; } else { picBox.SizeMode = PictureBoxSizeMode.CenterImage; } } picBox.LoadAsync(sPicPaht); lblName.Text = sPicName; lblLength.Text = lPicLong.ToString() + " KB"; lblSize.Text = bmPic.Size.Width.ToString() + "×" + bmPic.Size.Height.ToString(); }

ansys二次开发及实例

ansys二次开发教程+实例 第3章ANSYS基于VC++6.0的二次开发与相互作用分析在ANSYS中的实现 3.1 概述 ANSYS是一套功能十分强大的有限元分析软件,能实现多场及多场耦合分析;是实现前后处理、求解及多场分析统一数据库的 一体化大型FEA软件;支持异种、异构平台的网络浮动,在异种、异构平台上用户界面统一、数据文件全部兼容,强大的并行计算功能 支持分布式并行及共享内存式并行。该软件具有如下特点: (1) 完备的前处理功能 ANSYS不仅提供了强大的实体建模及网格划分工具,可以方便地构造数学模型,而且还专门设有用户所熟悉的一些大型通用有 限元软件的数据接口(如MSC/NSSTRAN,ALGOR,ABAQUS等),并允许从这些程序中读取有限元模型数据,甚至材料特性和边 界条件,完成ANSYS中的初步建模工作。此外,ANSYS还具有近200种单元类型,这些丰富的单元特性能使用户方便而准确地构建出 反映实际结构的仿真计算模型。 (2) 强大的求解器 ANSYS提供了对各种物理场量的分析,是目前唯一能融结构、热、电磁、流体、声学等为一体的有限元软件。除了常规的线性、 非线性结构静力、动力分析外,还可以解决高度非线性结构的动力分析、结构非线性及非线性屈曲分析。提供的多种求解器分别适用于 不同的问题及不同的硬件配置。 (3) 方便的后处理器 ANSYS的后处理分为通用后处理模块(POST1)和时间历程后处理模块(POST26)两部分。后处理结果可能包括位移、温度、应力、应变、速度以及热流等,输出形式可以有图形显示和数据列表两种。 (4) 多种实用的二次开发工具 ANSYS除了具有较为完善的分析功能外,同时还为用户进行二次开发提供了多种实用工具。如宏(Marco)、参数设计语言(APDL)、用户界面设计语言(UIDL)及用户编程特性(UPFs),其中APDL(ANSYS Parametric Design Language)是一种非常类似于Fortran77的参数化设计解释性语言,其核心内容为宏、参数、循环命令和条件语句,可以通过建立参数化模型来自动完成一些通用性强的任务;UIDL(User Interf ace Design Language)是ANSYS为用户提供专门进行程序界面设计的语言,允许用户改变ANSYS的图形用户界面(GUI)中的一些组项,提供了一种允许用户灵活使用、按个人喜好来组织设计ANSYS图形用户界面的强有力工具;UPFs(User Programmable Features)提供了一套Fortran77函数和例程以扩展或修改程序的功能,该项技术充分显示了ANSYS的开放体系,用户 不仅可以采用它将ANSYS程序剪裁成符合自己所需的任何组织形式(如可以定义一种新的材料,一个新的单元或者给出一种新的屈服 准则),而且还可以编写自己的优化算法,通过将整个ANSYS作为一个子程序调用的方式实现。 鉴于上述特点,近几年来,ANSYS软件在国内外工程建设和科学研究中得到了广泛的应用。但这些应用大多局限于直接运用ANSYS软件进行实际工程分析,对利用ANSYS提供的二次开发工具进行有限元软件设计却很少涉及。本文首次利用ANSYS软件的二次开发功能,以VC++6.0为工具,运用APDL语言,对ANSYS进行二次开发,编制框筒结构-桩筏基础-土相互作用体系与地震反应分析程序。 3.2 程序设计目标 针对某一实际工程问题,ANSYS所提供的APDL语言可对ANSYS软件进行封装。APDL语言即ANSYS软件提供的参数化设计 语言,它的全称是ANSYS Parametric Design Language。使用APD L语言可以更加有效地进行分析计算,可以轻松地进行自动化工作(循环、分支、宏等结构),而且,它是一种高效的参数化建模手段。使用APDL语言进行封装的系统可以只要求操作人员输入前处理 参数,然后自动运行ANSYS进行求解。但完全用APDL编写的宏还存在弱点。比如用APDL语言较难控制程序的进程,虽然它提供了 循环语句和条件判断语句,但总的来说还是难以用来编写结构清晰的程序。它虽然提供了参数的界面输入,但功能还不是太强,交互性 不够流畅。针对这种情况,本文用VC++6.0开发框筒结构-桩筏基础-土相互作用有限元分析程序(简称LW S程序)。

ProE_二次开发入门实例

ProE二次开发入门实例 1. 创建项目 这个就不用多说了吧,新建-> 项目->C++->MFC DLL 2. 项目配置 这个可以参考我以前的一篇文章:P⑹ENGINEER的二次开发(5)-Vc环境配置 3. 初始化菜单文件 在这里,先创建一个菜单,作为演示,: (1)在住文件添加Pro/TOOLKIT 头文件。由于在后面的操作中,都要用到这些头文件,故将头文件放到stdafx.h 文件中。77777777777777777777777777777777777777777777777777777777777777777777777777 ⑵添加Pro/TOOLKIT 程序的初始化函数和终止函数,

return TRUE : } … 『 extern int uier_initi alii e fint j char* 』char* j char* * v char_t 电rrbnf [so ]) r eturia. L ; 】 初始化函数 t 匸L X' r?id e 终止函数 ⑶创建一个窗体:右键单击解决方案的资源文件,然后点击添加Dialog,如图: ms? 零 Accelerator S§ Bitmap Sfe Cursor S HTML FJ Icon 自 M@nu *fc Strrg Tatile 到到 Toolbar Ol \ ersion 蜀 Resource.h ? stdafx.h g zenun,h 3 TestDelg.h □ 资潺立件 3 zenun.rc 31 zeraun.rc? IS ReadMe.txt 刀解"??丨马类…国熒… 3. (4)添加一个按钮,然后双击添加类向导,创建CTestDialog 类,然后再窗体中添加一个按钮,做测试之用,如图: ar gc argw[] versi on b^ili

C#自定义控件开发

自定义控件开发 一般而言,Visual Studio 2005中自带的几十种控件已经足够我们使用了,但是,在一些特殊的需求中,可能需要一些特殊的控件来与用户进行交互,这时,就需要我们自己开发新的、满足用户需求的控件。(源码网整理:https://www.360docs.net/doc/2c2617554.html,) 要开发自己的控件,有几种方法: ?复合控件(Composite Controls):将现有的各种控件组合起来,形成一个新的控件,来满足用户的需求。 ?扩展控件(Extended Controls):就是在现有的控件基础上,派生出一个新的控件,增加新的功能,或者修改原有功能,来满足用户需求。 ?自定义控件(Custom Controls):就是直接从System.Windows.Forms.Control 类派生,也就是说完全由自己来设计、实现一个全新的控件,这是最灵活、最强大的方法,但是,对开发者的要求也是最高的。要实现一个自定义控件,必须为Control类的的OnPaint事件编写代码,在OnPaint事件中实现自定义控件的绘制工作。同时,还可以重写Control类的WndProc方法,来处理底层的Windows消息。所以说,要实现一个自定义控件,对开发者的要求较高,要求开发者必须了解GDI+和Windows API的知识。 下面我们就分别给大家介绍这三种方法。 ?复合控件(Composite Controls) 复合控件实际上是控件的集合,类似于堆积木。因此,可以按照用户的需求,把VS 2005工具箱中的控件任意组合起来,形成一个复合控件。在以后使用中,将生成的这个复合控件作为一个控件来对待。 复合控件一般都是从UserControl类派生而来,因此复合控件(用户控件)可以在“UserControl测试容器”中进行测试。 复合控件的创建步骤: 第一步:新建一个Windows控件库项目“CompositeControlDemo”

ANSYS模拟大体积混凝土浇筑过程的参数分析_赵英菊

1.ANSYS分析的原理和步骤 ANSYS的热分析[1]包括稳态和瞬态两种,如果系统的温度场与时间无关,则称该系统处于稳定的热状态,简称稳态;如果系统的温度场随时间发生变化,则称系统处于瞬态。显然,大体积混凝土的浇筑过程属于瞬态分析,也属于非线性分析。 我们不仅要进行混凝土温度场的模拟还要进行应力场的模拟,所以要用到ANSYS中耦合分析,ANSYS提供了两种分析耦合场的方法:直接耦合与间接耦合。 直接耦合法的耦合单元包含所有必须的自由度,仅仅通过一次求解就能得出耦合场分析结果;间接耦合法是以特定的顺序求解单个物理场的模型,通过把第一次场分析的结果作为第二次场分析的载荷来实现两种场的耦合。如我们用到的热-应力耦合分析就是将热分析得到的节点温度作为载荷施加在后序的应力分析中来实现耦合的。基本步骤如下: 第一步:进行热分析,可选择SOLID70单元; 第二步:重新进入前处理器,转换单元类型;将热单元转换为相应的结构单元,原来的SOLID70单元将自动转换为SOLID45单元,其对应的命令是ETCHG,TTS。 第三步:设置结构分析中的材料属性; 第四步:读入热分析结果并将其作为载荷;可采用命令LDREAD读入热分析的节点温度,或点击MainMenu>Solution>LoadApply>Temperature>FromThermalAnalysis。注意,结果文件的扩展名为*.rth。 第五步:指定参考温度;在参考温度处,热应力值为零。 第六步:求解及后处理。 2.温度场的求解 2.1三种基本传热方式 (1)热传导,遵循傅里叶定律(导热基本定律):q″=-λdT dx ,式中q″为热流密度(W/m2),λ为导热系数(W/m?℃),“-”表示热量流向温度降低的方向。 (2)热对流,用牛顿冷却方程来描述:q″=β(TS-TB),式中β为对流换热系数,TS为固体表面的温度,TB为周围流体的温度。 (3)热辐射,指物体发射电磁能,并被其它物体吸收转变为热的热量交换过程。 2.2边界条件 (1)第一类边界条件是指混凝土表面温度T是时间τ的已知函数,即 T(x,y,z,τ)=Tb(τ) (2)第二类边界条件是指混凝土表面的热流量是时间的已知函数,即 -λ$T $n =T′(τ) 式中λ—— —导热系数,W/m?℃或kJ/m?h?℃,W/m?℃=3.6kJ/m?h?℃; n—— —表面外法线方向,若表面是绝热的,有:$T $n =0。 (3)第三类边界条件假定经过混凝土表面的热流量与混凝土表面温度T和气温Ta之差成正比,即 -λ$T $n =β(T-Ta) 式中β—— —表面放热系数,也称对流系数,W/m2?℃。其数值与风速va(m/s)有密切的关系,固体表面在空气中的放热系数可用以下两式计算,单位是kJ/m2?h?℃。 粗糙表面:β=23.9+14.50va(1)光滑表面:β=21.8+13.53va(2)当有模板和保温层时,可按下式计算:β=1 ∑ δ i λ i +1 β q (3)式中δi—— —各种保温材料的厚度(m); λi—— —各种保温材料的导热系数(W/m?K),可按表1取值[2]; βq—— —空气的传热系数,可取23(W/m2?K)。 表1各种保温材料的导热系数λ值(W/m?K) (4)当两种条件不同的固体接触时,如接触良好,则在接触面上温度和热流量都是连续的,即T1=T2,λ1( !T 1 !n )=λ2(!T2 !n )。 混凝土与空气接触(包括有养护条件)的边界可按照第三类边界条件处理: NSEL,,,!选择与空气接触的表面节点 SF,ALL,CONV,β,Tair,!加载表面散热系数和环境温度 混凝土与地基或基岩的边界可以按照第四类边界条件处理,通过定义两种材料的导热系数和初始温度即可。 2.3热学参数取值基本参数较容易获得,也可参考下表: 表2材料的基本热学参数 2.3.1水化热的施加在ANSYS中,混凝土的水化热是通过生热率HGEN来施加的。顾名思义,生热率就是单位时间内混凝土的生热量,即所产生的热量对时间的导数,用表达式表示为: hgen=dQ dt (4)式中:Q—— —混凝土中产生的热量; hgen—— —混凝土生热率。 混凝土的水化热放热过程与混凝土的绝热温升过程具有一致性,若取指数经验式: ANSYS模拟大体积混凝土浇筑过程的参数分析 赵英菊王社良康宁娟 (西安建筑科技大学土木工程学院陕西西安710055) 摘要:建筑工程中的大体积混凝土结构越来越多,利用有限元程序ANSYS进行施工过程的模拟仿真可以形象地给出温度场和应力场的分布情况,同时能考虑各参数随时间的变化。时变参数的选取及其在程序中的实现是仿真分析中的重点和难点,特总结归纳,并给出解决的方法供参考。 关键词:ANSYS;混凝土;浇筑;时变参数 材料名称λ材料名称λ 木模0.23黏土砖0.43 钢模58油毡0.05 草袋0.14沥青矿棉0.09~0.12 木屑0.17沥青玻璃棉毡0.05 矿渣0.47泡沫塑料制品0.03~0.05 黏土1.38~1.47泡沫混凝土0.10 干砂0.33水0.58 湿砂1.31空气0.03 名称数值单位名称数值单位 混凝土的密度2400kg/m3混凝土的导热系数2.710W/m?℃ 土壤的密度1750kg/m3土壤的导热系数0.586W/m?℃ 混凝土的比热0.963kJ/kg?℃混凝土的线膨胀系数10×10-6℃ 土壤的比热1.005kJ/kg?℃混凝土的导温系数0.0042m2/h96

泛微OA-ecology-二次开发实例-开发完整说明

二次开发培训文档 一、ECOLOGY系统框架结构 1、主要的程序结构 Ecology Classbean 存放编译后的CLASS文件 js 系统中使用的JA VASCRIPT和VBSCRIPT脚本 Css 系统中JSP页面使用的样式 Images Images_face Images_frame 系统中使用的图片的存放目录 Crm Workflow 该功能分文件夹存放每个功能的文件 WEB-INF Prop 系统配置文件存放 Service 系统的接口配置文件的存放 二、说明一个JSP页面,一个JA VA程序的基本组成,如何阅读JSP页面 1、一个jsp页面通常需要包含什么内容 2、如何阅读一个JSP页面 由于ECOLOGY系统支持多语言,因此在JSP页面上一般不出现中文,全部使用标签的形式来显示中文: 比如:在IE上显示“姓名”那么在JSP页面中将通过 <%=SystemEnv.getHtmlLabelName(413,user.getLanguage())%>这样的形式来表示,其中的数字413就是表示姓名,同时可以通过“select labelname from htmllabelinfo where indexid=413 and languageid=7”来获取到“姓名”这个显示名称,其中languageid=7表示中文显示名称,languageid=8表示英文显示名称. delete from HtmlLabelIndex where id=81249 delete from HtmlLabelInfo where indexid=81249 INSERT INTO HtmlLabelIndex values(81249,'选择范围') INSERT INTO HtmlLabelInfo VALUES(81249,'选择范围',7) INSERT INTO HtmlLabelInfo VALUES(81249,'Range of choice',8) INSERT INTO HtmlLabelInfo VALUES(81249,'選擇範圍',9) 3、JA VA程序的基本组成 在ECOLOGY中开发JA VA程序建议继承weaver.general. BaseBean,在BaseBean中主要封装了两个方法:写日志文件,获取配置文件中的参数值。 public String getPropValue(String fname , String key)

C#自定义控件实现控件随窗口大小改变

1.新建用户控件,取名MyForm。 2.将默认的UserControl改成Form 3.在类中添加以下代码 private float X, Y; //获得控件的长度、宽度、位置、字体大小的数据 private void setTag(Control cons)//Control类,定义控件的基类 { foreach (Control con in cons.Controls) { con.Tag = con.Width + ":"+ con.Height + ":"+ con.Left + ":"+ con.Top + ":" + con.Font.Size;//获取或设置包含有关控件的数据的对象

if (con.Controls.Count > 0) setTag(con);//递归算法 } } private void setControls(float newx, float newy, Control cons)//实现控件以及字体的缩放 { foreach (Control con in cons.Controls) { string[] mytag = con.Tag.ToString().Split(new char[] { ':' }); float a = Convert.ToSingle(mytag[0]) * newx; con.Width = (int)a; a = Convert.ToSingle(mytag[1]) * newy; con.Height = (int)(a); a = Convert.ToSingle(mytag[2]) * newx; con.Left = (int)(a); a = Convert.ToSingle(mytag[3]) * newy; con.Top = (int)(a); Single currentSize = Convert.ToSingle(mytag[4]) * newy; con.Font = new Font(https://www.360docs.net/doc/2c2617554.html,, currentSize, con.Font.Style, con.Font.Unit); if (con.Controls.Count > 0) { setControls(newx, newy, con);//递归 } } } private void MyForm_Resize(object sender, EventArgs e) { float newx = (this.Width) / X;//当前宽度与变化前宽度之比 float newy = this.Height / Y;//当前高度与变化前宽度之比 setControls(newx, newy, this); this.Text = this.Width.ToString() + ""+ this.Height.ToString(); //窗体标题显示长度和宽度

附代码基于C 的ANSYS二次开发

ansys二次开发 1概述 ANSYS是一套功能十分强大的有限元分析软件,能实现多场及多场耦合分析;是实现前后处理、求解及多场分析统一数据库的一体化大型FEA软件;支持异种、异构平台的网络浮动,在异种、异构平台上用户界面统一、数据文件全部兼容,强大的并行计算功能支持分布式并行及共享内存式并行。该软件具有如下特点:(1)完备的前处理功能 ANSYS不仅提供了强大的实体建模及网格划分工具,可以方便地构造数学模型,而且还专门设有用户所熟悉的一些大型通用有限元软件的数据接口(如MSC/NSSTRAN,ALGOR,ABAQUS等),并允许从这些程序中读取有限元模型数据,甚至材料特性和边界条件,完成ANSYS中的初步建模工作。此外,ANSYS还具有近200种单元类型,这些丰富的单元特性能使用户方便而准确地构建出反映实际结构的仿真计算模型。 (2)强大的求解器 ANSYS提供了对各种物理场量的分析,是目前唯一能融结构、热、电磁、流体、声学等为一体的有限元软件。除了常规的线性、非线性结构静力、动力分析外,还可以解决高度非线性结构的动力分析、结构非线性及非线性屈曲分析。提供的多种求解器分别适用于不同的问题及不同的硬件配置。 (3)方便的后处理器 ANSYS的后处理分为通用后处理模块(POST1)和时间历程后处理模块(POST26)两部分。后处理结果可能包括位移、温度、应力、应变、速度以及热流等,输出形式可以有图形显示和数据列表两种。 (4)多种实用的二次开发工具 ANSYS除了具有较为完善的分析功能外,同时还为用户进行二次开发提供了多种实用工具。如宏(Marco)、参数设计语言(APDL)、用户界面设计语言(UIDL)及用户编程特性(UPFs),其中APDL(ANSYS Parametric Design Language)是一种非常类似于Fortran77的参数化设计解释性语言,其核心内容为宏、参数、循环命令和条件语句,可以通过建立参数化模型来自动完成一些通用性强的任务;UIDL(User Interface Design Language)是ANSYS为用户提供专门进行程序界面设计的语言,允许用户改变ANSYS的图形用户界面(GUI)中的一些组项,提供了一种允许用户灵活使用、按个人喜好来组织设计ANSYS图形用户界面的强有力工具;UPFs(User Programmable Features)提供了一套Fortran77函数和例程以扩展或修改程序的功能,该项技术充分显示了ANSYS的开放体系,用户不仅可以采用它将ANSYS程序剪裁成符合自己所需的任何组织形式(如可以定义一种新的材料,一个新的单元或者给出一种新的屈服准则),而且还可以编写自己的优化算法,通过将整个ANSYS作为一个子程序调用的方式实现。 鉴于上述特点,近几年来,ANSYS软件在国内外工程建设和科学研究中得到了广泛的应用。但这些应用大多局限于直接运用ANSYS软件进行实际工程分析,对利用ANSYS提供的二次开发工具进行有限元软件设计却很少涉及。本文首次利用ANSYS软件的二次开发功能,以VC++6.0为工具,运用APDL语言,对ANSYS进行二次开发,编制框筒结构-桩筏基础-土相互作用体系与地震反应分析程序。2程序设计目标 针对某一实际工程问题,ANSYS所提供的APDL语言可对ANSYS软件进行封装。APDL语言即ANSYS软件提供的参数化设计语言,它的全称是ANSYS Parametric

caxa二次开发例子代码

#include "stdafx.h" #include "eb_api.h" // CAXA EB API 函数 #include "resource.h" void dymGenTwoPtLine1(int& step,int& flag); // 两点线方法1 void dymGenTwoPtLine2(int& step,int& flag); // 两点线方法2 int usrAppendDraw(int& step,int& flag) { AFX_MANAGE_STATE(AfxGetStaticModuleState()) static int c hoice=0; // 注意这里一定要用静态(static)来声明用于纪录选择结果的变量!!! if(step==0) // 第一步 { ebClearMenu(); // 清理立即菜单区 ebGetMenuChoiceBrk("两点线(方法1)@两点线(方法2)",&choice); //弹出立即菜单项 ebRegisterPopMenu(); // 登记工具点菜单 } // 根据选择要绘制线的类型来执行相应的函数 switch(choice) { case 0: dymGenTwoPtLine1(step,flag); break; case 1: dymGenTwoPtLine2(step,flag); break; default: break; } return RT_NORMAL; } /* 用第一种方法绘制两点线,这种方法是建立临时直线节点,通过绘制 结点的办法来实现拖动效果,使用这种方法具有一定的通用性,可推 广到绘制块、箭头、文字等复杂图形,但要特别注意的一点是,为了 避免内存泄漏,当绘制完成或取消操作时应该及时使用ebFreeNode函 数释放掉临时结点,这点非常重要!!!

C#创建用户控件

演练:使用Visual C# 创作用户控件 Visual Studio .NET 2003 用户控件提供了一种创建和重用自定义图形界面的方法。用户控件本质上是具有可视化表示形式的组件。因此,它可能包含一个或多个Windows 窗体控件、组件或代码块,它们能够通过验证用户输入、修改显示属性或执行作者所需的其他任务来扩展功能。可以按照与其他控件相同的方式,将用户控件置于Windows 窗体中。在本演练的第一部分,创建一个名为ctlClock 的简单用户控件。在本演练的第二部分通过继承扩展ctlClock 的功能。 创建项目 创建新的项目时应指定其名称,以设置根命名空间、程序集名称和项目名称,并确保默认组件将位于正确的命名空间中。 创建ctlClockLib 控件库和ctlClock 控件 1.在“文件”菜单上,指向“新建”,然后选择“项目”以打开“新建项目”对话框。 2.从“C# 项目”列表中选择“Windows 控件库”项目模板,然后在“名称”框中键入ctlClockLib。 注意“Windows 控件库”模板在Visual C# .NET 的标准版中不可用。有关更多信息,请参 见Visual C# 标准版的功能。 默认情况下,项目名称ctlClockLib也被分配到根命名空间中。根命名空间用于限定程序集中的组件名。例如,如果两个程序集都提供名为ctlClock 的组件,则可以使用 ctlClockLib.ctlClock指定ctlClock 组件。在解决方案资源管理器中,右击 “UserControl1”并从快捷菜单中选择“查看代码”。 3.找到Class语句public class UserControl1,将UserControl1更改为ctlClock 以更改组件的名称。 注意默认情况下,用户控件从系统提供的UserControl类继承。UserControl类提供所 有用户控件要求的功能,并实现标准方法和属性。 4.找到构造函数public UserControl1(),将UserControl1 更改为ctlClock。 5.在解决方案资源管理器中,单击“UserControl1”,然后在“属性”窗口中,将FileName属性 更改为ctlClock.cs。 6.从“文件”菜单中,选择“全部保存”来保存项目。 将Windows 控件和组件添加到用户控件

基于Python的Abaqus二次开发实例讲解

基于Python的Abaqus二次开发实例讲解 (asian58 2013.6.26) 基于Python的Abaqus的二次开发便捷之处在于: 1、所有的代码均可以先在Abaqus\CAE中操作一遍后再通过rp文件读取,然后再在此基础上进行相应的修改; 2、Python是一种解释性语言,读起来非常清晰,因此在修改程序的过程中,不存在程序难以理解的问题; 3、Python是一种通用性的、功能非常强大的面向对象编程语言,有许多成熟的类似于Matlab函数的程序在网络上流传,为后期进一步的数据处理提供了方便。 为了更加方便地完成Abaqus的二次开发,需进行一些相关约定: 1、所有参数化直接通过点的坐标值进行,直接对几何尺寸的参数化反而更加繁琐; 2、程序参数化已不允许在模型中添加太多的Tie,因此不同零部件的绑定直接通过共节点来进行,这就要求建模方法与常规的建模方法有所区别。思路如下: 将一个整机拆成几个大的Part来建立,一个Part中包含许多零件,这样在划分网格式时就可以自动实现共节点的绑定。不同的零件可通过建立不同的Set来进行区分,不同Part 的绑定可以通过Tie来实现。将一个复杂的结构拆成几个恰当的Part来建立,一方面可以将复杂的模型简单化,使建立复杂模型成为可能;另一方面,不同的Part可单独调用,从而又可实现程序的模块化,增加程序的适应范围,延长程序的使用寿命,也方便后期程序的维护和修改。 3、通过py文件建立起的模型要进行参数优化,已不适合采用Isight中Abaqus模块,需要用到Isight的Simcode模块。 下面详细解释一个臂架的py文件。 #此程序用来绘制臂架前段 #导入相关模块 # -*- coding: mbcs -*- from abaqus import * from abaqusConstants import * #定义整个臂架的长、宽、高 L0=14300 W0=1650 H0=800

相关文档
最新文档