caxa二次开发例子代码

合集下载

CADCAM软件二次开发实验教案

CADCAM软件二次开发实验教案

实验一菜单及工具条制作(2学时)一、实验内容1.制作下图所示的标准件菜单;2.将上述菜单的第三级按钮制作成三个工具栏。

工具条按钮如下:二、实验目的1.掌握UG软件中菜单的创建,可以根据需要建立相应的菜单条;2.掌握UG软件中工具栏的创建,可以根据需要建立相应的工具栏。

三、实验器材计算机1台,UG程序1套。

四、实验原理根据UG中菜单及工具栏制作的方法进行菜单及工具栏制作。

五、实验步骤(详细撰写)1.写出菜单文件;2.写出工具栏文件;3.写出UG系统文件的设置方法。

六、实验过程1.在环境变量中添加,路径可以不同2.建立文件夹C:\TEST\STARTUP,路径可以不同3.菜单文件VERSION 120EDIT UG_GATEWAY_MAIN_MENUBARBEFORE UG_HELPCASCADE_BUTTON UG_M1LABEL 标准件END_OF_BEFOREMENU UG_M1CASCADE_BUTTON UG_M1_1LABEL 螺钉CASCADE_BUTTON UG_M1_2LABEL 轴承CASCADE_BUTTON UG_M1_3LABEL 螺母END_OF_MENUMENU UG_M1_1BUTTON UG_M1_1_1LABEL 圆柱头螺钉BUTTON UG_M1_1_2LABEL 紧定螺钉BUTTON UG_M1_1_3LABEL 十字槽螺钉END_OF_MENUMENU UG_M1_2BUTTON UG_M1_2_1LABEL 向心球轴承BUTTON UG_M1_2_2LABEL 圆柱滚子轴承BUTTON UG_M1_2_3LABEL 推力球轴承END_OF_MENUMENU UG_M1_3BUTTON UG_M1_3_1LABEL 六角螺母BUTTON UG_M1_3_2LABEL 六角锁紧螺母BUTTON UG_M1_3_3LABEL 圆螺母4.END_OF_MENU工具栏文件1)螺钉工具栏文件TITLE 螺钉VERSION 170BUTTON ld1LABEL 圆柱头螺钉BITMAP ld1.bmpACTION ld1.grx SEPARATORBUTTON ld2LABEL 紧定螺钉BITMAP ld2.bmpACTION ld2.grx SEPARATORBUTTON ld3LABEL 十字槽螺钉BITMAP ld3.bmpACTION ld3.grx2)螺母工具栏文件TITLE 螺母VERSION 170BUTTON lm1LABEL 六角螺母BITMAP ld1.bmp ACTION ld1.grx SEPARATORBUTTON lm2LABEL 六角锁紧螺母BITMAP ld2.bmp ACTION ld2.grx SEPARATORBUTTON lm3LABEL 圆螺母BITMAP ld3.bmp ACTION ld3.grx3)轴承工具栏文件TITLE 轴承VERSION 170BUTTON zc1LABEL 向心球轴承BITMAP ld1.bmpACTION ld1.grx SEPARATORBUTTON zc2LABEL 圆柱滚子轴承BITMAP ld2.bmpACTION ld2.grx SEPARATORBUTTON zc3LABEL 推力球轴承BITMAP ld3.bmpACTION ld3.grx实验二GRIP入门(2学时)一、实验内容1、利用GRIP开发工具编写一个简单GRIP程序:编写一个在建模状态下生产一个长方体的GRIP程序;2、利用GRIP工具进行程序编译、链接;3、在UG环境中进行程序的运行调试。

CAXA数控车自动编程实例教程

CAXA数控车自动编程实例教程
CAXA数控车自动编程综合实例
本章学习目标和学习重点:
掌握在数控车床上加工零件的一般步骤;
通过两实例掌握轴类零件的轮廓循环车削加工 工艺图的绘制、编制加工程序、仿真、生成G代 码等。
CAXA数控车自动编程综合实例
本章主要内容:
1 CAXA数控车综合应用实例1
2 CAXA数控车综合应用实例2
CAXA数控车自动编程综合实例
1CAXA数控车综合应用实例1 造型及加工思路:
3.绘制零件轮廓循环车削加工工艺图: 在CAXA数控车XP中绘制加工零件的零件轮廓循环车削加工 工艺图,不必象AOTUCAD软件那样绘制出全部零件的轮廓线, 只要绘制出要加工部分的轮廓即可。例如上图为要加工零件的零 件图,而下图8-2为该零件轮廓循环加工所需绘制的图纸。
CAXA数控车自动编程综合实例
⑷编制加工程序:根据零件的工艺单、工艺图和实 际加工情况,使用CAXA数控车XP软件的CAM部 分确定切削用量和刀具轨迹,合理设置机床的参 数,生成加工程序代码。 ⑸加工操作:将生成的加工程序传输到机床,调试 机床和加工程序,进行车削加工。 ⑹加工零件检验:根据工艺要求逐项检验零件的各 项加工要求,确定零件是否合格。
CAXA数控车自动编程综合实例
利用CAXA数控车XP在数控车床上加工零件的一般 步骤如下: ⑴分析加工图纸和工艺清单:在加工前,首先要读 懂图纸,分析加工零件各项要求,再从工艺单中 确定各项内容的具体要求,把零件的各尺寸和位 置联系起来,初步确定加工路线。 ⑵加工路线和装夹方法的确定:按图纸、工艺清单 的要求来确定加工路线。为保证零件的尺寸和位 置精度要求,选择适当的加工顺序和装夹方法。 ⑶用CAXA数控车XP软件的CAD模块绘制加工零件 的零件轮廓循环车削加工工艺图。

