xieke-111 发表于 2006-4-20 20:28:00

[VBA]Solidworks草图环境下getpoint问题

<P>在Solidworks 的草图绘制环境下如何获得鼠标点击后的点坐标<BR>问题描述:<BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 建立好零件图后,用VBA写一个在 Solidworks草图环境下,点鼠标 左键后获得此点坐标的具体数字!</P>
<P><BR>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 发现很难办到,我写了部分代码如下:<BR>sub main()<BR>Dim swApp, Part, SelMgr As Object<BR>Dim retalAs Variant<BR>Dim xyzvalue As String<BR>Set swApp = Application.SldWorks<BR>Set Part = swApp.ActiveDoc<BR>Set SelMgr = Part.SelectionManager<BR>boolstatus = Part.Extension.SelectByID("前视基准面", "PLANE", 0, 0, 0, False, 0, Nothing)<BR>Part.ShowNamedView2 "*上下二等角轴测", 8<BR>part.InsertSketch2 True<BR>If (Part.GetActiveSketch Is Nothing) Then<BR>swApp.SendMsgToUser "请建立一个活动文档"<BR>Exit Sub<BR>End If</P>
<P>If (SelMgr.GetSelectedObjectCount2 &lt;&gt; 0) Then</P>
<P>retal = SelMgr.GetSelectionPointInSketchSpace2(0, 0)</P>
<P>xyzvalue = "x=" &amp; retal(0) * 1000 &amp; "mm" &amp; Chr(10) &amp; "y=" &amp; retal(1) * 1000 &amp; "mm" &amp; Chr(10) &amp; "z=" &amp; retal(2) * 1000 &amp; "mm"</P>
<P>swApp.SendMsgToUser xyzvalue</P>
<P>End If<BR>end sub</P>
<P>大致思路是这样的,但是却做不到;<BR>本来是设计运行程序后,等到点鼠标左键然后就 把此点的坐标展示出来,但是感觉好象没有办法做到只有当点击左键时候,才显示 此点的坐标;<BR>上面我写的那个东西,还没有等我点就直接显示为 0,0,0了!<BR>所以我想问大家如果能做到呢?我看大前面一贴也是关于getpiont的,但是发现太不一样了!</P>
<P><BR>下面是描述:<BR>SelectionMgr::GetSelectionPointInSketchSpace2</P>
<P><BR>Description</P>
<P>This method gets the selection point projected on to the active sketch and returned in sketch space. The selection point is projected on to the currently active sketch, resulting in a Z value, which is always 0.00. </P>


<P>Syntax (OLE Automation)</P>
<P>Retval = SelectionMgr.GetSelectionPointInSketchSpace2 ( Index, Mark)</P>

<P>Input:<BR>&nbsp;(long) Index<BR>&nbsp;Index position within the current list of selected items where AtIndex ranges from 1 to SelectionMgr::GetSelectedObjectCount2 (see Remarks)<BR>&nbsp;<BR>Input:<BR>&nbsp;(long) Mark<BR>&nbsp;-1 = All selections regardless of marks</P>
<P>0 = only the selections without marks</P>
<P>Any other value = Value that was used to mark and select an object<BR>&nbsp;<BR>Output:<BR>&nbsp;(VARIANT) Retval<BR>&nbsp;VARIANT of type SafeArray of 3 doubles (x,y,z)</P>
<P>其实还有几个API,但是发现,那些都是获得空间模型的点的,找了很久才发现这个API才是获得草图的点的;</P>
<P><BR>希望各位老师指导;<BR></P>

xieke-111 发表于 2006-4-21 09:10:00

本帖最后由 作者 于 2006-4-21 9:51:17 编辑 <br /><br /> 好像都没有人回答啊!<br>































我在继续查了一些API,比如GetSketchPoints,这些API要捕获的点,必须都是已经存在的点;<br>































所以我总结了一下,在SLDWORKS只能是捕获到草图上已经存在了的点,而不能利用通过鼠标在草图上任意点一个点就能捕获到此点的坐标的;(如果哪位老师能找到什么好方法的话,请告诉我和大家吧!)<br>































