QQ登录

只需一步,快速开始

登录 | 注册 | 找回密码

三维网

 找回密码
 注册

QQ登录

只需一步,快速开始

展开

通知     

全站
9天前
查看: 4139|回复: 23
收起左侧

[已解决] 草图中有N多个无规则的圆,如何操作可以快捷得到所有圆的圆心(对象为点)并删除圆

[复制链接]
发表于 2011-4-27 16:42:02 | 显示全部楼层 |阅读模式 来自: 中国江苏苏州

马上注册,结识高手,享用更多资源,轻松玩转三维网社区。

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

x
草图中有N多个无规则的圆,如何操作可以快捷得到所有圆的圆心(对象为点)并删除圆
发表于 2011-4-28 08:00:08 | 显示全部楼层 来自: 日本
 楼主| 发表于 2011-4-28 08:47:04 | 显示全部楼层 来自: 中国江苏苏州
2# hongwei_1987jp 9 I) T( T* R+ m* X
" |* o7 c+ X. C. E! j8 Y

8 ^( S: X, Y; b没有理解我意思:草图有N个圆而没有每一个圆的圆心(我只圆心这个点)!?我现在要通过这些圆来获得这些圆的圆心,而不要圆,就是要获得这些圆的所有Position,也就是通过草图圆获得圆心们这个对象
发表于 2011-4-28 15:59:43 | 显示全部楼层 来自: 中国山东济南
2# hongwei_1987jp  
  y$ _! V0 l: H9 I# M+ `9 m" a% p6 j

( g# a6 j+ z+ t. \  }5 Q! O9 L没有理解我意思:草图有N个圆而没有每一个圆的圆心(我只圆心这个点)!?我现在要通过这些圆来获得这些圆的圆心,而不要圆,就是要获得这些圆的所有Position,也就是通过草图圆获得圆心们 ...
5 o4 k3 d9 f$ G+ s! X+ }4 S574395 发表于 2011-4-28 08:47 http://www.3dportal.cn/discuz/images/common/back.gif
2 i  S! r8 u, p, L3 @( n7 b; R5 A% B
* z6 c# K4 m5 {% x3 u
有圆必有圆心!!!划线连接各圆圆心(自动捕捉)。
 楼主| 发表于 2011-4-28 16:21:48 | 显示全部楼层 来自: 中国江苏苏州
4# oneteng 1 P$ c9 Z6 h4 W4 t

/ G8 [8 s" {) u具体如何自动捕捉??一个一个点圆心??
发表于 2011-4-28 17:58:21 | 显示全部楼层 来自: 日本
本帖最后由 hongwei_1987jp 于 2011-4-28 18:00 编辑 2 W1 H9 m8 }+ o  i

+ D% w2 W; J4 M! K就是不明白,你为什么要先画圆,找圆点,然后又不要那个圆,就是要圆点?
' J; ^7 v/ q1 u' F  H9 R1 {
# W1 B/ s8 r! C5 m/ f) F0 |, O7 p直接画**点**不行吗?3 l/ R% G: U# u# O
+ _5 z5 l0 v9 r8 i2 d
你要想利用这些点去做草图,用曲线直接连接那些点不就可以了吗???
发表于 2011-4-28 18:08:17 | 显示全部楼层 来自: 日本
直白的說,全選。。。。圓心會自動標出。。。。。如果你要連接所有圓心。。那只能一個一個點。。。。
发表于 2011-4-29 08:23:38 | 显示全部楼层 来自: 中国广东佛山
1,写一个宏.
, _  @% W) s- r' F2,把草图名称改为"草图n".
9 |5 W" w$ P% k6 g+ T9 B2 j- Y% a$ z1 U" f, Q0 }, i

. ?2 {1 J$ b% S0 |" q, k" jSub main()
6 ^) b+ Y6 ]2 x. p% _    Dim swApp  As SldWorks.SldWorks8 B* N0 P$ e1 m6 {; _% {4 H
    Dim swModel As SldWorks.ModelDoc2
- _% D, |. L5 q- L7 O    Dim swPart As SldWorks.PartDoc
: v1 Y# Z0 |% m; b9 `    Dim swSelMgr  As SldWorks.SelectionMgr& n" Y+ s6 D5 G) U! C  \
    Dim swFeat  As SldWorks.Feature
" |+ C  N# f8 X  U$ U5 h+ K* e0 A    Dim swSketch   As SldWorks.Sketch
- |8 O9 P& W. b1 o0 r$ i    Dim mySelectData As SldWorks.SelectData
7 J) m. K1 ?" r& K# @3 {: ^6 t9 P    Dim skContour As SketchContour
% ^0 ~- E6 Q9 a' I) ^5 I6 W1 y    Dim vEdges As Variant, myEdge As SldWorks.Edge
+ a+ V& b- o: w+ `/ H! G4 t    Dim NumArcs, uuu As Long
- y1 y$ g' V3 y' r& D    Dim vArcs As Variant4 y. x) M0 n$ m2 O4 Z/ r, d0 V; p
    Dim vSkContours As Variant
0 _; J  J. n4 h% A% o) w! P    Dim vSkSeg  As Variant& D5 e" m1 q) Z  N& S
    Dim i As Integer
9 z, K6 B" z3 j  k. A9 M    Dim boolstatus As Boolean
2 O0 ^! w% g1 M# B. q# K4 c    Dim swSkArc As SldWorks.SketchArc
3 a( K/ B0 k7 o6 |5 {% \& C    Dim swCurve As SldWorks.Curve
$ R) q/ u, M2 @- x5 ~    Dim skPoint As Object- x0 ^& Y( }! E. J
    Set swApp = Application.SldWorks
- c6 ~5 ?$ _9 p6 I  b/ H    Set swModel = swApp.ActiveDoc
: E& c$ E" P9 Z9 F( [" Z    Set swPart = swModel+ J* X8 o# h0 B2 z! x" P- Y
    Set swSelMgr = swModel.SelectionManager1 A6 `9 {) B/ e1 [9 n/ _
    Set mySelectData = swSelMgr.CreateSelectData4 k4 v! n4 v$ d
    Set swFeat = swPart.FeatureByName("草图n")
" B% @1 t; T- s: w    Set swSketch = swFeat.GetSpecificFeature
% X5 W* y5 N* J' G' M  i    swModel.Extension.SelectByID2 "草图n", "SKETCH", 0, 0, 0, False, 0, Nothing, 08 R5 @) |% v3 e2 F5 j4 p
    swModel.EditSketch9 [% s) z* @6 R+ d3 U
    If Not swSketch Is Nothing Then
) }; l9 q- s- y8 i* l" Z- S       NumArcs = swSketch.GetArcCount* z: _6 r9 m* @7 Y/ v) `3 {
       vSkContours = swSketch.GetSketchContours()( i; }. {, e7 G9 H& T# }
       For i = 0 To UBound(vSkContours)
, q1 L! ]5 `$ o% h9 e6 p          vArcs = swSketch.GetArcs28 ?+ s% ?$ P; l; [' M/ @( z5 W
          If IsEmpty(vArcs) Then Exit Sub
) N# s) f3 U) o6 R- g. L            Set skContour = vSkContours(i)2 N) w* \/ M5 c+ b4 q% H* K
            If Not skContour Is Nothing Then  Q3 N5 W9 U+ x( n1 J
               If skContour.IsClosed = 1 Then
' q4 z# b( t; D3 c  t                  uuu = skContour.GetEdgesCount
' m5 |3 u. O6 [7 n& V* s8 I. h                  If uuu = 1 Then5 w/ t4 ~/ ^' D! }  _; I+ d
                       vEdges = skContour.GetEdges
+ l$ e0 b" g+ [4 s2 e$ L, k                       Set myEdge = vEdges(0)
; _: E; i8 ^- ^0 ^% k  q                       Set swCurve = myEdge.GetCurve
7 }# \% h; U1 f) T' q3 c* d7 [) ?                       vSkSeg = swCurve.CircleParams
6 V" B- o1 C, m4 ~& H                        boolstatus = skContour.Select2(False, mySelectData)
; I) C! h" @! {' L3 L                        swModel.EditDelete  k7 W+ p; A+ E0 A9 z  N) s7 x5 i
                        Set skPoint = swModel.SketchManager.CreatePoint(vSkSeg(0), vSkSeg(1), 0)  S5 S4 s! ~6 a+ ]3 Z
                   End If
" z' j5 n# A5 J) K               End If' I8 x. ~2 s3 b3 t: s
            End If3 {2 ]6 X# V7 g
       Next i' |4 ^) \# x) m( W1 I0 \: R, p
       swModel.SketchManager.InsertSketch True
+ p: B, m9 `8 M/ T# c# k    End If% s1 ?- X. W' [1 F
End Sub