CAD二次开发源码-推荐下载

CAD二次开发源码-推荐下载

Set sset = ThisDrawing.SelectionSets.Add("ss1") '新建一个选择集
sset.SelectOnScreen '提示用户选择
For Each element In sset '在选择集中进行循环 k=k+1 ReDim Preserve hjx(k) hjx(k) = GetMTextUnformatString(element.TextString) 'MsgBox GetMTextUnformatString(hjx(k)) Next sset.Delete 'For i = UBound(hjx) To 0 Step -1 'MsgBox hjx(i) 'Next
(setq el (entget (ssname a index))) (setq index (+ index 1)) (setq e (assoc 0 el)) (if (= "DIMENSION" (cdr e)) (progn
(setq txt (cdr (assoc 42 el))) (setq txt-1 (rtos txt)) (write-line txt-1 f) ) ) ) (close f) )
End Sub Public Function GetMTextUnformatString(MTextString As String) As String
Dim s As String Dim RE As Object ' 获取 Regular Expressions 组件 Set RE = ThisDrawing.Application.GetInterfaceObject("Vbscript.RegExp") ' 忽略大小写 RE.IgnoreCase = True ' 搜索整个字符串 RE.Global = True s = MTextString

CAXA二次开发小程序的安装与应用

CAXA二次开发小程序的安装与应用

距等 ,再 点 “ 图 ” 按 钮 ,很 快便 可将 整 个 需 要 绘 绘
制 的带轮 图样 绘制 出来 ,包括 所有 尺寸 。
( )绘 制表 格 3
表 格也 是 图样 中 常用 的表 达 方
都要 在标 题 栏 内 显 示 ,通 常都 是 用 计 算 器 先 算 出零
式之 一 ,在这 里我们 有 两种 方 法 可 以快 速绘 制 表格 。 ①点 击 “ 二次开 发小 程序 ” 一 “ 绘制 网格 ” ,左下 角 出现 两 种 选 项 :两 角 点 、长 度 和 宽 度 ,类 似 C X AA 中绘 制矩形 的命 令 ,不 同 的是这 里 多 出 了两 个参 数 : 行数 和列 数 。根 据 需 要 输 入 行 数 、列 数 ,一 个 网 状 的表格 立 即可 以 绘 制 出来 。② 点 击 “ 次 开 发 小 程 二
序” 一 “ 绘制 表格 文字 ”一 “ 格 填写 ” 表 ,出现 图 5
件体 积 ,再 根 据 材 料 密 度 计算 重 量 。在 这 里 有 两 种 方法 可 以计 算 。①点 击 “ 次开 发 小 程 序 ” 一 “ 二 查
询 图形 面 积来 计 算 重 量 ”,左 下 角 提 示 “ 取 环 内 拾
栏目 菲娅 主持 索
C D/ AM/ A 直 甩 A C C
f p l a o fC L pi K n o AD/ AM/ AP c C C P
CX A A二次开发小程序的 安装与应用
世林 ( 漯河 )冶金设备有 限公 司 ( 河南 42 0 ) 6 0 0 喻 水 江 永振 田漯云
根据提示点击 “ 下一步”即可完成安装,详细过程不
再赘述 。安装完后 再次打 开 C X A A电子 图板 ,会发 现

caxacam数控车削加工自动编程经典实例

caxacam数控车削加工自动编程经典实例

caxacam数控车削加工自动编程经典实例CAXA CAM(计算机辅助数控车削加工)是一种集成CAD(计算机辅助设计)和CAM(计算机辅助制造)的软件,可以实现自动编程和控制数控车床进行加工。

在实际应用中,CAXA CAM已经成为数控车削加工中自动编程的重要工具。

下面将介绍几个经典的实例,以展示CAXA CAM在加工过程中的应用。

1.轮扣数控车削加工轮扣是一种常见的机械传动元件,它需要在加工过程中进行切削、倒角、螺纹等多道工序。

使用CAXA CAM进行自动编程,可以通过输入零件CAD图形和加工参数,快速生成加工程序。

CAXA CAM可以自动识别加工轮廓,生成相应的切削路径,并设置刀具路径。

通过CAXA CAM的模拟仿真功能,可以在计算机上进行验证和调整,减少加工过程中的误差和损耗。

然后,将生成的加工程序下载到数控车床控制器中,即可开始加工。

