caxa二次开发例子代码
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数控车自动编程实例教程
本章学习目标和学习重点:
掌握在数控车床上加工零件的一般步骤;
通过两实例掌握轴类零件的轮廓循环车削加工 工艺图的绘制、编制加工程序、仿真、生成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二次开发源码-推荐下载
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二次开发小程序的安装与应用
距等 ,再 点 “ 图 ” 按 钮 ,很 快便 可将 整 个 需 要 绘 绘
制 的带轮 图样 绘制 出来 ,包括 所有 尺寸 。
( )绘 制表 格 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数控车削加工自动编程经典实例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二次开发报告示例
城市轨道交通线路设计平曲线绘制一、程序要求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图文档二次开发手册图文档开发组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二次开发例子代码#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绘制直线办法来实现拖动效果,而不必建立临时直线节点,因此不会涉及到内存泄漏,比较安全使用这种方法只适用于绘制点、直线、圆和圆弧几种简单的类型,通用性不如第一种方法但是使用起来比第一种方法简单,在绘制简单图形以及可以用简单类型组合的图形时应尽量使用这种方法。
CAD二次开发程序使用说明
CAD二次开发程序使用说明CAD二次开发程序使用说明:1.打开CAD,调用并加载ARX程序,输入命令“ly”,弹出如下的对话框。
点击确定。
2.点击确定,弹出如下的对话框。
在该对话框里,有两种主要功能组合可供使用。
3.在如上对话框里可以选择不同的点选控件,完成不同的操作。
现将一一解释说明。
(一)多段轴绘制可以点击“多段轴绘制”选择控件“n=3”或者“n=4”,弹出如下的对话框:可以看到在“多段轴n=3”以及“多段轴n=4”对话框中,可以对轴的基点进行自定义,可以手工输入轴的基点,同时还可以自定义轴的各段轴的半径和轴长,完全做到对轴的自定义。
同时还可以选择“举例”控件,熟悉了解该对话框的功能。
图如下:点击“画轴”按钮,将会在CAD中,画出已经标注好的轴。
如下举例:(二)深沟球轴承校核可以选择“轴承相关”里的“深沟球轴承校核”“60000”选择控件,弹出如下的对话框:(1)在该对话框里,可以在“初始参数”里手工输入你所需要的参数“Fr”,“Fa”,“n”,“Lh’”,“fp”“C0”,“C”,也可以在“举例”里选择“举例参数”“轴承”等等来自动输入固定的参数(仅用于演示操作)。
(2)点击按钮“初步计算”,可以看到“选择框”中,“Fa/Fr”,“Fa/C0”自动算出,根据“Fa/C0”的范围,在“Fa/C0选择”框里选择范围(有五组,从0.0025-0.5000),此时“插值参数”框里有关参数如“e1”,“e2”等自动给出。
(3)点击插值按钮,可以看到“选择框”中,“e”,“X”,“Y”已经计算给出,此时插值计算完成。
(4)最后点击“校核”按钮,“P”“Lh”会计算出来,同时根据计算结果,程序判断“Lh”是否小于“Lh’”,如果是,则会弹出如下的对话框:如果不是,则表示校核合格,弹出对话框如下:(5)点击“确定”按钮,返回上一级对话框。
(三)角接触球轴承校核可以选择“轴承相关”里的“角接触球轴承校核”“70000C”选择控件,弹出如下的对话框:(1)在该对话框里,可以使用右下角的“举例”组合框,选择“初始参数”“7207C”(可以单独选择),也可以手工在“初始参数”框里定义你所需要的单元值如“Fte”,“Fre”,“Fae”“L1”,“L2”“R”等等,完成对参数的定义。
caxa2007二次开发
目录第1章绪论 (1)1.1概述 (1)1.2应用程序接口 (1)1.3应用程序开发环境 (1)1.4进行二次开发的基本要求 (2)1.5主要特点 (2)1.6二次开发新版本的改进 (3)1.6.1开发环境 (3)1.6.2应用程序管理器 (3)1.6.3应用程序开发向导 (3)1.6.4构件库 (3)1.6.5 API函数 (3)1.7与老版本二次开发应用程序的兼容性 (4)第2章应用程序管理器 (5)2.1运行应用程序管理器 (5)2.2添加应用程序路径 (5)2.3删除应用程序路径 (6)2.4修改应用程序路径 (6)2.5加载和卸载二次开发程序 (6)2.6设置自动加载应用程序 (6)第3章二次开发环境及编程基础 (7)3.1二次开发平台的安装与设置 (7)3.2创建第一个二次开发程序 (7)3.2.1创建二次开发工程 (7)3.2.2应用程序框架分析 (9)3.2.3添加程序实现代码 (12)3.2.4应用程序的编译、连接 (14)3.2.5应用程序的运行、调试 (15)第4章数据类型及常量、公共变量的定义 (17)4.1数据类型 (17)4.1.1基本数据类型 (17)4.1.2点 (17)4.1.3矩形边界 (17)4.1.4结点 (17)4.1.5选择集 (18)4.2常量定义 (18)4.2.1函数返回值 (18)4.2.2线型定义 (18)4.2.3颜色定义 (19)4.2.4层定义 (20)4.2.5尺寸类型定义 (20)4.2.6其他定义 (20)4.3公共变量 (21)第5章应用程序接口(API)函数概述 (22)5.1交互实现 (22)5.1.1立即菜单 (22)5.1.2提示信息 (22)5.1.3交互取值 (22)5.2系统操作 (23)5.2.1文件存取 (23)5.2.2绘图状态设置 (23)5.2.3界面定制及消息响应 (23)5.2.4 Undo/Redo操作 (24)5.2.5用户窗口中预显图形 (24)5.3实体部分 (24)5.3.1实体操作 (24)5.3.2基本实体生成 (24)5.3.3块操作 (25)5.3.4尺寸标注 (25)5.3.5选择集操作 (25)5.4数据管理 (26)5.4.1得到属性数据 (26)5.4.2设置、修改属性数据 (26)5.4.3得到结点几何数据 (26)5.4.4设置、修改结点的几何数据 (27)5.4.5扩充数据管理 (27)5.5几何运算 (27)5.6图形编辑 (28)第6章应用程序接口(API)函数详解 (29)6.1交互实现 (29)6.1.1立即菜单 (29)6.1.2提示信息 (32)6.1.3交互取值 (32)6.2系统操作 (34)6.2.1文件存取 (34)6.2.2绘图状态设置 (35)6.2.3界面定制及消息响应 (39)6.2.4 Undo/Redo操作 (43)6.2.5用户窗口中预显图形 (44)6.3实体部分 (45)6.3.1实体操作 (45)6.3.2基本实体生成 (48)6.3.3块操作 (52)6.3.4尺寸标注 (54)6.3.5选择集操作 (55)6.4数据管理 (60)6.4.1得到属性数据 (60)6.4.2设置、修改属性数据 (61)6.4.3得到结点几何数据 (62)6.4.4设置、修改结点的几何数据 (65)6.4.5扩充数据管理 (68)6.5几何运算 (69)6.6图形编辑 (70)第7章实用编程技术 (76)7.1使用AFX_MANAGE_STATE宏 (76)7.2界面定制 (76)7.2.1菜单 (76)7.2.2对话框 (78)7.2.3立即菜单 (81)7.2.4键盘命令 (83)7.3消息响应 (84)7.4消息循环 (85)7.5面向实体操作的编程 (88)7.5.1生成实体 (88)7.5.2拾取实体 (88)7.5.3数据管理 (89)7.5.4实体扩充数据管理 (89)7.5.5选择集操作 (91)7.5.6系统图形数据库 (93)7.5.7图形编辑 (95)7.6构件库的使用与开发 (95)7.6.1构件库的使用 (95)7.6.2构件库的开发 (96)第1章绪论1.1概述CAXA电子图板是功能齐全的通用计算机辅助设计(CAD)软件。
CAXA电子图板二次开发手册
第 2 章 应 用 程 序 管 理 器 .............................................................理 器 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
第 3 章 二 次 开 发 环 境 及 编 程 基 础 ............................................................ 7
3.1 二 次 开 发 平 台 的 安 装 与 设 置 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.2 创 建 第 一 个 二 次 开 发 程 序 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.2.1 创 建 二 次 开 发 工 程 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7 3.2.2 应 用 程 序 框 架 分 析 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 3.2.3 添 加 程 序 实 现 代 码 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
NX二次开发习题及源码
1、创建NXhello界面代码:#include <uf_ui.h>//包含UF_initialize()和UF_terminate()函数原型的头文件#include <uf.h>//包含uc1601()函数原型的头文件extern void ufusr(char *param, int *retcode, int param_len){if (UF_initialize()!=0)//获取NX openapi的执行权限{return;uc1601("Hello NX",1);//弹出消息窗口,显示“Hello NX”UF_terminate();//释放NX OPEN API的执行权限}}运行结果截图:2、创建一个模型,并在信息窗口显示模型的tag值。
代码:#include <stdio.h>#include <uf.h>#include <uf_modl.h>#include < uf_ui_ugopen.h>#include <uf_part.h>#include <uf_ui.h>static void do_ugopen_api(void){ typedef unsigned int tag_t;UF_FEATURE_SIGN sign = UF_NULLSIGN;//无布尔运算double cyl_orig[3] = {0,0,0};//圆柱的圆心坐标char *cyl_height="100";char *cyl_diam="40";double direction[3]={0,0,1};//延Z轴正方向tag_t obj=NULL_TAG;UF_MODL_create_cyl1(sign, cyl_orig,cyl_height,cyl_diam,direction, &obj);UF_UI_open_listing_window(); //显示信息框:tag/*Returns the tag of the current display part. In a non-assembly part, this is the same as the work part. If there currently isn't a displayed part, a NULL_TAG is returned. */obj=UF_PART_ask_display_part();if(obj == NULL_TAG) //没有部件的时候显示的信息提示框{uc1601 ( "当前没有任何文件可供操作!",1);}else{char s[10];sprintf(s, "%d",obj); //sprinf()功能:把格式化的数据写入某个字符串UF_UI_write_listing_window(s);return;}}extern void ufusr( char *param, int *retcode, int rlen )//提供入口点{if((UF_initialize())!=0)return;do_ugopen_api ();UF_terminate();return;}extern int ufusr_ask_unload(void){return(UF_UNLOAD_IMMEDIATELY);}运行结果截图:(1)无部件时的输出(2)有部件时的输出结果3、open part 用户入口实例创建open part user exit在用户点击“open”时创建新部件,在其中创建sphere 详细说明user exit设置文件过程代码如下:#include < uf_assem.h>#include <uf_part.h>#include <uf_ui_ugopen.h>#include <stdio.h>#include <uf.h>#include <uf_modl.h>#include <uf_ui.h>#define UF_CALL(X) (report( __FILE__, __LINE__, #X, (X)))static int report( char *file, int line, char *call, int irc){if (irc){char messg[133];printf("%s, line %d: %s\n", file, line, call);(UF_get_fail_message(irc, messg)) ?printf(" returned a %d\n", irc) :printf(" returned error %d: %s\n", irc, messg);}return(irc);}static void do_ugopen_api(void){UF_FEATURE_SIGN sign = UF_NULLSIGN;tag_t part=null_tag;//如果没有赋值的话,直接就是"tag_t part",当你执行.dll文件时,就直接跑到建模环境了,没有信息提示框。
UG二次开发【快速出车间文档】
UG二次开发【快速出车间文档】UG附带的出车间文档需要进行运算,这样一来,出车间文档在程序刀路形成很慢的情况下这运算速度让人接受不了;下图是做的一个简易车间文档示例:程序使用,下边是源代码:(代码中SnapPic.exe 为VB做的抓图工具)Option Strict OffImports SystemImports System.IOImports NXOpenImports NXOpen.CAMImports NXOpen.UFImports NXOpen.UtilitiesImports System.DrawingImports System.Windows.FormsModule Module1Dim theSession As Session = Session.GetSession()Dim myUI As UI = UI.GetUI()Dim theUFSession As UFSession = UFSession.GetUFSession()Dim theWorkPart As Part = theSession.Parts.WorkDim mytag() As NXOpen.Tag'选择的加工操作标记数组Dim mcount As Integer'选择的加工操作数量Sub Main()Shell(Environment.GetEnvironmentVariable("UGII_USER_DIR ") + "\UDO\Post\SnapPic.exe", AppWinStyle.NormalFocus, True)Try'获取选择的操作数theUFSession.UiOnt.AskSelectedNodes(mcount, mytag)If mcount = 0 ThenMsgBox("没有选择加工操作!", MsgBoxStyle.OkOnly, "提示信息")Exit SubEnd If'设置车间文档EXCEL模板路径Dim fp As String= Environment.GetEnvironmentVariable("UGII_USER_DIR") + "\UDO\Post\WorkShop.xls"'打开与写出车间文档If String.IsNullOrEmpty(fp) = False ThenDim myExcel As New MY_EXCELmyExcel.Create()myExcel.Open(fp)myExcel.Write("M4", AskDisplatyPartName())myExcel.Write("S4", Format(Now, "yyyy/MM/dd"))myExcel.InsertPicture("b4",Environment.GetEnvironmentVariable("UGII_USER_DIR") + "\UDO\Post\jietu.jpg")For i = 0 To mcount - 1'输出结果myExcel.Write("B" + (i + 17).T oString, (i + 1).ToString)myExcel.Write("D"+ (i + 17).T oString, GetGemoGroup_Name(mytag(i)))myExcel.Write("E"+ (i + 17).ToString, GetToolPathName(mytag(i)))myExcel.Write("F" + (i + 17).ToString, GetToolName(mytag(i))) myExcel.Write("G"+ (i + 17).ToString, GetToolNumber(mytag(i)).T oString)myExcel.Write("H"+ (i + 17).ToString, GetToolDiameter(mytag(i)).ToString)myExcel.Write("I"+ (i + 17).ToString, GetToolCornerRadius(mytag(i)).ToString)myExcel.Write("J"+ (i + 17).ToString, GetToolHeight(mytag(i)).T oString)myExcel.Write("K"+ (i + 17).ToString, GetToolFluteLength(mytag(i)).T oString)myExcel.Write("L"+ (i + 17).ToString, GetStockPart(mytag(i)).T oString)myExcel.Write("M"+ (i + 17).T oString, GetStockFloor(mytag(i)).T oString)myExcel.Write("N"+ (i + 17).ToString, GetSpeedValue(mytag(i)).T oString)myExcel.Write("O"+ (i + 17).ToString, GetFeedValue(mytag(i)).T oString)myExcel.Write("Q"+ (i + 17).ToString,CInt(GetCutTime(mytag(i))).T oString)NextmyExcel.SaveAs()'myExcel.Quit()End If'出错处理:Catch ex As ExceptionMsgBox(ex)End TryEnd Sub'当前文档文件名Function AskDisplatyPartName() As StringDim UFS As UFSession = UFSession.GetUFSession()Dim part_name As String = ""Dim part_tag As NXOpen.Tag = UFS.Part.AskDisplayPartUFS.Part.AskPartName(part_tag, part_name)Dim aa() As StringDim bb() As Stringaa = Split(part_name, ".prt")part_name = aa(0)bb = Split(part_name, "\")part_name = bb(bb.Length - 1)Return part_nameEnd Function'取加工几何试图程序组Function GetGemoGroup_Name(ByVal camObjectTag As NXOpen.Tag) As StringDim theGemoGroup_Tag As NXOpen.TagDim GemoGroupName As String = ""theUFSession.Oper.AskGeomGroup(camObjectTag, theGemoGroup_Tag)theUFSession.Obj.AskName(theGemoGroup_Tag, GemoGroupName)Return GemoGroupNameEnd Function'取操作名称Function GetT oolPathName(ByVal camObjectTag As NXOpen.Tag) As StringDim ToolPathName As String = ""theUFSession.Oper.AskNameFromTag(camObjectTag, ToolPathName)Return ToolPathNameEnd Function'获取刀具名称Function GetT oolName(ByVal camObjectTag As NXOpen.Tag) As StringDim ToolName As String = ""Dim ToolTag As NXOpen.TagtheUFSession.Oper.AskCutterGroup(camObjectTag, ToolTag) theUFSession.Obj.AskName(T oolTag, ToolName)Return ToolNameEnd Function'获取刀具号码Function GetToolNumber(ByVal camObjectTag As NXOpen.Tag) As IntegerDim ToolTag As NXOpen.TagDim ToolNumber As IntegertheUFSession.Param.AskIntValue(T oolTag, UFConstants.UF_PARAM_TL_NUMBER, ToolNumber)Return ToolNumberEnd Function'获取刀具长度Function GetT oolHeight(ByVal camObjectTag As NXOpen.Tag) As DoubleDim ToolTag As NXOpen.TagDim ToolHeight As DoubletheUFSession.Oper.AskCutterGroup(camObjectTag, ToolTag) theUFSession.Param.AskDoubleValue(ToolTag, UFConstants.UF_PARAM_TL_HEIGHT, ToolHeight)Return ToolHeightEnd Function'获取刀具直径Function GetT oolDiameter(ByVal camObjectTag As NXOpen.Tag) As DoubleDim ToolTag As NXOpen.TagDim ToolDiameter As DoubletheUFSession.Oper.AskCutterGroup(camObjectTag, ToolTag) theUFSession.Param.AskDoubleValue(ToolTag, UFConstants.UF_PARAM_TL_DIAMETER, ToolDiameter) Return ToolDiameterEnd Function'获取刀具刃长Function GetToolFluteLength(ByVal camObjectTag As NXOpen.Tag) As DoubleDim ToolTag As NXOpen.TagDim ToolFluteLength As DoubletheUFSession.Param.AskDoubleValue(ToolTag, UFConstants.UF_PARAM_TL_FLUTE_LN, ToolFluteLength) Return ToolFluteLengthEnd Function'获取刀具R角Function GetToolCornerRadius(ByVal camObjectTag As NXOpen.Tag) As DoubleDim ToolTag As NXOpen.TagDim ToolCornerRadius As DoubletheUFSession.Oper.AskCutterGroup(camObjectTag, ToolTag) theUFSession.Param.AskDoubleValue(ToolTag, UFConstants.UF_PARAM_TL_COR1_RAD, ToolCornerRadius) Return ToolCornerRadiusEnd Function'取部件侧部余量Function GetStockPart(ByVal camObjectTag As NXOpen.Tag) As DoubleDim StockPart As DoubletheUFSession.Param.AskDoubleValue(camObjectTag, UFConstants.UF_PARAM_STOCK_PART, StockPart)Return StockPartEnd Function'取部件底部余量Function GetStockFloor(ByVal camObjectTag As NXOpen.Tag) As DoubleDim Stockfloor As DoubletheUFSession.Param.AskDoubleValue(camObjectTag, UFConstants.UF_PARAM_STOCK_FLOOR, Stockfloor)Return StockfloorEnd Function'取主轴转速Function GetSpeedValue(ByVal camObjectTag As NXOpen.Tag) As DoubleDim SpeedVale As DoubletheUFSession.Param.AskDoubleValue(camObjectTag, UFConstants.UF_PARAM_SPINDLE_RPM, SpeedVale)Return SpeedValeEnd Function'取进给速度Function GetFeedValue(ByVal camObjectTag As NXOpen.Tag) As DoubleDim FeedValue As DoubleDim_camObject As NXObject= NXObjectManager.Get(camObjectTag)Dim params(0) As CAM.Operationparams(0) = CType(_camObject, Operation)Dim FeedsBuilder1 As ObjectsFeedsBuilder= theSession.Parts.Work.CAMSetup.CreateFeedsBuilder(params) FeedValue = FeedsBuilder1.FeedsBuilder.FeedCutBuilder.ValueFeedsBuilder1.Destroy()Return FeedValueEnd Function'取切削时间Function GetCutTime(ByVal camObjectTag As NXOpen.Tag) As DoubleDim CutTime As DoubletheUFSession.Param.AskDoubleValue(camObjectTag, 142,CutTime)Return CutTimeEnd FunctionPublic Function GetUnloadOption(ByVal dummy As String) As Integer'Unloads the image immediately after execution within NXGetUnloadOption = NXOpen.Session.LibraryUnloadOption.Immediately'----Other unload options-------'Unloads the image when the NX session terminates'GetUnloadOption = NXOpen.Session.LibraryUnloadOption.AtTermination'Unloads the image explicitly, via an unload dialog'GetUnloadOption = NXOpen.Session.LibraryUnloadOption.Explicitly'-------------------------------End FunctionEnd ModulePublic Class MY_EXCELPrivate app As ObjectPrivate book As ObjectPrivate sheet As Object'表格名称Public Property xlSheetName() As StringGetReturn End GetSet(ByVal value As String) = valueEnd SetEnd Property'新建程序Public Function Create() As Booleanapp = CreateObject("Excel.Application")If app Is Nothing ThenReturn FalseElseapp.Visible = TrueReturn TrueEnd IfEnd Function'打开文件Public Sub Open(ByVal xlFileName As String)book = app.Workbooks.Open(xlFileName)sheet = book.ActiveSheetEnd Sub'写单元格Public Sub Write(ByVal_Range As String, ByVal value As Object)If _Range <> ""Thensheet.Range(_Range).Value = valueEnd IfEnd Sub'插入图片Public Sub InsertPicture(ByVal_Range As String, ByVal imageFile As String)If _Range <> ""ThenDim ExcelRange As Object = sheet.Range(_Range)Dim Ins_image As ImageIns_image = Image.FromFile(imageFile)Dim HeightScale As Double= Math.Round((ExcelRange.Height * 12 - 6) / Ins_image.Height, 2) Dim WidthScale As Double= Math.Round((ExcelRange.Width * 15 - 6) / Ins_image.Width, 2) Dim ScaleHW As Double= Math.Min(HeightScale, WidthScale)sheet.Shapes.AddPicture(imageFile, 0, 1, ExcelRange.Left + 2, ExcelRange.T op + 2, Ins_image.Width * ScaleHW, Ins_image.Height * ScaleHW)Ins_image.Dispose()End IfEnd Sub'取指定单元格值Public Function GetValue(ByVal_table As Integer, ByVal _Range As String) As StringDim sheet As Object = book.Sheets.Item(_table)Return sheet.Range(_Range).valueEnd FunctionPublic Function Save() As Booleanbook.Save()End FunctionPublic Function SaveAs() As BooleanDim Sdlg As SaveFileDialog = New SaveFileDialog'定义一个保存对话框Sdlg.FileName = AskDisplatyPartName() + "加工工序单.xls"'保存对话框的默认文件名Sdlg.Filter = "EXCEL档案(*.xls)|*.xls"'过滤器设置If Sdlg.ShowDialog = Windows.Forms.DialogResult.OK Then '如果保存对话框的确认按钮被按下book.SaveAs(Sdlg.FileName) '保存文件End IfEnd Function'结束EXCEL对象Public Function Quit() As Booleanbook.close()app.Quit()app = NothingGC.Collect()End Function'取数组Public Function GetArryValue(ByRef _table As Integer, ByVal _Row As String, ByVal _Cell As String, ByRef ArryString() As String) As IntegerDim sheet As Object = book.Sheets.Item(_table)Dim rowvalue As String = sheet.Range(_Row).valueDim cellvalue As String = sheet.Range(_Cell).valueDim k As Integer = 0If rowvalue <> ""And cellvalue <> ""ThenDim rowstr() As String = Split(rowvalue, "/")Dim cellstring() As String = Split(cellvalue, "/")Dim a, b, c, d As IntegerIf rowstr.Length > 1 And cellstring.Length > 0 Thena = Convert.T oInt32(rowstr(0))b = Convert.T oInt32(rowstr(1))If a > 0 And b > a ThenReDim Preserve ArryString(b - a)For i As Integer = 0 To b - aArryString(i) = cellstring(0) & Convert.ToString(a + i)k += 1NextIf rowstr.Length > 3 And cellstring.Length > 1 Thenc = Convert.ToInt32(rowstr(2))d = Convert.T oInt32(rowstr(3))If c > 0 And d > c ThenReDim Preserve ArryString(b - a + d - c + 1)For j As Integer = 0 To d - cArryString(b - a + j + 1) = cellstring(1) & Convert.ToString(c + j)k += 1NextEnd IfEnd IfEnd IfEnd IfEnd IfReturn kEnd FunctionEnd Class。
14二次开发0801
第14章API与二次开发14.1 CAXA实体设计API简介CAXA实体设计为提供了二次开发的平台,以下是有关API的简介。
14.1.1 新特性下面是CAXA实体设计二次开发接口中的一些改进。
1. 回调函数容易执行为了简化事件处理的回调过程使用了4个类。
它们是CZAppEventsSink、CZDocEventsSink, CZInteractorEventsSink和CZSelectEventsSink,分别对应着应用事件、文档事件、交互事件和拾取事件。
这4个类封装了事件的所有内容。
对于二次开发接口的,如果他们只对特定的事件感兴趣,他们只需要从这4个类中的一个派生出新的类,并重载基本的虚函数;然后逐个地通过调用 Advise/Unadvise的方法来注册事件和取消事件的注册。
所有的例子工程中事件处理都使用了这些新类,详细内容参照编程指南。
2. COM 专用函数对于一些通用的函数,为那些习惯于使用C++COM技术的添加了接口函数。
主要的好处是,对于数组,可以选择使用传统的C++风格的指针,来取代VARIANT类型的使用。
那些COM专用函数很容易被分辨出来,它们的函数名的末尾都含有COM字符串。
例如一个名字为CreateLine的函数,它有一个VARIANT类型的参数,现在它有一个相应的COM函数-CreateLineCOM,而这个COM函数以一个enumerator接口类型的指针作为传参。
3. ZArray Object一个阵列(ZArray)对象可以利用COM专有函数,这些函数返回一组接口数据。
ZArray 的接口是IZArray,它提供了很多方法,包括取得一个阵列的一系列条目,通过索引取回某一个条目和确定阵列中所含条目的类型。
使用IZArray接口的这些函数返回一组结果,他们很好被识别,因为这些函数名都是以ZArray 字符串结束的。
4. 二次开发接口的创建向导添加了一个向导(ICAddinAppWizard),可以帮助通过Microsoft Visual C++IDE来创建自己的工程。
CAA二次开发资料
1.Framework2.Module(空的,用来放workbenchs,components,workbench要把原来的module 清掉, components 不用,它是直接在上面加的东西)3.Framework:public 用来盛放workbench 的module 头文件Private:这个是加进来workbench 怎么继承上面的一个类还一个是生成一个workebench的出去文件3.IdentityCard 用来放外部或系统的API 所属的外部框架定义用来放外部或系统的所属的外部框架定义4.mk 文件时定义外部或系统的API 所属的外部模块定义所属的外部模块定义查看dico外部框架外部模块在相应的文件定义是关键5.这里有三个文件菜单的所有名字(Title) 定义格式为: TestWb.Title="test"; , CATNIs 可以定义此Workbench 以及其工具条, CATRsc可以定义此Workbench 的图标(Icons)和其放置路径(Category)(这里放模块)MyWorkbench.Icon.NormalPnl="Clouds";MyWorkbench.Icon.NormalCtx="Clouds";MyWorkbench.Icon.NormalRep="Clouds";MyAddin.CATNls中添加MybenchTlb.Title="月亮";MyCmdHeader.CATRsc中添加MyCmdHeader.point.Icon.Normal="mycmd";另一个CATNIs 文件是实现workbench 的命令头文件6..dico 文件定义的是链接库还一个是工厂定义新建一个workbench 的时候,首先要以workbench 名声明一个工厂然后CATApplicationFrame框与工厂进行库连接给新建的workbench 与它下面的配置文件接口进行库连接7.在Module 中的trsc文件是 A TIE is the object that links the interface and the implementation TIE 以trsc的形式存在在这个workbench 所在的模块里面有src里面是本模块的CPP 文件集合,local interface 里面是本模块的.h 文件集合,包括①上面提到的trsc文件,用来链接接口和现实的对象的的,主要是两组继承,工厂的继承和addin的继承2②还有从基工厂类上继承一个wokbench工厂所需要的cpp和.h 文件. 还一个是创建一个新工厂1 ,1 || 1 ,1③还有将执行的命令用MacDefineHeader宏定义当前的workbench 命令,也有.h 文件和CPP 文件1,1④实现现实的对象需要header.hworkshop.h还有就是就是从最初基类CATBaseUnknown继承下来的派生类1, 3⑤还有一个是interface 此接口是定义addin接口文件,用来继承库中的addin 1,1 8.setting CATIA 可以启动看到workbench 了9.添加工具条注意加头文件, 所在的模块定义, 注意加头文件,加API 所在的模块定义,框架定义查询,头文件是否要加,看上下: 查询,头文件是否要加,看上下:voidCreateCommands();CATCmdContainer * CreateToolbars();#include "CATCommandHeader.h"MacDeclareHeader(PartCmdHeader);CreateToolbars里面就是要建的工具条和菜单的主要内容:NewAccess(CATCmdContainer,pPartBenchTlb,PartBenchTlb);建立新的进口(内部接口类名,变量名,目标名)NewAccess(CATCmdStarter,pPointCmd,PointCmd);SetAccessCommand(pPointCmd,"point");SetAccessChild(pPartBenchTlb,pPointCmd);NewAccess(CATCmdStarter,pLineCmd,LineCmd);SetAccessCommand(pLineCmd,"line");SetAccessNext(pPointCmd,pLineCmd);AddToolbarView(pPartBenchTlb,1,Right);returnpPartBenchTlb;Command 命令的定义:newPartCmdHeader("point","CmdModule","TestCmd",(void *)NULL);newPartCmdHeader("line","CmdModule","LinCmd",(void *)NULL);第一个参数是按钮的名字,第二, 和命令的名字, 第一个参数是按钮的名字,第二,三个代表按钮执行的命令所在的module 和命令的名字, 参数四缺省就行了.所在的头文件,模块名, 注意把用到的接口的API 所在的头文件,模块名,还有框架加上10.现在做dialog 你做的命令所在的模块和命令名一定要和上面的名字对应新建module,insertdialog ,====================================================================== 首先声明,我也是一个菜鸟,接触CATIA 二次开发时间很短,也在学习,下面的几个概念是我在学习及使用时自己琢磨得到的解释, 目的是用尽可能简洁易懂的语言来描述英文文档中相对不容易理解的几个概念,在学习的时候我得到了CAA 群的水晶羽和huright的帮助, 感谢他们. 希望我的总结对初学者有用,另外,可能会有理解不当的地方,欢迎大家指出来,有交流才会有进步,汲取他人的知识和经验为我所用,我们才能走得更远.1.Dialog Agent:A dialog agent translates a user interaction into a user input.一个Dialog Agent 将用户的交互动作转变为了相应的输入,比如,CATIndicationAgent将用户在屏幕上的一个左键单击转换为相应的用户输入,获得单击处的坐标值. 我觉得,简单理解,就是作为一个中介(Agent) ,我们不用关心它是如何转变的,只要知道, 我们可以利用它来得到用户的输入就可以了.2.Dialog State: State is a step in a dialog where the program is waiting for an input. A 一个Dialog State 就是指一个状态,对于多状态的输入来讲(Statechart diagram) ,它就是指程序的几个状态,比如画一个圆,就有选取平面,选取圆心,指定半径,输入结束等几个状态,在相应的状态下利用Dialog Agent 获得相应的输入, 并对输入进行判断, 从而激发相应的响应. (即Guard condition 和Action)3. TIE:A TIE is the object that links the interface and the implementation.TIE(不知道全称是什么)是用来连接接口与实现的对象.在程序中是以.tsrc文件后缀名存在的,而在程序编译时将会产生一个TIE 的.h 头文件(参见百科全书User Interface 部分) .4.TIE_CATIPrtWksAddin(NewAddin) : NewAddin是一个Component , 它实现了接口CATIPrtWksAddin,因此就写成上面的形式:TIE_CATIPrtWksAddin(NewAddin); ----------------------------------------------------------------------------------------------------------5.CATDeclareClass: 这是一个类中变量的声明, 类似于MFC 中的DECLARE_DYNAMIC(我个人以为) ,其代码如下:#define CATDeclareClassprivate :staticCATMetaClass *meta_object;public :virtualCATMetaClass *__stdcallGetMetaObject() const;virtualconst char *IsA() const; virtual intIsAKindOf(const char *) const; staticCATMetaClass *__stdcallMetaObject();staticconst CLSID &__stdcallClassId();staticconst char *__stdcallClassName();staticCATBaseUnknown *CreateItself()而相应的MFC 中的DECLARE_DYNAMIC 代码如下:#define DECLARE_DYNAMIC(class_name) \protected: \staticCRuntimeClass* PASCAL _GetBaseClass(); \public: \staticconst AFX_DATA CRuntimeClass class##class_name; \virtualCRuntimeClass* GetRuntimeClass() const;\// not serializable, but dynamically constructable#define DECLARE_DYNCREATE(class_name) \DECLARE_DYNAMIC(class_name) \static CObject* PASCAL CreateObject();MFC 中的DECLARE_DYNAMIC 其目的是在类中构建一个含有CruntimeClass的变量,从而实现RTTI (在App 及Window 中) 和动态重建(在Window 中)看上面的函数CreateObject() , 以及CreateItself()以及相应的变量,我想应该在CAA 中也是实现类似的效果.6. CATImplementClass:这个应该不用说了,跟上面的CATDeclareClass形成一个组合,从而达到跟DECLARE_DYNAMIC 一样的效果, 应该是RTTI 和动态重建. 其各自的代码简单列如下: CATImplementClass(NewAddin, Implementation, CATBaseUnknown, CATnull ):#define CATImplementClass(Class,Typeofclass,Basemeta,Impmeta)\CATBeginImplementClass(Class,Typeofclass,Basemeta,Impmeta);\CATEndImplementClass(Class)#define IMPLEMENT_DYNAMIC(class_name, base_class_name) \IMPLEMENT_RUNTIMECLASS(class_name, base_class_name, 0xFFFF, NULL)7.MacDeclareHeader:Declares and defines a header class.声明并定义一个头,用来声明并定义一个Command Header,在命令的响应中使用.如例:MacDeclareHeader (PartCmdHeader),而MacDeclareHeader代码如下:#define MacDeclareHeader(DerivedHeader)\MacDefineHeader(DerivedHeader);\MacImplementHeader(DerivedHeader);#define MacDefineHeader(DerivedHeader)\classHeaderExportedByDerivedHeader : public CATCommandHeader\从中可以看出, PartCmdHeader是我们定义的一个类, 而这个类派生于CATCommandHeader, 因此,我们在做Addin时就可以直接new PartCmdHeader(…)等了,因为它的参数被定义为一个类.8. Smart Pointer: 智能指针, 这个在C++中就有: smart pointer is one which replaces a standardA pointer and adds functionality. The C++ standard library, for example, defines a class known as auto_ptr<> which automatically frees any resource it is controlling when its destructor is called. (见: /english/code/cpp_mfc/leakfree_singleton.shtml.htm) 说得简易些: 智能指针就是一种高级的指针,不同于普通指针的是,它可以自已控制资源的释放,而不用手动去释放所申请的资源. 针对CATIA 中的Smart Pointer: Smart Pointer is a class associated to an interface, that behaves A like an interface pointer ,which additional automatic reference counting. 对于一个接口CATI***, 其智能指针为:CATI***_var,如CATISketch其对应的智能指针就是CATISketch _var. 对于Smart Pointer 的使用问题: 这一部分参见百科全书的中间件部分, 推荐的是尽可能不要使用,而采用手动的Addref或Release.下面的例子说明了如何使用CAA C++开发方式来建立一个CATIA 内部程序. 实现的功能是新建一个独立的工作台(workbench) ,并在其下面实现添加自定义菜单,添加工具条以及按钮图标,插入CATIA 风格的对话框.并生成对界面功能的响应,建立command,实现调用对话框,以及通过输入参数直接用代码生成一个三维模型,并在CATIA 主窗口中显示.1, 新建独立的workbench CATIA V5 将某类包含一系列交互命令的一些工具条分组显示在不同的工作台(workbench)中,这样有利于工具的查找和使用.通过自己新建的workbench 可以将自己二次开发形成的一系列命令集中显示在一个工作台中, 便于以后的操作. 工作台的建立需要以下几个步骤. ? 创建工作台厂(factory)的接口(interface) ;? 创建工作台厂;? 创建工作台描述类;? 创建响应命令(command)的标题;? 创建工作台并排列图标按钮响应; 提供图片及提示等资源并将新建的工作台插入开始菜单; 创建工作台的显示界面. 插入新建的工作台MyWorkBench后的CATIA 开始菜单如图3 所示, 它与CATIA 现有的模块成为并列关系.现在进入MyWorkBench工作台里面没有任何工具条及按钮,下面添加这部分工具.2, 添加工具条及按钮首先创建按钮的描述类CAAAfrGeoCreationWkb , 派生于CATBaseUnknown类. CATBaseUnknown是创建用户界面并实现界面的基类,所有的接口都是从IUnknown/ CATBaseUnknown继承的. 这个类中建立了两个函数分别为CATCmdWorkbench *的CreateWorkbench()函数和无返回值类型的CreateCommands(). 前面的函数是用来实现顺序插入工具条,按钮图标以及菜单,后面的函数是实现对插入按钮以及菜单和响应函数的关联. 在CreateWorkbench()函数中用到了宏NewAccess(className,variableName,objectName). CATIA 的工作场(workshop)或者工作台(workbench)可以被看作是一个入口的集合包, 使用NewAccess宏可以创建一个这样的入口.使用SetAccessChild(variableName,childName) 以及SetAccessNext (variableName,nextName)这两个宏则可以连接入口. 其中className表示被创建类的类型, 包括以下几种类型: CATCmdContainer , CATCmdWorkshop , CATCmdSeparator,CATCmdStarter.下面就是创建了一个按钮的容器,也就是工具条,并在其中添加按钮的部分代码. NewAccess(CATCmdContainer,pCAAAfrTB1EltTlb,CAAAfrTB1EltTlb);// 创建工具条pCAAAfrTB1EltTlb SetAccessChild(pCAAAfrGeoCreationWkb, pCAAAfrTB1EltTlb); //工具条加入工作台//创建按钮cmd1,并设置其响应宏为CAAAfrCmd1Hdr,最后将其加入工具条TB1 中NewAccess(CATCmdStarter,pCAAAfrTTB1EltCmd1Str,CAAAfrTTB1EltCmd1Str); SetAccessCommand(pCAAAfrTTB1EltCmd1Str,"CAAAfrCmd1Hdr");SetAccessChild(pCAAAfrTB1EltTlb,pCAAAfrTTB1EltCmd1Str); 接下来绘制一个图标,并在CAAAfrGeoCreationWkbHeader.CATRsc中将其关联,具体如下,则cmd1 按钮显示的是CAACmd1.Bmp 图标. CAAAfrGeoCreationWkbHeader.CAAAfrCmd1Hdr.Icon.Normal= "I_CAACmd1"; 在CAAAfrGeoCreationWkbHeader.CATNls文件中设置新建按钮的标题以及提示内容CAAAfrGeoCreationWkbHeader.CAAAfrCmd1Hdr.Category = "Element"; CAAAfrGeoCreationWkbHeader.CAAAfrCmd1Hdr.Title = "command1"; CAAAfrGeoCreationWkbHeader.CAAAfrCmd1Hdr.ShortHelp = "new cmd1"; 添加两个工具条并插入一系列按钮的效果图如下面图 4 所示. 3,添加菜单菜单的添加与添加按钮类似,也是在CreateWorkbench()函数中,只不过是在宏中的参数与添加按钮并不一样.添加后的效果图如图5 所示NewAccess(CATCmdContainer, pCAAAfrGeoCreationMbr, CAAAfrGeoCreationMbr); NewAccess(CATCmdContainer, pCATAfrInsertMnu, CATAfrInsertMnu); SetAccessChild(pCAAAfrGeoCreationMbr, pCATAfrInsertMnu); NewAccess(CATCmdSeparator, pCAAAfrGeoCreationInsertSep, CAAAfrGeoCreationInsertSep); SetAccessChild(pCATAfrInsertMnu, pCAAAfrGeoCreationInsertSep); NewAccess(CATCmdContainer, pCAAAfrMeu1EltSnu, CAAAfrMeu1EltSnu); SetAccessNext(pCAAAfrGeoCreationInsertSep, pCAAAfrMeu1EltSnu); NewAccess(CATCmdStarter, pCAAAfrMMeu1SubMn1Str, CAAAfrMMeu1SubMn1Str); SetAccessChild(pCAAAfrMeu1EltSnu, pCAAAfrMMeu1SubMn1Str); SetAccessCommand(pCAAAfrMMeu1SubMn1Str, "CAAAfrCmd1Hdr"); 在CAAAfrGeoCreationWkb.CATNls文件中设置菜单显示的属性. CAAAfr Meu1EltSnu.Title= "新建菜单1" ; CAAAfr Meu1EltTlb.Title= "command1" ; 3, 建立菜单以及按钮的响应类建好的workbench 空框架中可以创建三种类型的响应(command)类,他们都是CATCommand派生出来的.具体添加过程是打开CAA Rade菜单"Insert",选择"CATIA Resource"下的"Command...".可以选择Statechartcommand,dialog-box based command 和Basic command.Basic command 是创建一个空的响应类,在函数Activate( CATCommand * iFromClient, CATNotification * iEvtDat)中添加响应. dialog-box based command 在二次开发中会被更多的用到.选择该类型响应类,在运行的时候会直接弹出一个对话框,当然,可以对这个对话框进行编辑.对话框编辑界面如图6所示, 里面有一个正在编辑的对话框,在图的中部, 右边是自带的一些控件,包括CATDlgFrame,CATDlgLabel,CATDlgEditor,CATDlgPushButton,CATDlgRadioButton 等等.对话框内所有的控件在Build()函数中列出,应用函数SetGridConstraints(short intiTopRow, short intiLeftColumn, short intiRowSpan, unsigned intiJustification) 通过设置控件在对话框中矩阵位置的方式来调整位置. 为控件添加回调函数来响应各种操作.如图7 所示,CATDlgPushButton 按钮控件包括Creation,Visibilityswap,Resizement,Button activation 以及Repetitive button activation5 中回调函数. 选择Button activation 产生点击响应生成回调函数OnPushButton004PushBActivateNotification(CATCommand* cmd, CATNotification* evt, CATCommandClientData data),可以在这个函数内添加代码. 限制用CATICkeParmFactory ,CreateAngle or CreateLength。
CAXA命令大全
CAXA命令大全CAD快捷键一览创建三维阵列3A创建三维面3F在三维空间创建由直线段组成的多段线3P在二维和三维空间中将某对象与其他对象对齐AL加载AutoLISP、ADS 和ARX 应用程序AP创建圆弧A计算对象或定义区域的面积和周长AA创建按指定方式排列的多重对象拷贝AR执行外部数据库命令的管理功能AAD输出选择对象的链接信息AEX管理对象和外部数据库之间的链接ALI显示并编辑表数据并创建链接和选择集ARO从链接到文字选择集和图形选择集的行中创建选择集ASE 执行结构查询语言(SQL) 语句ASQ创建属性定义-AT改变不依赖于块定义的属性信息-ATE用图案填充封闭区域H或BH根据选定对象创建块定义-B用对话框定义块B用封闭区域创建面域或多段线BO(使用命令行)用封闭区域创建面域或多段线-BO部分删除对象或把对象分解为两部分BR给对象加倒角CHA修改现有对象的特性-CH根据圆心和直径或半径绘制圆C复制对象CO或CP创建属性定义AT编辑单个块的可变属性ATE修改对象的颜色、图层、线型和厚度CH设置新对象的颜色COL编辑文字和属性定义ED显示夹点并设置颜色GR创建并修改标注样式D插入块或另一图形I控制现有对象的特性MO修改对象名称REN设置绘图辅助工具RM设置对象选择模式SE管理已定义的用户坐标系UC选择预置用户坐标系UCP控制坐标和角度的显示格式及精度UN创建和恢复视图V设置三维观察方向VP创建对齐线性标注DAL或DIMALI创建角度标注DAN或DIMANG从前一个或选择的标注的第一尺寸界线处连续标注DBA或DIMBASE 创建圆和圆弧的圆心标记或中心线DCE从前一个或选择的标注的第二尺寸界线处连续标注DCO或DIMCONT 创建圆和圆弧的直径标注DDI或DIMDIA编辑标注DED或DIMED创建线性尺寸标注DLI或DIMLIN创建坐标点标注DOR或DIMORD替换标注系统变量DOV或DIMOVER创建圆和圆弧的半径尺寸标注DRA或DIMRAD在命令行创建和修改标注样式DST或DIMSTY移动和旋转标注文字DIMTED测量两点之间的距离和角度DI将点对象或块沿对象的长度或周长等间隔排列DIV绘制填充的圆和环DO修改图像和其他对象的显示顺序DR打开鸟瞰视图窗口AV输入文字时在屏幕上显示DT定义平行投影或透视视图DV创建椭圆或椭圆弧EL从图形删除对象E将组合对象分解为对象组件X以其他文件格式保存对象EXP延伸对象到另一对象EX通过拉伸现有二维对象来创建三维实体EXT给对象加圆角F创建根据特性选择有关对象时用到的过滤器列表FI创建对象的命名选择集G使用命令行创建选择集-G用图案填充一块指定边界的区域-H修改现有的图案填充对象HE重生成三维模型时不显示隐藏线HI以多种格式向AutoCAD 图形文件中插入图像IM使用命令行插入图像-IM控制选定图像的亮度、对比度和褪色度IAD向当前图形中定义并附着新的图像对象IAT为单个图像对象创建新剪切边界ICL向AutoCAD 输入3DS/DXF/EPS /SAT/WMF等文件IMP将命名块或图形插入到当前图形中-I插入链接或嵌入对象IO找出两个或多个三维实体的干涉区并用公用部分创建三维组合实体INF 从两个或多个实体或面域的交集创建组合实体或面域IN 管理图层LA在命令行上执行LAYER 命令-LA创建一条引出线将注释与一个几何特征相连LE或LEAD 拉长对象L创建、加载和设置线型LT使用命令行创建、加载和设置线型-LT显示选定对象的数据库信息LI或LS设置线型比例因子LTS把某一对象的特性复制到其他若干对象MA将点对象或块按指定的间距放置ME创建对象的镜像副本MI创建多线ML在指定方向上按指定距离移动对象M从图纸空间切换到模型空间视口MS创建多行文字T或MT使用命令行创建多行文字-T创建浮动视口和打开现有的浮动视口MV创建对象的等距线,如同心圆、平行线和平行曲线O 设置运行对象捕捉模式并修改靶框大小OS使用命令行设置运行对象捕捉模式并修改靶框大小-OS 移动显示在当前视口的图形P使用命令行移动视口-P插入剪贴板数据并控制数据格式PA编辑多段线和三维多边形网格PE创建二维多段线PL将图形打印到绘图仪、打印机或文件PLOT创建点对象PO创建用多段线表示的正多边形POL自定义AutoCAD 系统参数的设置PR显示打印图形的效果PRE从模型空间视口切换到图纸空间PS删除数据库中未用的命名对象,例如块或图层PU退出AutoCAD EXIT绘制矩形多段线REC刷新显示当前视口R刷新显示所有视口RA重生成图形并刷新显示当前视口RE重新生成图形并刷新所有视口REA从选择的一组现有对象中创建面域对象REG修改对象名-REN创建三维线框或实体模型的具有真实感的渲染图像RR 沿轴旋转二维对象以创建实体REV绕基点旋转对象RO设置渲染系统配置RPR在X、Y 和Z 方向等比例放大或缩小对象SC从脚本文件执行一系列命令SCR用剖切平面和实体截交创建面域SEC列出系统变量并修改变量值SET显示当前视口图形的着色图像SHA用平面剖切一组实体SL规定光标按指定的间距移动SN创建二维填充多边形SO检查图形中文字的拼写SP创建二次或三次样条曲线SPL编辑样条曲线对象SPE移动或拉伸对象S创建命名样式ST用差集创建组合面域或实体SU校准、配置、打开和关闭已安装的数字化仪TA设置当前三维实体的厚度TH控制对图纸空间的访问以及控制视口的行为TI创建形位公差标注TOL显示、隐藏和自定义工具栏TO创建圆环形实体TOR用其他对象定义的剪切边修剪对象TR通过并运算创建组合面域或实体UNI设置坐标和角度的显示格式和精度-UN保存和恢复已命名的视图-V设置图形的三维直观图的查看方向-VP将块对象写入新图形文件W创建三维实体使其倾斜面尖端沿X 轴正向WE将一个外部参照附加到当前图形中XA将外部参照依赖符号绑定到图形XB使用命令行执行XBINDW命令-XB定义外部参照或块剪裁边界,并且设置前剪裁面和后剪裁面XC 创建无限长的直线,称为参照线XL控制图形中的外部参照XR使用命令行执行XREF命令-XR放大或缩小当前视口对象的外观尺寸Z。
线切割CAXA V2版生成G代码之经验谈
线切割CAXA V2版生成G代码之经验谈
线切割V2版是生成线切割程序(B代码)和数控铣床程序(G 代码)的一种软件,由于生成G代码的程序较多,而使用线切割V2版生成数控程序(G代码)的人较少,但从本人从使用的情况来说这个软件还是有很大的用处,所以望推广之。
以前电控产品中的凸轮和棘轮的数控铣床编程都是用IBM机根据点、线、圆的位置编制程序,然后数控铣床操作员再根据程序编制G代码程序。
用IBM机编程比较繁琐且容易出错,而用线切割V2版可直接生成数控铣床G代码程序,编程时间至少缩短一半,而且数控铣床操作员只需将G代码输入机床即可,时间缩短了且不会因为像以前在编程过程中出现错误。
现将线切割CAXA生成G代码程序介绍如下:
第一步:根据图纸在HAMCAD中画出图形(由于在HAMCAD 中作图比在CAXA V2版中作图方便很多),所以在HAMCAD中画出图形。
第二步:将图形的中心(电控产品的凸轮和棘轮中心都是六方孔)移到图框的左下角交点处。
第三步:输出DXF文件(在CAXA中只有DXF文件才可以生成G代码,而DWG文件则生成不了G代码)。
那么怎么输出呢?首先,点击界面左上角的文件,然后就出现很多条目,其中一条就是输出,点击输出就会出现一个对话框,上面是你所要保存的位置,下面是文件名。
再下面是保存类型,保存类型选择AUTOCADR14 DXF (*.DXF),到此,在HAMCAD中的工作算是完成了。
第四步:在CAXA V2软件中输出G代码。
首先,打开软件,必须打开C:/CAXA WEDM/BIN/LOADER-FORWEDM。
然后点击文件/数据接口/DWG/DXF文件读入(D),到此出现一个对话框,选择文件路径和文件类型。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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;}。