找回密码
 注册会员

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 340|回复: 0

基于组件的三维CAD系统开发的关键技术研究(三)

[复制链接]
发表于 2010-9-13 22:00:39 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转磨削论坛

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

×

  2 .3沿曲线标注

' O* t( u' d2 b4 Y- Y N( K 6 Y2 O" n) F, c

  在设计中会遇到沿给定曲线进行标注问题,如平面布置图中的开挖线符号沿开挖轮廓的标注,剖面图中岩石符号沿轮廓线标注、点筋标注、沿任意曲线进行汉字标注等。此类问题主要应用AutoCAD的Measure或divide命令来解决。两个命令的主要差别是前者按指定的长度在曲线上标注,后者按给定的分段数等分曲线并在等分点处进行标注。要标注的轮廓曲线最好用pline线,要标注的符号预先做成图块,图块采用单位块,执行measure或divide命令,选取要标注的曲线,指定标注符号,分段长度或分段数即可完成标注,当发现标注的符号太密或太疏时,可以执行erase命令选择P进行删除,比例不合适或符号方向不正确,可以利用特性编辑器,选中所有标注符号,对标注符号的比例和旋转角度进行调整,直到满意为止。对于更高级的应用,可以编制LSP程序,实现符号和文字沿任意曲线标注。

O/ l* b0 i) n% T* u 6 }& s& l) k6 A) E: Y; y- i: u

  2 .4表格生成

( E: O& @4 B! T6 X5 @8 R1 ~ - I% j& L6 ]# M4 P7 D1 E L

  AutoCAD本身没有表格处理功能,设计图纸中工程量表、钢筋表等涉及到表格生成的问题可以采用以下方法处理:

, N2 l" {8 V" g1 ?7 A& r3 ]4 Z" _. n f. t4 Z" x* a5 Q

  (1)直接把Word或Excel文件中的表格直接粘贴到CAD图形中,修改时只要双击图中的表格即可进入Word或Excel中进行编辑修改,修改完成后退出即可返回到AutoCAD中继续进行设计,该法优点是方便,快捷,易于掌握,可以充分利用Excel的强大计算功能。缺点是表格在AutoCAD中并不是一个普通图元,无法利用CAD功能对表格的字高、颜色和线宽进行编辑。

: A# c7 ^) x( c" d& B* N " @) h2 u1 s( J' T$ E

  (2)编制LSP程序,依次输入表格标题、表格行数、表格列数、表格行高和列宽以及表格插入点等参数,可以自动生成表格,表格中已经按仿Excel形式填入了文字,可以用字处理软件对表格中文字进行编辑修改。

8 A- w% f; e9 T4 P& P3 S/ Q 1 F1 ?- n3 U4 n# h7 t

  (defun C:mtab()

% E4 O. F" v8 ^ b( E$ x5 F5 O5 t& Q+ W3 V4 |; O. \5 J

  (setq tb1 nil tb2 nil tb3 nil)

8 d0 }2 F6 [7 J1 v0 e5 U* ^! i6 A8 _ : n7 v3 z# f$ I; w7 z- ]

  (setq rows (getint "表格行数"))

4 G4 C" r- Z6 W6 z, D3 z9 q* y# d8 t

  (setq cols (getint "表格列数"))

/ _) q% ^) f1 q! U- ^ a- k' k( P4 k" j

  (setq rowh (getreal "行高"))

" K# m' W7 J6 d ) u. R; Z+ `: n. Y$ e+ Y

  (setq colw (getreal "列宽"))