利用getsketchpoints写了一个练习程序:<br>































这个程序主要是生成一个立方体块!































<br>































过程:画矩形对角的两点-》生成一个矩形面-》在此基础上进行拉伸































<br>































































<br>































两种方式:































<br>































1.把矩形对角两点坐标和拉伸的厚度都输入,然后点确定OK(前提是进入SOLIDWORKS的零件图环境)































<br>































2.先进入SOLIDWORKS零件图环境,进入草图绘制状态,然后在草图上画图矩形对角两点,然后在运行这个程序,输入厚度,点&nbsp;&nbsp;&nbsp;点用鼠标输入;































<br>































































<br>































代码如下:































<br>































窗体代码:































<br>































Dim&nbsp;p1x,&nbsp;p1y,&nbsp;p1z,&nbsp;p2x,&nbsp;p2y,&nbsp;p2z,&nbsp;h&nbsp;As&nbsp;Double































<br>































Dim&nbsp;swApp&nbsp;As&nbsp;Object































<br>































Dim&nbsp;Part&nbsp;As&nbsp;Object































<br>































Dim&nbsp;boolstatus&nbsp;As&nbsp;Boolean































<br>































Dim&nbsp;longstatus&nbsp;As&nbsp;Long,&nbsp;longwarnings&nbsp;As&nbsp;Long































<br>































Sub&nbsp;Operate(p1x,&nbsp;p1y,&nbsp;p1z,&nbsp;p2x,&nbsp;p2y,&nbsp;p2z,&nbsp;h)































<br>































































<br>































Part.SketchRectangle&nbsp;p1x,&nbsp;p1y,&nbsp;p1z,&nbsp;p2x,&nbsp;p2y,&nbsp;p2z,&nbsp;1































<br>































Part.FeatureManager.FeatureExtrusion&nbsp;True,&nbsp;False,&nbsp;False,&nbsp;0,&nbsp;0,&nbsp;h,&nbsp;0,_<br>
False,&nbsp;False,&nbsp;False,&nbsp;False,&nbsp;0,&nbsp;0,&nbsp;False,&nbsp;False,&nbsp;False,&nbsp;False,&nbsp;1,&nbsp;1,&nbsp;1
<br>































Part.SelectionManager.EnableContourSelection&nbsp;=&nbsp;0































<br>































End&nbsp;Sub































<br>































































<br>































Private&nbsp;Sub&nbsp;CommandButton1_Click()































<br>































Set&nbsp;swApp&nbsp;=&nbsp;Application.SldWorks































<br>































Set&nbsp;Part&nbsp;=&nbsp;swApp.ActiveDoc































<br>































p1x&nbsp;=&nbsp;TextBox1.Text































<br>































p1y&nbsp;=&nbsp;TextBox2.Text































<br>































p1z&nbsp;=&nbsp;TextBox3.Text































<br>































p2x&nbsp;=&nbsp;TextBox4.Text































<br>































p2y&nbsp;=&nbsp;TextBox5.Text































<br>































p2z&nbsp;=&nbsp;TextBox6.Text































<br>































h&nbsp;=&nbsp;TextBox7.Text































<br>































boolstatus&nbsp;=&nbsp;Part.Extension.SelectByID("前视基准面",&nbsp;"PLANE",































&nbsp;0,&nbsp;0,&nbsp;0,&nbsp;False,&nbsp;0,&nbsp;Nothing)































<br>































Part.ShowNamedView2&nbsp;"*上下二等角轴测",&nbsp;8































<br>































Part.InsertSketch2&nbsp;True































<br>
Operate&nbsp;p1x&nbsp;/&nbsp;1000,&nbsp;p1y&nbsp;/&nbsp;1000,&nbsp;p1z&nbsp;/&nbsp;1000,&nbsp;p2x&nbsp;/&nbsp;1000,&nbsp;p2y&nbsp;/&nbsp;1000,&nbsp;p2z&nbsp;/&nbsp;1000,&nbsp;h&nbsp;/&nbsp;1000
<br>