2.铜管数控车削加工铜管是一种常用的工程材料,常用于制作管道、接头等零部件。

使用CAXA CAM进行自动编程,可以先将铜管的CAD图形导入软件中。

然后,根据铜管的尺寸和形状,设置加工参数和切削路径。

CAXA CAM可以根据铜管的材料特性,自动生成适合的切削速度、进给速度和切削深度。

通过模拟仿真功能,可以更好地预测和控制切削过程中的变形和变色情况。

最后,将生成的加工程序下载到数控车床控制器中,即可开始加工。

3.轴套数控车削加工轴套是一种常见的机械零部件,常用于支撑和限位轴的运动。

使用CAXA CAM进行自动编程,可以根据轴套的CAD图形和加工要求,自动生成切削路径和刀具路径。

CAXA CAM可以根据轴套的加工特性,自动设置切削参数和刀具半径,并通过模拟仿真功能,验证和调整切削路径和刀具路径。

最后,将生成的加工程序下载到数控车床控制器中,即可开始加工。

4.螺纹加工螺纹是一种常见的机械连接方式,常用于螺栓、螺钉等零部件。

使用CAXA CAM进行自动编程,可以根据螺纹的CAD图形和加工要求,自动生成切削路径和刀具路径。

CAD二次开发报告示例

CAD二次开发报告示例

城市轨道交通线路设计平曲线绘制一、程序要求1、新建数据库,名称为“基础数据.mdb”。

2、建立数据表:plane_CureveData(平面曲线信息表)。

字段名称和类型如表1所示。

3、同时,新建一个窗体,窗体中放置MsFLexGrid表格控件一个,导入按钮实现将文本文件内容导入到MsFLexGrid表格控件;增加、修改、删除数据的相关编辑;保存实现表格数据保存到数据库(基础数据.mdb)中功能,界面如图1。

4、根据曲线信息,计算五大桩里程,新建立图层“平曲线图”,并在图层“平曲线图”中绘制平曲线图,并标注出曲线五要素,字体任意设定为中文字体,颜色任意。

同时设定线宽为1、线颜色任意。

表1 平面曲线信息表字段名称和类型字段名称数据类型交点编号 dbText交点桩号 dbSingle曲线类型 dbText曲线转向 dbText曲线半径 dbSingle曲线转角 dbSingle起端缓和曲线长度 dbSingle终端缓和曲线长度 dbSingle二、主要过程1、新建三个窗体,分别为新建项目、打开项目和平面曲线数据。

“新建项目”窗体实现新建名为“基础数据.xxd”的项目文件和“基础数据.mdb”的数据库文件(内含数据表plane_CureveData,表内无数据);“打开项目”窗体实现打开已有项目并在AutoCAD 中自动绘制平曲线图;“平面曲线数据”窗体包含一个FlexGrid 表格控件,实现导入包含平面曲线数据的文本文件(平面曲线.txt)并且能够对表格内的数据进行增加、修改、删除,最终保存入已打开项目对应的数据库文件中。

2、在程序中,按照上述要求编写相关代码。