; ]( N/ o) {/ v. _ 6 ~5 ^' w, n& e$ t

  (setq p1 (getpoint "/n表格左上角点位置:"))

5 P, k2 h2 }& p* c 7 r6 S/ Q- ]1 ~, R7 E

  (command "pline" p1 "w" "0.5" "0.5"

1 s0 \7 o/ I2 P( L: w+ O w: e 9 i; n8 ~2 M/ X# u; }0 ^( S. H

  (setq p2 (list (+ (car p1) (* cols colw)) (cadr p1)))

+ c6 B/ m3 X5 m& @' b, G + R0 Z7 N: r1 o5 U) [0 c

  (setq p4 (list (car p2) (- (cadr p2) (* rows rowh))))

9 y3 c0 u2 m. I( D+ l ? 7 V+ n7 ~; n) Q/ a/ E+ p! W% ~

  (setq p3 (list (car p1) (- (cadr p2) (* rows rowh))))

. `9 J( ]; O* _" ^ , y# a, _+ K+ Q3 ^% K# n* N

  "C" )

" K+ @: q, R* c( f" m 4 Z& ?+ u" h$ ^4 K0 A2 j) q

  (setq n 1)

3 B, M% f, E; `) `- k; ?' y9 ]" O $ A2 D9 B8 D9 Z. J' z' p' T P% `+ L

  (while (< n rows);绘水平线表格

+ `* U; }# c( G# h1 M& S: B/ T Q3 F r2 G( B0 ^

  (command "pline" (list (car p1) (- (cadr p1) (* n rowh))) "w" "0" "0"

7 i! g, I, q# b" ^ b, A' b 3 G# h# J: [$ e ]

  (list (car p2) (- (cadr p2) (* rowh n))) "")

. u z0 x+ O3 C7 i . {. K% ?+ o1 J

  (setq n (+ n 1))

: m. k/ y+ U0 @ 7 J- y9 c$ a2 U

  )

& h5 k8 M# V- {+ k: K9 y) X- `. B$ ?( x8 b+ ~

  (setq n 1)

8 }: p/ f( t9 h+ \9 b0 G0 ^4 j ]! s1 E! [

  (while (< n cols);绘垂直表格线

0 v" ^# H% \) M* z- f* s% W& x) W5 m: b* e

  (command "pline" (list (+ (car p1) (* n colw)) (cadr p1)) "w" "0" "0" (list (+ (car p1) (* n colw)) (cadr p3))

! ^ N8 V$ {2 p$ e' I" F% t$ s: k1 J0 \# ^

  "")

( j% w: r9 e& o/ i* Z3 A) e! D2 Y" Z% q8 l2 q6 Y

  (setq n (+ n 1))

4 h, o+ H S* `& r. q ) b! s/ R1 {1 v. b P

  )

+ ~, r8 H3 Q- \* X# b% ^ , o8 J# u$ y* z3 @. H& V

  (command "text" "m" (list (+ (car p1) (* 0.5 cols colw))

- {* R& N7 i; S$ l9 Y h7 E6 S7 \4 i# E$ w

  (+ (cadr p1) 5)) "3" "0" "TITLE" )

% g( t a5 L3 E; z3 _3 h8 @- a3 u . U$ w/ [ B, F/ O4 V1 _" j

  (setq n 0)

9 S( _/ U8 k; Y* W+ m) \) F & e; n( p) e' o

  (while (< n rows)

^- J) N# Y8 g1 ?9 W% G 4 f$ s/ D% B$ R. w W+ P2 M

  (setq m 0)

B# i ~7 K l$ q: X & r- K/ i8 h# S( n1 n

  (while (< m cols)

+ Q* a0 D* g9 m. R. g/ I 0 E G1 o' O, {1 i& h( K: n

  (cond

8 f# B5 T& S% A, a$ ]6 r M6 u V h+ J, e$ k' Q

  ((< m 26) (setq bzstr (chr (+ 65 m))))

8 H% z2 _; f. }2 W, h$ X % k6 G8 D0 o) A7 i: X$ T+ B d4 N

  ((>= m 26) (setq bzstr (strcat (chr (+ 64 (/ m 26))) (chr (+ 65 (- m (* 26 (/ m 26))))))))

: i+ _6 [8 B% O0 a5 U5 Y" _1 w$ x5 [* \. S% N5 _

  )

# c& N |/ X/ ]( [$ M: t$ E$ G$ N , }0 n a6 I4 T# k/ c7 n! ]

  (command "text" "m" (list (+ (car p1) (* 0.5 colw) (* m colw));表格内容标注

) z4 |' m# v7 Q6 S$ i$ P 4 B( m7 N8 w, m2 b7 z% `8 p* D1 k; U

  (- (cadr p1) (* 0.5 rowh) (* n rowh)))

6 O1 n; k, F( z0 h! `' Z: T 6 Q% G6 S2 X3 E- o

  (getvar"TEXTSIZE") "0" (strcat bzstr (itoa (+ n 1))))

0 c2 S) S: v7 k: n2 a2 J/ G ( B, u( @. U, H/ ^

  (setq m (+ m 1))

, W$ q# N* Y+ b8 _# Q2 W3 l- U # C" z9 h$ V6 |' c, ?) `

  )

7 G% _9 \, H1 L2 E 5 L `) H+ N) P, J/ u: f: G

  (setq n (+ n 1))

6 Y' L1 Z7 E% ?, n' q! S & r' |& l: K2 k! o

  ))

$ S. U% N! L x: g , {8 U* R. ~; o2 ~( [

  2 .6高程小数位数处理

. M6 u( ]$ [) x8 x2 n. D! ?$ a $ A, B1 Y5 s( S2 H

  尺寸标注小数位数很容易调整,但诸如高程、表格中数字要调整则很困难,借助LSP程序的调整很方便,只要选取需要调整的数字,根据提示输入需要保留的小数位数,则程序自动对所有选种数字进行修改。

" ~" Q& s: D5 H% H/ K ! Z& e" o, Q0 @# s9 R

  (defun entsgc()

! D( B9 O+ b# Y+ v$ n2 Q* P 5 t4 w$ e5 ?% d* J/ L* z; a

  (setq n 0)

* q1 D' c! {* l2 d# S1 Y' L* k9 C: p, y( j2 ]& @4 F

  (setq sh (sslength e1))

. T; C6 o% v* R- s, C8 G; x; q( ~5 M7 h1 S- w/ L

  (while (< n sh) (setq x (entget (ssname e1 n)))

. _1 ^0 s3 \5 X% z# k; { X2 u/ s& ^

  (if (= (fld 0 x) "TEXT")

) U9 F" d! K1 i1 l8 @$ g/ P ?3 N- F' u" _9 P- I3 V# D/ z

  (progn

0 e9 }9 {" K1 V& X% n+ S+ [' {) \! b- \6 j4 q( n- D) `' x

  (setq agc (fld 1 x))

, Y: S$ O) @7 P$ J4 c 1 h R( J1 O9 u6 _$ I; g

  (setq c (substr agc 1 1))

3 u" M# z' ?, R0 M7 B - F0 z( g; P/ o d

  (if (or (= c "+") (= c "-") (and (>= c "0") (<= c "9")))

; q8 W% e7 t. a" |7 R 7 {! P$ M }$ ^

  (progn

, r+ a' z3 R- k D9 U( \ + }, J/ S7 Y/ I% i+ H/ ]! J

  (if (or (= c "+") (= c "-"))

: o2 y7 `4 B' k3 X: e : O4 G5 _8 K4 y3 d, l |! l

  (setq bgc (substr agc 2))

& X, D- V% |. {1 k$ I, M * Y6 {8 \" r% R% D/ _

  (setq bgc agc)

2 k! b3 f+ I/ a0 x* I 2 o: _7 J* Y. d3 j7 z) N

  )

2 E( M$ |% ~/ _1 H+ }( X+ K 9 Q( ~4 U+ A( x/ o

  (setq cgc (atof bgc))

9 T g z# s: A4 E 0 \$ d: g6 d5 u# d1 l" A2 m

  (setq zh (rtos cgc 2 gcws))

$ k) }7 _$ R5 D . t' r7 l9 S+ m6 H! v

  (if (or (= c "+") (= c "-"))

3 p; G8 `) e3 d ) }5 n) b& i" g. @5 t4 `7 v( m

  (setq zh (strcat c zh)))

1 a& V% ]5 g# S - I' d5 \) D! h# Z! R

  (setq x (subst (cons 1 zh) (assoc 1 x) x))

/ e, ~- R% d3 {+ C9 k3 q( B1 |" j8 b; r ; N2 E2 L" _3 v, L* }- a

  (entmod x)

) v7 X+ C% `! K: T- l! |2 J * [5 U/ x L# g

  )

# r' \% T+ x8 B7 ~9 a) x0 z: m " i: W+ G, F! t7 b

  ))

2 ]; f; a+ S* k0 T! u4 k + [4 O; U4 i2 _) E5 i9 t6 w% x

  ))

( l+ B7 j8 h! I F 2 ?) E7 _0 }) @1 R& S' n1 I1 l

  (setq n (+ n 1)))

! e9 ~+ O4 C4 b- f) J( P4 F" P, N: y5 E8 T

  )

$ [0 L Y4 b0 l1 z6 o( F f 8 Q4 ~3 V8 `( w- y5 P( O

  (defun c:yxws()

5 I; @+ |/ v X9 C' S/ e0 i4 K. K: Q* k, }

  (setq e1 (ssget))

; W K* E7 `6 N: @" Y + l: O3 k2 _3 F: K& O

  (setvar "dimzin" 0)

5 U+ a2 j0 q T0 c+ J 3 w/ X. ~0 \# J

  (setq gcws (getint "保留小数位数:"))

. }* V+ F4 l' | 2 x- H9 S4 J8 B) g) Q0 {. b

  (if e1 (entsgc) (print "/n not found"))

; a3 j' Y0 R9 Q/ K: l 5 ^! g+ _; z" x8 k) U! @

  (setq x nil)

: t+ a5 C, {! r9 ?% R - ]$ l. w' a. R

  )

. e; W2 y2 Y3 w U0 g" S! g9 F + ]' J" \+ h5 ~% v6 b1 ] 0 c, m2 i+ `& H* m6 p" Q7 X , H1 ] w" G4 Q l4 O6 P0 @- I2 A& f
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

中国磨床技术论坛
论 坛 声 明 郑重声明:本论坛属技术交流,非盈利性论坛。本论坛言论纯属发表者个人意见,与“中国磨削技术论坛”立场无关。 涉及政治言论一律删除,请所有会员注意.论坛资源由会员从网上收集整理所得,版权属于原作者. 论坛所有资源是进行学习和科研测试之用,请在下载后24小时删除, 本站出于学习和科研的目的进行交流和讨论,如有侵犯原作者的版权, 请来信告知,我们将立即做出整改,并给予相应的答复,谢谢合作!

中国磨削网

QQ|Archiver|手机版|小黑屋|磨削技术网 ( 苏ICP备12056899号-1 )

GMT+8, 2025-2-19 06:37 , Processed in 0.136891 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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