明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2249|回复: 12

江湖救急!

  [复制链接]
发表于 2004-8-12 22:12:00 | 显示全部楼层 |阅读模式
雪山飞狐版主及众高手您们好:
本人学习了几年cad,但编程技术刚开始学,很菜。前几天看到一篇论文,很感兴趣(论文见附件),现求教:论文用vba扩展数据知识编写,只用1000及1001组码,看似简单但始终摸不到头绪,到最后用扩展数据替代表行块属性,不知怎么做。请版主及众高手在百忙之中帮我忙活一下,编出此程序,告诉我要点,感激不尽。先谢过大家及版主! mshuser@sohu.com

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2004-8-13 09:13:00 | 显示全部楼层
要编制两个程序


第一个标注序号,并写入XData


第二个读取XData,生成明细表
 楼主| 发表于 2004-8-13 14:23:00 | 显示全部楼层
飞狐版主:


给我点源代码,好不好?多谢多谢!
发表于 2004-8-14 10:58:00 | 显示全部楼层
源代码帮助里都有,:)


你可以试着编编,编不下去了,贴上来给大家批批
 楼主| 发表于 2004-8-14 17:03:00 | 显示全部楼层
飞狐版主: 这是我写的输入代码,请问如何加入扩展数据? daihao.setxdata 1000,"daihao"这样不行吧? Sub ShuRu()
Dim xuahao As Integer
Dim daihao As String
Dim mingcheng As String
Dim shuliang As Integer
Dim cailiao As String
Dim danjian As Double
Dim zongji As Double
Dim beizhu As String
xuahao = ThisDrawing.Utility.GetString(1, vbCrLf & "序号")
daihao = ThisDrawing.Utility.GetString(1, vbCrLf & "代号")
mingcheng = ThisDrawing.Utility.GetString(1, vbCrLf & "名称")
shuliang = ThisDrawing.Utility.GetString(1, vbCrLf & "数量")
cailiao = ThisDrawing.Utility.GetString(1, vbCrLf & "材料")
danjian = ThisDrawing.Utility.GetString(1, vbCrLf & "单件重量")
zongji = ThisDrawing.Utility.GetString(1, vbCrLf & "总重量")
beizhu = ThisDrawing.Utility.GetString(1, vbCrLf & "备注")
End Sub
发表于 2004-8-14 17:51:00 | 显示全部楼层
看看帮助里的例子:
Sub Example_SetXdata()
' This example creates a line and attaches extended data to that line.

' Create the line
Dim lineObj As AcadLine
Dim startPt(0 To 2) As Double, endPt(0 To 2) As Double
startPt(0) = 1#: startPt(1) = 1#: startPt(2) = 0#
endPt(0) = 5#: endPt(1) = 5#: endPt(2) = 0#
Set lineObj = ThisDrawing.ModelSpace.AddLine(startPt, endPt)
ZoomAll
			 ' Initialize all the xdata values. Note that first data in the list should be
' application name and first datatype code should be 1001
Dim DataType(0 To 9) As Integer
Dim Data(0 To 9) As Variant
Dim reals3(0 To 2) As Double
Dim worldPos(0 To 2) As Double

DataType(0) = 1001: Data(0) = "Test_Application"
DataType(1) = 1000: Data(1) = "This is a test for xdata"
			 DataType(2) = 1003: Data(2) = "0"																		 ' layer
DataType(3) = 1040: Data(3) = 1.23479137438413E+40 ' real
DataType(4) = 1041: Data(4) = 1237324938 ' distance
DataType(5) = 1070: Data(5) = 32767 ' 16 bit Integer
DataType(6) = 1071: Data(6) = 32767 ' 32 bit Integer
DataType(7) = 1042: Data(7) = 10 ' scaleFactor
			 reals3(0) = -2.95: reals3(1) = 100: reals3(2) = -20
DataType(8) = 1010: Data(8) = reals3 ' real

worldPos(0) = 4: worldPos(1) = 400.99999999: worldPos(2) = 2.798989
DataType(9) = 1011: Data(9) = worldPos ' world space position

' Attach the xdata to the line
lineObj.SetXData DataType, Data

' Return the xdata for the line
Dim xdataOut As Variant
Dim xtypeOut As Variant
lineObj.GetXData "", xtypeOut, xdataOut

End Sub
 楼主| 发表于 2004-8-14 23:04:00 | 显示全部楼层
版主好:
看过帮助还有问题:如何定义序号的图元对象?定义为何种类型?怎样给其赋值?
如版主对此程序已胸有成竹,还望将编程思路讲讲,不吝赐教。再次叩谢!
发表于 2004-8-15 09:36:00 | 显示全部楼层
序号可以使用块对象,其实就是零件号吧。当插入序号时,要求用户输入材料的各项数据,同时将之后的序号推后一个数,当删除序号时,将之前的序号前移一个数。最后按序号的顺序生成明细表。
 楼主| 发表于 2004-8-16 16:16:00 | 显示全部楼层
请版主不要烦:还有问题:


1。可不可以插入一个在cad中做的图块?我看过郑工的《vba开发精彩实例教程>


好像利用objetdbx,太复杂了,有简单的方法吗?


2。论文中的两个图块在vba中做还是在cad中作?


3。天涯孤客斑竹的意思是定义“序号”为一块对象,再将文字对象添加到序号图块中?是这样吗?
发表于 2004-8-16 18:20:00 | 显示全部楼层
你可以在cad中做一个属性块,Vba里调用InsertBlock方法插入,再用SetXData方法附加扩展数据
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-28 02:45 , Processed in 0.176442 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表