节选部分重要代码如下所示:(1)新建数据库代码图1 平面曲线数据窗体Public Sub CreateDatabase() '创建数据库Dim m_WorkSpace As WorkspaceSet m_WorkSpace = DBEngine.Workspaces(0)Dim newdb As Database '定义数据库变量m_DatabaseName = m_ProjectPath + "\基础数据.mdb" '设定新建数据库位置Set newdb = m_WorkSpace.CreateDatabase(m_DatabaseName, dbLangChineseSimplified)Dim newtbl As TableDef'创建表 plane_CureveDataSet newtbl = newdb.CreateTableDef("plane_CureveData")'平面曲线信息表Set m_Field(1) = newtbl.CreateField("交点编号", dbText)Set m_Field(2) = newtbl.CreateField("交点桩号",dbSingle)Set m_Field(3) = newtbl.CreateField("曲线类型", dbText)Set m_Field(4) = newtbl.CreateField("曲线转向", dbText)Set m_Field(5) = newtbl.CreateField("曲线半径", dbSingle)Set m_Field(6) = newtbl.CreateField("曲线转角", dbSingle)Set m_Field(7) = newtbl.CreateField("起端缓和曲线长度", dbSingle)Set m_Field(8) = newtbl.CreateField("终端缓和曲线长度", dbSingle)Call CreateTable(newdb, newtbl, 8) '生成表MsgBox "项目创建成功", vbInformation, "新建项目"newdb.Close '关闭数据库及其中的表Set newdb = Nothing '删除数据库对象实例End Sub(2)创建菜单示例创建项目管理菜单Public Function CreateProjectManageMenu()On Error Resume NextDim mnuGroup As AcadMenuGroupDim mnuMain As AcadPopupMenuDim menuNames As StringDim menuCollection As AcadPopupMenusDim menu As AcadPopupMenuSet mnuGroup=ThisDrawing.Application.MenuGroups.Item(0) Set mnuMain = mnuGroup.Menus.Add("项目管理(&P)")Call BuildSubMenu(mnuMain, "新建设计项目(&N)", "mcoNewProject")'分隔符End Function(3)绘制平曲线代码'绘制平面线型Sub DrawPMLine()On Error Resume NextDim plineObj As AcadLWPolylineDim points(0 To 11) As DoubleDim textString As StringDim QZ As Double '曲中桩号Dim ZH As Double '直缓桩号Dim HY As Double '缓圆桩号Dim YH As Double '园缓桩号Dim HZ As Double '缓直桩号Dim a As Double '转角Dim Ls0 As Double '起端缓和曲线长Dim Le0 As Double '终端缓和曲线长Dim R As Double '曲线半径Dim L As Double '曲线长Dim T As Double '切线长Dim P As DoubleDim m As DoubleDim PI As DoubleDim Text_a As StringDim a_Du As DoubleDim a_Fen As DoubleDim a_Miao As DoubleCall SetFontName("楷体_GB2312")PI = 3.14159265359If Len(m_DatabaseName) <= 0 Then '表示还没有打开数据库连接Exit SubEnd If' 创建名为"平曲线图"的新图层Dim LayerObj As AcadLayerSet LayerObj = yers.Add("平曲线图")LayerObj.color = acCyan ' 指定"平曲线图"图层的颜色为青色Dim i As LongDim mSQL As String'打开数据库连接Set Con = New ADODB.ConnectionmSQL = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + m_DatabaseName + ";"Con.Open mSQL'设置记录集Set mrs = New ADODB.RecordsetSet mrs.ActiveConnection = Con '设置记录当前接连mrs.CursorLocation = adUseClientmSQL = "select * from plane_CureveData ORDER BY 交点桩号 ASC"mrs.Open mSQL, Con, adOpenKeyset, adLockOptimistic '打开记录集Dim m_Totals As Integerm_Totals = 0Do While Not mrs.EOF'将表格所有数据写入数据库表中m_Totals = m_Totals + 1If (m_Totals = 1) Thena = mrs.Fields(5)Ls0 = mrs.Fields(6)Le0 = mrs.Fields(7)R = mrs.Fields(4)P = Ls0 * Ls0 / (24 * R)m = Ls0 / 2T = (R + P) * Tan(a * PI / 360) + mL = PI * a * R / 180 + Ls0a_Du = Fix(a)a_Fen = Fix((a - a_Du) * 60)a_Miao = Round(((a - a_Du) * 60 - a_Fen) * 60, 2)Text_a = Str(a_Du) & "°" & Str(a_Fen) & "′" & Str(a_Miao) & "″"textString = "R=" & Str(R) & " " & "α=" & Text_a & " " & vbCrLf & "T=" & Str(Round(T, 2)) & " " & "lo=" & Str(Ls0) + " " & "L=" & Str(Round(L, 2))QZ = mrs.Fields(1)ZH = QZ - THY = ZH + Ls0HZ = QZ + TYH = HZ - Le0points(0) = 0: points(1) = 0points(2) = ZH: points(3) = points(1)points(4) = HYIf (mrs.Fields(3) = "左") Thenpoints(5) = -50Call DrawText(ZH + 30, points(1) + 80, textString, 150, 0, acAlignmentMiddleLeft)ElseIf (mrs.Fields(3) = "右") Thenpoints(5) = 50Call DrawText(ZH + 30, points(1) - 30, textString, 150, 0, acAlignmentMiddleLeft)End IfEnd Ifpoints(6) = QZ: points(7) = points(5)points(8) = YH: points(9) = points(5)points(10) = HZ: points(11) = points(1)m_X = points(10): m_Y = points(11)Set plineObj=ThisDrawing.ModelSpace. _ AddLightWeightPolyline(points)yer = "平曲线图"plineObj.ConstantWidth = 1 '多段线全局宽度 m_Totals = m_Totals + 1mrs.MoveNextEnd If(以上是第一段曲线绘制的代码)plineObj.ConstantWidth = 1 '多段线全局宽度'' 指定多段线到"地面线"图层上yer = "平曲线图"plineObj.UpdateZoomAllEnd Sub3、效果展示图2 第一段平曲线图。

CAXA图文档二次开发手册

CAXA图文档二次开发手册

CAXA图文档二次开发手册图文档开发组2007/10目录一、系统结构................................................................................................. 错误!未定义书签。

二、系统组件 (7)2.1数据模型参考标准 (7)2.1.1. PDM使能器 (7)2.1.2. PDM 模式 (8)2.1.3. 国内相关标准 (8)2.2系统组件划分................................................................................... 错误!未定义书签。

2.2.1. 服务端............................................................................. 错误!未定义书签。

2.2.2. 客户端............................................................................. 错误!未定义书签。