End&nbsp;Sub































<br>































































<br>































Private&nbsp;Sub&nbsp;CommandButton2_Click()































<br>































Unload&nbsp;Me































<br>































End&nbsp;Sub































<br>































































<br>































Private&nbsp;Sub&nbsp;CommandButton3_Click()































<br>































Me.Hide































<br>































Dim&nbsp;xyzvalue&nbsp;As&nbsp;String































<br>































Dim&nbsp;sketchPointArray&nbsp;As&nbsp;Variant































<br>































































<br>































Dim&nbsp;theSketch As&nbsp;Object































<br>































































<br><br>































Set&nbsp;swApp&nbsp;=&nbsp;Application.SldWorks































<br>































































<br>































Set&nbsp;Part&nbsp;=&nbsp;swApp.ActiveDoc































<br>































































<br>































Set&nbsp;theSketch&nbsp;=&nbsp;Part.GetActiveSketch2































<br>































If&nbsp;theSketch&nbsp;Is&nbsp;Nothing&nbsp;Then































<br>































MsgBox&nbsp;"请先进入草图绘制状态!"































<br>































Exit&nbsp;Sub































<br>































End&nbsp;If































<br>































sketchPointArray&nbsp;=&nbsp;theSketch.GetSketchPoints































<br>































































<br><br>
&nbsp;xyzvalue&nbsp;=&nbsp;"x1="&nbsp;&amp;&nbsp;sketchPointArray(0).X&nbsp;*&nbsp;1000&nbsp;&amp;&nbsp;"mm"&nbsp;&amp;&nbsp;Chr(10)&nbsp;&amp;_<br>







"y1="&nbsp;&amp;&nbsp;sketchPointArray(0).Y&nbsp;*&nbsp;1000&nbsp;&amp;&nbsp;"mm"&nbsp;&amp;&nbsp;Chr(10)&nbsp;&amp;_















"z1="&nbsp;&amp;&nbsp;sketchPointArray(0).Z&nbsp;*&nbsp;1000&nbsp;&amp;&nbsp;"mm"&nbsp;&amp;&nbsp;Chr(10)&nbsp;&amp;&nbsp;_















<br>&nbsp;"x2="&nbsp;&amp;&nbsp;sketchPointArray(1).X&nbsp;*&nbsp;1000&nbsp;&amp;&nbsp;"mm"&nbsp;&amp;&nbsp;Chr(10)&nbsp;&amp;&nbsp;"y2="&nbsp;&amp;_
sketchPointArray(1).Y&nbsp;*&nbsp;1000&nbsp;&amp;&nbsp;"mm"&nbsp;&amp;&nbsp;Chr(10)&nbsp;&amp;&nbsp;"z2="&nbsp;&amp;&nbsp;sketchPointArray(1).Z&nbsp;*&nbsp;1000&nbsp;&amp;_
"mm"
<br>































































<br>































swApp.SendMsgToUser&nbsp;xyzvalue































<br>































Part.ShowNamedView2&nbsp;"*上下二等角轴测",&nbsp;8































<br>Operate&nbsp;sketchPointArray(0).X,&nbsp;sketchPointArray(0).Y,&nbsp;sketchPointArray(0).Z,_<br>



sketchPointArray(1).X,&nbsp;sketchPointArray(1).Y,&nbsp;sketchPointArray(1).Z,_<br>



TextBox7.Text&nbsp;/&nbsp;1000















<br>































































<br>































































<br>































End&nbsp;Sub































<br>































模块1代码:































<br>































































<br>































Sub&nbsp;main()































<br>































Load&nbsp;UserForm































<br>































UserForm.Show































<br>































End&nbsp;Sub































<br>































图片如下:<br>































http://sunlion.3322.org/blogpic/20064210494935975.jpg<br>































<br>































<br>































<br>
页: [1]
查看完整版本: [VBA]Solidworks草图环境下getpoint问题