评分

参与人数 1三维币 +5 收起 理由
wlkr + 5 应助

查看全部评分

 楼主| 发表于 2011-4-29 09:55:42 | 显示全部楼层 来自: 中国江苏苏州
8# yjyeming
$ e- ?* J/ C/ W) Y; s  m
9 X! H  Q% w4 Y- ]- K" ^/ Q  Y+ S3 m( ?( p- b4 c- R  W. V- l" C+ B  v3 o5 s1 k
谢谢,要的就是这个效果,找到知音了,代码自己写的吗
发表于 2011-4-29 10:41:33 | 显示全部楼层 来自: 中国广东佛山
代码肯定要自己写的..
 楼主| 发表于 2011-4-29 11:35:00 | 显示全部楼层 来自: 中国江苏苏州
10# yjyeming
, q9 A2 D6 r# F% x% i8 I, X$ A8 U3 N+ C
有做过其他开发吗?能不能把草图对象名设置成任意,不必每次手动改名。另外,能否添加一种对象不是草图而是实体面的情况?该怎么做,谢谢
发表于 2011-4-29 12:19:58 | 显示全部楼层 来自: 中国上海
本帖最后由 w_hs1 于 2011-4-29 12:28 编辑
8 c& J# ?7 K3 {: W$ {; q+ a5 [7 W( b  c  V  M9 l, u4 J
要完全满足楼主的要求,的确只能设计一个宏了。" C3 p7 j" b0 `8 k* H- m2 Z
但是楼主的原意恐怕只是要将一个草图引入到异型孔的位置草图中去(见楼主的另一个帖子的22楼说明,下面是该贴的链接),那么只要用复制就行了。# V8 C) A$ V6 N/ G3 X
http://www.3dportal.cn/discuz/viewthread.php?tid=1031387&extra=page%3D1- @" u+ y3 F( B0 h1 X6 n( ~, J

) f/ d3 |" e3 _- [% J
  k/ K! r( i, N0 L- l5 Q1、用异型孔向导在任意位置建立一个孔
* g3 Y! }; W( B$ m2、将草图2复制进草图4(复制结果会有一个位移)0 B; ]$ _' l- _" y$ F5 d
3、选定草图中全部复制过来的元素,按住shift键同步移动到远处(由于移动时不能捕捉,不能直接移到正确位置。移到远处是准备将来删除时便于框选)
5 P6 n/ M/ B; B# I3 ~" |4、按住Ctrl键,将这些元素复制到位(利用捕捉)% t" Z& ^2 B- B1 H! j
5、删除多余的元素
* a% y6 k" P0 u1 m) Q6、退出草图,完成任务
/ c" ]+ |+ J! V$ n
8 ]8 r6 O, F4 M, r7 p* p4 z 复制位置草图.gif

评分

参与人数 1三维币 +5 收起 理由
wlkr + 5 应助

查看全部评分

 楼主| 发表于 2011-4-29 12:55:32 | 显示全部楼层 来自: 中国江苏苏州
12# w_hs1 + z" y/ ~" a/ o8 H# z
. b+ m  }/ Q. j# a
是的,就是这样的意思,总之就是为了利用虚拟异型孔草图点位置来驱动零部件的装配关系,而宏的利用就是由原先的草图圆阵到你给出的草图2中点阵的过程,由于SW本身不带该功能,就想到了API和QT工具,另外做完该步骤之后在装配的时候还有点小窍门,一言以蔽之,整个过程就是通过草图来虚拟的达到驱动阵列零部件的功能,整个流程还需进一步简化和完善,主要还是在草图2的产生这一过程上,试用过程中选择对象一般都是实体面或单独的曲面,当然也有上面程序中给出的草图对象。还是感谢各位,学到新的一招,Ctrl+草图对象、、、之前都是点移动工具来完成移动,谢谢!!希望得到更多交流和探讨学习!
发表于 2011-4-29 15:12:16 | 显示全部楼层 来自: 中国广东佛山
11# 574395
; I# I9 a' s* N& W6 J& P3 V太容易了.
 楼主| 发表于 2011-4-29 16:45:49 | 显示全部楼层 来自: 中国江苏苏州
14# yjyeming . k# ]$ a7 ]1 G* k1 `. u$ s
8 e) e8 U; j$ \/ S+ [9 a. I
能给个代码分享下?敢问您平时做二次开发多吗?想详细交流下
发表于 2011-4-30 11:27:35 | 显示全部楼层 来自: 中国广东深圳
上面说的是在固弄玄虚吗。用草图与表格不一样能达到上面的效果吗。
发表于 2011-4-30 14:22:29 | 显示全部楼层 来自: 中国浙江杭州
要圆心何必删除圆呢 框选所有圆转成构造线就行了啊 既得到了圆心又不受圆的影响
发表于 2011-4-30 15:58:00 | 显示全部楼层 来自: 中国上海
要圆心何必删除圆呢 框选所有圆转成构造线就行了啊 既得到了圆心又不受圆的影响
% I; _; p/ z1 m; _  J# `. d) ?ffddjj 发表于 2011-4-30 14:22 http://www.3dportal.cn/discuz/images/common/back.gif

/ N9 p5 G8 _& w" o+ L6 I
" S" X5 |6 [) }" H$ n7 t) e楼主的这些点是用于异型孔特征的位置草图。此草图只承认其中的草图点,其它元素虽然可以存在,但系统对那些元素视而不见。 而其它草图中的圆心虽然也是草图中的一个点,但不是“草图点”,即不是在“*”记号下生成的点,因此即便将这些圆(包括它的圆心)用“转换实体引用”的功能置于位置草图中,再做异型孔时,系统仍然对它视而不见。可见楼主要的是真正的草图点,而不仅仅是圆心点。
' m+ I  x0 ~  x9 M& ?+ t其实我也被楼主搞糊涂了,楼主的原始目的是为了在装配体中阵列零件(见http://www.3dportal.cn/discuz/viewthread.php?tid=1031387&extra=page%3D1),如果是为了布置标准紧固件,完全可以直接用SW的智能扣件功能,自动的将合适的紧固件加到适合的孔中去。如果不是安装紧固件,考虑到通常这些孔多是用孔特征或阵列孔来实现的,孔特征和阵列可以作为装配体中特征阵列的驱动特征使用,同样可以方便地阵列零件。偏偏楼主又必须用几个孔特征来布置原始零件的孔位(我也不知是何缘故),又不想做几次孔特征,于是我给了一个用装配体中虚拟孔特征作为特征阵列的驱动特征。本来我觉得问题应该解决了,随之楼主又觉得在虚拟孔特征中一个个点出孔位来太麻烦(其实不麻烦呀,点每个孔位点,只要捕捉重合点,一点一个,很方便地,难道楼主要弄几百个点,怕手酸麽?)于是我就建议利用原零件孔特征的位置草图点进行复制的办法。现在楼主又要求空的大小是随意的,我真的搞不清楼主倒弄什么东西了。