三、基础服务 (8)3.1 类框架 (8)3.1.1 IPdemObject (9)3.1.2 IPdemTransactionObject (10)3.1.3 IPdemNode (10)3.1.4 IPdemState (11)3.1.5 IPdemIdentifierObject (12)3.1.6 IPdemAttribute (13)3.1.7 IPdemPersistObject (14)3.1.8 IPdemManagedObject (16)3.1.9 IPdemLifecycle (16)3.1.10 IPdemLock (17)3.1.11 IPdemMaster (18)3.1.12 IPdemRevision (19)3.1.13 IPdemActor (20)3.2属性服务 (20)3.2.1 INProperty (21)3.2.2 IPdemPropertySet (21)3.2.3 IPropertiesIterator (25)3.2.4 IPropertyNamesIterator (27)3.3关系服务 (28)3.3.1 IPdemRelationship (29)3.3.2 IPdemRole (30)3.3.3 IPdemObjectSimpleInfo (31)3.4事务服务 (31)3.5.1 IPdemDatabase (32)3.5.2 IPdemTransaction (37)3.5搜索引擎 (38)3.5.1 IPdemQuery (39)3.5.2 IPdemQueryCondition (41)3.5.3 IPdemQueryConditionItem (43)3.5.4 IPdemQueryResult (44)3.5.5 IPdemQueryResultItem (44)3.5.6 IPdemQueryResultIterator (44)四、业务逻辑模型 (46)4.1 通用文档管理 (46)4.1.1 IPdemDocument (47)4.1.2 IPdemCADDocument (48)4.1.3 IPdemGeneralDocument (48)4.1.4 IPdemDocWorkRev (48)4.1.5 IPdemFolder (50)4.1.6 IPdemVault (50)4.1.7 IPdemObsoleteVault (51)4.1.8 IDocMasterComposition (51)4.1.9 IDocRevOfMaster (52)4.1.10 IDocMasterForRevs (52)4.1.11 IReferenceDocument (52)4.1.12 IOriginDocument (53)4.1.13 IDocumentReference (53)4.1.14 IFolderDocument (53)4.1.15 IDocInFolder (54)4.1.16 IFolderOfDocs (54)4.1.17 IFolderHierarchy (54)4.1.18 IParentFolder (55)4.1.19 IChildFolder (55)4.1.20 IPdemFile (55)4.1.21 IDocumentFile (57)4.1.22 IDocumentForFile (58)4.1.23 IFileOfDocument (58)4.1.24 IPdemDocumentFactory (58)4.1.25 IPdemFolderFactory (59)4.1.26 IFolderDocumentFactory (60)4.1.27 IDocExternRefFactory (60)4.2 特殊文档管理 (61)4.2.1 IPdemCappDocument (62)4.2.2 IPdem3DDocument (62)4.2.3 IPdem3DFolder (62)4.2.4 IDocExternRef (63)4.2.5 IXRefedDoc (63)4.2.6 IDocUsingXRef (63)4.2.7 ICappDocMasterComposition (64)4.2.8 ICappDocRevOfMaster (64)4.2. 9 ICappDocMasterForRevs (64)4.2.10 I3DDocMasterComposition (65)4.2.11 I3DDocRevOfMaster (65)4.2.12 I3DDocMasterForRevs (65)4.2.13 I3DExternLink (66)4.2.15 IDocUsingExtLink (66)4.2.16 I3DFolderHierarchy (67)4.2.17 IParent3DFolder (67)4.2.18 IChild3DFolder (67)4.2.19 I3DFolder3DDocument (68)4.2.20 I3DDocIn3DFolder (68)4.2.21 I3DFolderOf3DDocs (68)4.2.22 IPdem3DFolderFactory (69)4.2.23 IPdem3DDocumentFactory (70)4.2.24 IPdemCappDocumentFactory (70)4.2.25 I3DFolderHierarchyFactory (71)4.2.26 I3DFolder3DDocumentFactory (71)4.2.27 I3DExternLinkFactory (72)4.2.28 I3DDocWorkSceneFactory (73)4.2.29 I3DDocWorkScene (74)4.3 产品结构管理 (76)4.3.1 IPdemPartRevision (76)4.3.2 IPdemRevision (77)4.3.3 IPdemPartHelper (77)4.3.4 IPdemProductClassFactory (79)4.3.6 IProductClassHierarchyFactory (79)4.3.7 IPdemPartRevisionFactory (80)4.3.8 IPdemProductFactory (81)4.3.9 IAssemblyUsageFactory (81)4.3.10 IPartDrawingFactory (82)4.3.11 IProductClassProductFactory (82)4.4 BOM生成与输出 (83)4.4.1 IPdemBomEngine (84)4.4.2 IPdemBomResult (87)4.4.3 IPdemBomResultColumn (88)4.4.4 IPdemBomItem (89)4.4.5 IPdemBomOption (89)4.4.6 IPdemBomExpressionFilterItem (90)4.4.7 IPdemBomScriptFilteItem (90)4.4.8 IPdemBomItemIterator (91)4.4.9 IPdemBomResultIterator (93)4.5 人员管理 (95)4.5.1 IPdemTeamFactory (95)4.5.2 IPdemTeam (96)4.5.3 IPdemPersonFactory (96)4.5.3 IPdemPerson (97)4.5.3 IPdemGroupFactory (97)4.5.3 IPdemGroup (98)4.6 权限管理 (99)4.6.1 IPdemSecurityNode (100)4.6.2 IpdemSecurityMgr (102)4.6.3 IPdemSecurityNodeMgr (104)4.7 系统 (106)4.7.1 IPedmSession (106)4.7.2 IPedmSystem (108)4.7.3 IPedmContext (110)4.8 UI (111)4.8.1 IPdemUIMenuManager (112)4.8.2 IPdemUIMenuItem (116)4.8.3 IPdemUIToolBarManager (117)4.8.4 IPdemUIToolBarItem (118)4.8.5 IPdemUIClipboardCenter (118)4.8.6 IPdemUIClipboardItem (120)4.8.6 IPdemUIMainform (121)4.8.7 IPdemUIObjectForm (122)4.8.8 IPdemUIObjectFormItem (125)4.8.9 IPdemUIObjectFormManager (129)4.8.10 IPdemUIObjectFormPage (131)4.8.11 IPdemUIObjectList (135)4.8.12 IPdemUIObjectListItem (139)4.8.13 IPdemUIObjectListSite (141)4.8.14 IPdemUIObjectTree (143)4.8.15 IPdemUIObjectTreeNode (146)4.8.16 IPdemUIObjectTreeSite (149)4.9 审计 (150)4.9.1 IPdemAuditor (151)4.9.2 IPdemLogInfo (151)一、系统定义工具 (153)FormDesigner使用说明 (153)MenuDesigner使用说明 (154)RelDesigner使用说明 (154)二、脚本编写支持 (155)2.1 脚本工作原理.................................................................................. 错误!未定义书签。

caxa二次开发例子代码

caxa二次开发例子代码

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函数释放掉临时结点,这点非常重要*/void dymGenTwoPtLine1(int &step,int &flag){static EB_POINT p1,p2; // 注意: 这些在消息循环过程中要发生static int continues=0; // 变化的量应采用静态声明static int maner=0;static int style=0;static double len = 100.0;int ret = 0;int ret1 = 0,ret2 = 0;static EB_NODE line=NULL; // 临时直线,该直线用于中间过程的操作if(line==NULL)line=ebBuildLine(p1,p2); // 如果临时直线还没有创建则先创建一条直线elseebSetLineData(line,p1,p2); // 如果临时直线已经创建则根据两端点修改该直线直线// 以下的代码是为了实现绘制时的拖动效果,if(flag == ERASE_TRACE) // 如果当前绘图标志为擦除时{ebDrawXOR(TRUE); // 打开异或绘图方式ebDrawNode(line); // 绘制一遍直线ebFirstFlag=TRUE; // 置首次绘制标志为真ebDrawXOR(FALSE); // 关闭异或绘图方式return;}if(flag == UPDATE_TRACE) // 如果当前绘图标志为更新时{ebDrawXOR(TRUE);if(ebFirstFlag==TRUE) // 如果这条直线从未画过,则将首次绘制标志置为假ebFirstFlag = FALSE;else // 如果这条直线已经画过,则将再次绘制一遍这条直线,在异或方式下即擦除该直线ebDrawNode(line);ebGetPoint(&p2); // 得到直线的第二点坐标ebSetLineData(line,p1,p2); // 修改直线的两端点坐标ebDrawNode(line); // 将修改后的直线重画一遍ebDrawXOR(FALSE);return;}switch(step){case 0: // 第一步创建立即菜单,并提示输入直线的第一点ebGetMenuChoice("连续@单个",&continues);ebGetMenuChoice("非正交@正交",&maner);ebGetMenuChoiceCondition("点方式@长度方式",&style,&maner,1);ebGetMenuRealCondition("长度:",&len,0.0001,100000,&style,1);ebPrompt("第一点:");break;case 1: // 当用鼠标拾取点或用键盘输入点坐标后,提示输入第二点ret1 = ebGetPoint(&p1); // 得到第一点坐标if(ret1==RT_FINISH||ret1==RT_USERBRK) // 如果点鼠标右键或按键盘的ESC键,则结束绘图{ebFreeNode(line); // 释放临时直线结点所占用内存line=NULL;ebEndCommand(); // 结束命令ebClearMenu(); // 清除菜单return;}flag = UPDATE_TRACE; // 设置绘图方式为更新方式ebSetLineData(line,p1,p2);if(style==0) // 如果绘制普通两点线则提示输入第二点ebPrompt("第二点:");else if(style=1) // 如果以正交方式绘制,则提示输入直线长度ebPrompt("输入长度:");break;case 2: // 第三步得到第二点坐标并绘制这条直线ret2 = ebGetPoint(&p2); // 取第二点坐标if(ret2==RT_FINISH||ret2==RT_USERBRK){ebFreeNode(line); // 释放临时直线结点所占用内存line=NULL;ebEndCommand();ebClearMenu();return;}if(maner==1){ // 正交线,仅作简化处理p2.x=p1.x+len;p2.y=p1.y;}ebInitUndo(); // 初始化UNDO/REDO缓冲区,这样可以是此后插入到// 系统图形数据库中的结点元素可执行UNDO/REDO操作EB_NODE m_line=ebBuildLine(p1,p2); // 以p1和p2点创建一条新的直线结点ebInsNodeT oSys(m_line); // 将该直线插入到系统图形数据库if(continues==0) // 如果要求绘制连续直线{ //连续step = 1; // 设定下一次消息循环从第二步开始p1=p2;flag = UPDATE_TRACE;ebPrompt("第二点:");}else{step = 0;ebPrompt("第一点:");}break;}}/*用第二种方法绘制两点线,这种方法是利用直线的两个点坐标(静态值)和直接绘制直线的函数ebDrawLine绘制直线办法来实现拖动效果,而不必建立临时直线节点,因此不会涉及到内存泄漏,比较安全使用这种方法只适用于绘制点、直线、圆和圆弧几种简单的类型,通用性不如第一种方法但是使用起来比第一种方法简单,在绘制简单图形以及可以用简单类型组合的图形时应尽量使用这种方法。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include "stdafx.h"#include "eb_api.h" // CAXA EB API 函数#include "resource.h"void dymGenTwoPtLine1(int& step,int& flag); // 两点线方法1void dymGenTwoPtLine2(int& step,int& flag); // 两点线方法2int 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函数释放掉临时结点,这点非常重要!!!*/void dymGenTwoPtLine1(int &step,int &flag){static EB_POINT p1,p2; // 注意: 这些在消息循环过程中要发生static int continues=0; // 变化的量应采用静态声明static int maner=0;static int style=0;static double len = 100.0;int ret = 0;int ret1 = 0,ret2 = 0;static EB_NODE line=NULL; // 临时直线,该直线用于中间过程的操作if(line==NULL)line=ebBuildLine(p1,p2); // 如果临时直线还没有创建则先创建一条直线elseebSetLineData(line,p1,p2); // 如果临时直线已经创建则根据两端点修改该直线直线// 以下的代码是为了实现绘制时的拖动效果,if(flag == ERASE_TRACE) // 如果当前绘图标志为擦除时{ebDrawXOR(TRUE); // 打开异或绘图方式ebDrawNode(line); // 绘制一遍直线ebFirstFlag=TRUE; // 置首次绘制标志为真ebDrawXOR(FALSE); // 关闭异或绘图方式return;}if(flag == UPDATE_TRACE) // 如果当前绘图标志为更新时{ebDrawXOR(TRUE);if(ebFirstFlag==TRUE) // 如果这条直线从未画过,则将首次绘制标志置为假ebFirstFlag = FALSE;else // 如果这条直线已经画过,则将再次绘制一遍这条直线,在异或方式下即擦除该直线ebDrawNode(line);ebGetPoint(&p2); // 得到直线的第二点坐标ebSetLineData(line,p1,p2); // 修改直线的两端点坐标ebDrawNode(line); // 将修改后的直线重画一遍ebDrawXOR(FALSE);return;}switch(step){case 0: // 第一步创建立即菜单,并提示输入直线的第一点ebGetMenuChoice("连续@单个",&continues);ebGetMenuChoice("非正交@正交",&maner);ebGetMenuChoiceCondition("点方式@长度方式",&style,&maner,1);ebGetMenuRealCondition("长度:",&len,0.0001,100000,&style,1);ebPrompt("第一点:");break;case 1: // 当用鼠标拾取点或用键盘输入点坐标后,提示输入第二点ret1 = ebGetPoint(&p1); // 得到第一点坐标if(ret1==RT_FINISH||ret1==RT_USERBRK) // 如果点鼠标右键或按键盘的ESC键,则结束绘图{ebFreeNode(line); // 释放临时直线结点所占用内存line=NULL;ebEndCommand(); // 结束命令ebClearMenu(); // 清除菜单return;}flag = UPDATE_TRACE; // 设置绘图方式为更新方式ebSetLineData(line,p1,p2);if(style==0) // 如果绘制普通两点线则提示输入第二点ebPrompt("第二点:");else if(style=1) // 如果以正交方式绘制,则提示输入直线长度ebPrompt("输入长度:");break;case 2: // 第三步得到第二点坐标并绘制这条直线ret2 = ebGetPoint(&p2); // 取第二点坐标if(ret2==RT_FINISH||ret2==RT_USERBRK){ebFreeNode(line); // 释放临时直线结点所占用内存line=NULL;ebEndCommand();ebClearMenu();return;}if(maner==1){ // 正交线,仅作简化处理p2.x=p1.x+len;p2.y=p1.y;}ebInitUndo(); // 初始化UNDO/REDO缓冲区,这样可以是此后插入到// 系统图形数据库中的结点元素可执行UNDO/REDO操作EB_NODE m_line=ebBuildLine(p1,p2); // 以p1和p2点创建一条新的直线结点ebInsNodeToSys(m_line); // 将该直线插入到系统图形数据库if(continues==0) // 如果要求绘制连续直线{ //连续step = 1; // 设定下一次消息循环从第二步开始p1=p2;flag = UPDATE_TRACE;ebPrompt("第二点:");}else{step = 0;ebPrompt("第一点:");}break;}}/*用第二种方法绘制两点线,这种方法是利用直线的两个点坐标(静态值)和直接绘制直线的函数ebDrawLine绘制直线办法来实现拖动效果,而不必建立临时直线节点,因此不会涉及到内存泄漏,比较安全使用这种方法只适用于绘制点、直线、圆和圆弧几种简单的类型,通用性不如第一种方法但是使用起来比第一种方法简单,在绘制简单图形以及可以用简单类型组合的图形时应尽量使用这种方法。

*/void dymGenTwoPtLine2(int &step,int &flag){static EB_POINT p1,p2; // 注意: 这些在消息循环过程中要发生static int continues=0; // 变化的量应采用静态声明static int maner=0;static int style=0;static double len = 100.0;int ret = 0;int ret1 = 0,ret2 = 0;// 以下的代码是为了实现绘制时的拖动效果,if(flag == ERASE_TRACE) // 如果当前绘图标志为擦除时{ebDrawXOR(TRUE); // 打开异或绘图方式ebDrawLine(p1,p2,DRAGING); // 利用直接绘制直线函数绘制一遍直线ebFirstFlag=TRUE; // 置首次绘制标志为真ebDrawXOR(FALSE); // 关闭异或绘图方式return;}if(flag == UPDATE_TRACE) // 如果当前绘图标志为更新时{ebDrawXOR(TRUE);if(ebFirstFlag==TRUE) // 如果这条直线从未画过,则将首次绘制标志置为假ebFirstFlag = FALSE;else // 如果这条直线已经画过,则将再次绘制一遍这条直线,在异或方式下即擦除该直线ebDrawLine(p1,p2,DRAGING); // 利用直接绘制直线函数绘制一遍直线ebGetPoint(&p2); // 得到直线的第二点坐标ebDrawLine(p1,p2,DRAGING); // 利用直接绘制直线函数绘制一遍直线ebDrawXOR(FALSE);return;}switch(step){case 0: // 第一步创建立即菜单,并提示输入直线的第一点ebGetMenuChoice("连续@单个",&continues);ebGetMenuChoice("非正交@正交",&maner);ebGetMenuChoiceCondition("点方式@长度方式",&style,&maner,1);ebGetMenuRealCondition("长度:",&len,0.0001,100000,&style,1);ebPrompt("第一点:");break;case 1: // 当用鼠标拾取点或用键盘输入点坐标后,提示输入第二点ret1 = ebGetPoint(&p1); // 得到第一点坐标if(ret1==RT_FINISH||ret1==RT_USERBRK)// 如果点鼠标右键或按键盘的ESC 键,则结束绘图{ebEndCommand(); // 结束命令ebClearMenu(); // 清除菜单return;}flag = UPDATE_TRACE; // 设置绘图方式为更新方式if(style==0) // 如果绘制普通两点线则提示输入第二点ebPrompt("第二点:");else if(style=1) // 如果以正交方式绘制,则提示输入直线长度ebPrompt("输入长度:");break;case 2: // 第三步得到第二点坐标并绘制这条直线ret2 = ebGetPoint(&p2); // 取第二点坐标if(ret2==RT_FINISH||ret2==RT_USERBRK){ebEndCommand();ebClearMenu();return;}if(maner==1){ // 正交线,仅作简化处理p2.x=p1.x+len;p2.y=p1.y;}ebInitUndo(); // 初始化UNDO/REDO缓冲区,这样可以是此后插入到// 系统图形数据库中的结点元素可执行UNDO/REDO操作EB_NODE m_line=ebBuildLine(p1,p2); // 以p1和p2点创建一条新的直线结点ebInsNodeToSys(m_line); // 将该直线插入到系统图形数据库if(continues==0) // 如果要求绘制连续直线{ //连续step = 1; // 设定下一次消息循环从第二步开始p1=p2;flag = UPDATE_TRACE;ebPrompt("第二点:");}else{step = 0;ebPrompt("第一点:");}break;}}// 以下函数的主要功能为拾取一条直线并修改该直线的终点int usrAppendModify(int &step,int &flag){AFX_MANAGE_STATE(AfxGetStaticModuleState())EB_POINT p,p1,p2;static EB_NODE line;switch(step){case 0:ebPrompt("请拾取一条直线:");break;case 1:ebGetPoint(&p);line=ebGetNode(p,LINE); // 拾取一条直线if(line==NULL) // 如果拾取的不是一条直线则重新拾取{step=0;break;}ebPrompt("请拾取目标点:");break;case 2:ebGetPoint(&p);ebGetLineData(line,&p1,&p2); // 先得到原来直线的端点坐标ebSetLineData(line,p1,p); // 修改这条直线的端点坐标ebDrawNode(line,NORMAL); // 重画该直线ebRedraw();ebEndCommand(); // 结束命令ebClearMenu(); // 清除菜单区break;}return 1;}。

相关文档
最新文档