评分

参与人数 1三维币 +3 收起 理由
chenjun520601 + 3 继续应助

查看全部评分

 楼主| 发表于 2011-5-3 09:55:15 | 显示全部楼层 来自: 中国江苏苏州
18# w_hs1
6 [+ h- ~* l7 R: ~4 J' }2 Z3 [# n8 q7 I/ {
7 V4 v/ r" A+ T# J感谢关注,下面我来回答下,对于要点而不要圆的问题,分析的极是,我要的对象是点,仅仅是点,当然可以无视圆,把它们构造掉,具体原因是因为在装配体中做阵列的时候对象只能是点(这个可以自己去试下)。
. B+ E( j; c9 O4 H* G% A4 J6 h9 [; z% U2 ?; b
对于SW智能扣件及智能特征,我之前也做过相关尝试,的确,你是不懂的,实际是有几百个点,当你做为一个设计者的时候,这个时候你倘若一个个去手动点选圆心来获得点的苦衷是不言而喻的,所以,软件自动化也是异常重要和不可或缺;“偏偏楼主又必须用几个孔特征来布置原始零件的孔位(我也不知是何缘故)”零件中本来这些位置是孔特征,在装配的时候也正是孔轴装配所以是在原有孔的位置上,我怀疑您是否进行实战设计的经验。不过讨论这些也没什么意义,能达到目的才是唯一的目的,仅仅说明SW本身的功能的确是有待开发完善,以上仅个人见解
发表于 2011-5-24 09:55:32 | 显示全部楼层 来自: 中国浙江杭州
楼主是不是用草图阵列?我是先画圆再在圆心上画点,再删了圆,笨办法
 楼主| 发表于 2011-5-25 08:31:16 | 显示全部楼层 来自: 中国江苏苏州
20# gxj528 ) V6 B' V5 B2 P( j) Y. v% E2 ?

/ K. r) _( d8 E$ I8 ^1 f! u是的,但是当草图中的圆的个数上百之后您依旧会选择一个个去选中再删除吗?用上面的代码可以遍历草图圆并取圆心删除圆
 楼主| 发表于 2011-5-26 07:55:41 | 显示全部楼层 来自: 中国江苏苏州
22# jlj694167857 可以拿宏试一下效果就知道了
发表于 2011-6-18 21:48:23 | 显示全部楼层 来自: 中国天津
有点像闷大的一道题。等放假时候研究一下。
发表于 2011-6-18 22:49:08 | 显示全部楼层 来自: 中国山东淄博
没细看,但是知道,繁琐的操作还可以使用宏的搞定,这就够了。
发表回复
您需要登录后才可以回帖 登录 | 注册

本版积分规则


Licensed Copyright © 2016-2020 http://www.3dportal.cn/ All Rights Reserved 京 ICP备13008828号

小黑屋|手机版|Archiver|三维网 ( 京ICP备2023026364号-1 )

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