找回密码
 注册会员

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 341|回复: 0

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

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

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

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

×

  2 .3沿曲线标注

& z1 V9 u& N6 G7 [9 k7 n# w( e9 s' v6 t( E$ C: O1 ^: I9 w1 f. I7 C1 ]

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

, b4 F" _3 B0 V5 q6 h % n8 k# n, E& r e- F: P. f# e7 u5 K

  2 .4表格生成

( l' w8 D# t5 F" M! w & p% p+ z( t: v) m8 H$ F5 w+ x; X# B

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

# ]: |: i6 e* F0 @; f: w6 }; o! ], Q0 Q$ }

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

1 V( m+ b, R6 H+ V( A 1 Q7 F0 R8 d1 }& k

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

5 h. c1 u4 v2 \2 ?& Y* Z' x 8 ]- q( d8 b- S8 r( R5 v9 M

  (defun C:mtab()

* f; a( G( W/ |* h" s% R) s2 j4 ^' m9 x$ T# d! P

  (setq tb1 nil tb2 nil tb3 nil)

5 C' z1 b2 _. v# J3 D+ `$ A' o' i5 W, M! \0 ~

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

1 \! v* A5 F' o/ P u S% N, a+ ?) v( Z/ D9 q' h4 C

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

: }6 r: h, X, I) o3 b7 C* h ` 0 \: ~1 c+ m0 Y

  (setq rowh (getreal "行高"))

/ }. E; V! S: I( N( n3 a9 y U) r0 F/ E3 |, S4 W/ A

  (setq colw (getreal "列宽"))

9 {4 A* N9 a. g# U$ W + q _. s% ~8 F/ @2 Z' ]* [

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

; r) L2 L* h; U6 x" n# d 6 U9 p! q) [ Y e1 y1 |

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

+ l0 L! W5 k. d( O. |% n' Y / p: \! p, @, P0 k+ t

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

% N% T& P* T) e6 ?1 @! O' |' w; D% P" G3 l& y

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

% T3 K9 G5 x5 x- J4 Y 3 @1 q7 i' w: z+ ]

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

# w. @( q/ w$ x) [) w0 f& u3 w1 e- X. \$ Z1 f

  "C" )

+ F2 n# m( n) d0 b7 c# g. l$ m" D' a9 J7 I l

  (setq n 1)

3 \, h9 D8 M1 o2 D0 A) d* E# E" s1 M% |9 Q1 {

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

& y) h& @& c3 \2 i: J" F 5 a/ O' x9 S% [

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

: f- N/ s! d3 j# v& }5 c. c) r0 a7 Y* m' [3 d" d

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

! N9 u8 t% a# N# s+ M3 [1 @/ c / G" a% ~6 A1 {5 l

  (setq n (+ n 1))

, @7 `; S3 B( i; l E q! d: L* O: L7 M3 [/ @4 j8 r, g

  )

& b, ^6 X% E! j. r4 p& ?1 X9 _- D4 o4 M! m) \: |# t

  (setq n 1)

: j4 I4 x; L2 o: S: I \ D. A 0 T- f8 z0 n5 ]2 s9 @

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

3 t. n4 s6 c5 S% n |: o. ^0 d& x) o2 w

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

, b$ R8 S6 C$ ^# ?# w& |3 P: H0 p2 `6 h5 p; P: u* K

  "")

Y8 a' c0 A+ i2 [& m5 j. ~, p% q0 L) i% c/ ?

  (setq n (+ n 1))

# n# i7 E0 z" |9 a' Z8 ]6 K9 q# Z- z' g9 A! R

  )

% T" P' X) z& k3 M. u4 N! P ) C. h3 r; H. J6 y+ i

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

6 e% |; n' r+ H l0 _: j n" H4 V- Q8 |# }' K/ C+ e& M& K! ^2 o, `

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

+ a* M' j) ?$ o0 F& A3 }, g. M* `, r6 r$ i: B

  (setq n 0)

. @* ~& J. D: e8 F, F* G7 x0 a( `2 i5 H( U2 d- _

  (while (< n rows)

0 G, x/ P" o' b& Q a9 S4 s : o. k$ J7 }1 h( ^

  (setq m 0)

`. G+ j9 C( X2 E) T- V & O6 {+ m) U. a$ l g9 s4 H

  (while (< m cols)

0 x3 S; U( S" ^/ W! g% G: r1 i' B, l 5 }5 E0 y- f: _5 e* t

  (cond

* O! G4 J9 u7 a; w0 b8 M5 C8 U, n0 n+ S4 V

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

$ i) v; d5 c. G: F0 l6 I3 i1 O- D2 h7 M. J: T3 v9 [" \

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

# [3 s6 e4 R& g5 s( @ # W; c+ o1 p9 v( O u+ l

  )

2 _( w) Y- n ^& c" t% _ ; f( F% j9 Y7 I4 O8 T

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

* G5 Z9 I! U' V+ p" }' o1 N" }) b5 M , C9 N4 S8 E5 f" ^

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

: N8 ^" Y/ q" }# P6 y" | ! g" c: L7 L3 w' q" D

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

# L+ n% B; C& G6 [' S 8 D' S5 I9 d3 i v$ j1 K

  (setq m (+ m 1))

% o% L# W0 U2 {, ?/ i- { ; u [- @/ g/ i* `- B+ e

  )

( r& I) `# I8 U3 ^: k# T& M. j- u/ z

  (setq n (+ n 1))

# M& |7 k9 c. a& W1 B% U) f! p5 q( e . H( S7 J1 c. j% `" }: R

  ))

. s7 c- R5 p# ]- Z. C+ z . B# {: V* ?- e1 j1 |7 m6 c6 v2 R

  2 .6高程小数位数处理

4 z( Y; N6 Z, b- R1 [ u: ^' s2 b4 A. E4 u

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

8 G- n2 x _9 @% p8 ^7 X+ _: _( A+ n' w2 h' O D2 O

  (defun entsgc()

% h; i9 q, K8 p+ G \- c , {8 w0 {9 \' e9 H/ ]8 h; Z! {

  (setq n 0)

% B: m8 B7 w- q * B9 ?3 I' n! Q _

  (setq sh (sslength e1))

) i) d" z! @% P- u* @- k3 n+ Q0 m! c- |) K

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

. @, P" K3 U: h" K+ [+ e1 ]) y" r( ^7 w9 o

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

7 b/ F b7 s+ `# H 0 a0 O- b8 r) u0 Z0 s9 q: C# O4 H

  (progn

2 s% q' O# d5 h- p # a, L- p7 Z; h3 l7 a" ~9 i( a

  (setq agc (fld 1 x))

0 l) X% {$ s, r" [' a) Y& X1 O 5 z2 M0 C R( v

  (setq c (substr agc 1 1))

+ v4 B/ O# j2 j8 e2 E0 l4 A8 M& Y" R. S& e2 }

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

" p5 u3 h" q7 q- M: A4 p4 W# |, S5 B$ f2 j- S1 g5 f

  (progn

6 A/ e, T+ N( y( z1 N% m 3 c4 ~& d7 p1 v# @" c- O' a

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

7 H e4 a& B$ t6 Z8 _1 `- _. [2 W6 [( G6 y/ V; a1 Q

  (setq bgc (substr agc 2))

, D: ~" [8 @- D3 P$ l 9 s6 K" }$ J: t

  (setq bgc agc)

- E3 J9 Y' l" L/ l * t* P& L2 f9 H. @

  )

0 y# [' L" B# J$ W& v ! Q% H7 V# Q# A M1 o! F3 R% c8 u

  (setq cgc (atof bgc))

5 s2 K5 l ~3 v+ t3 _ : Y& i2 p6 Q2 ] B' P2 M; K

  (setq zh (rtos cgc 2 gcws))

4 }3 f4 `* R) F: b( P5 Z/ o . K3 w ^1 k2 b" G6 j/ L0 q2 _+ U. ?

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

: Q# l% E) M8 e * A# W1 z' B( k; h9 r

  (setq zh (strcat c zh)))

0 t) a( l. w5 b z5 U7 A8 f5 @' l* e$ R% r

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

% v* w! Y3 @* \& u& B4 M 4 m( `5 R* U5 N9 Y) n# e4 @3 G, \- s

  (entmod x)

: R4 V/ L$ y$ c% w0 ] , r' S, ^; D8 I# u: Z

  )

' d4 Z8 x$ [5 A" z 6 l1 @# `; S0 U9 m# l

  ))

0 \% m# Q o& O0 G3 H8 f 0 V7 r" N4 e0 A& N+ O3 |) i" h, t

  ))

2 d$ I5 A6 P- j, L+ j! V2 d ; [+ W" Z* j; _7 g' t7 ^4 F0 }) d

  (setq n (+ n 1)))

, A [% q+ y, B6 I/ v' k3 x! t) Q0 r, O; F! n) ~5 s

  )

2 p4 a4 p1 a( K$ u 8 c5 [+ G% X ^. G9 O

  (defun c:yxws()

2 Q2 F6 K8 K8 q+ c7 t! [ # I8 D% x3 s4 c# a% u! Q* Q

  (setq e1 (ssget))

w8 U/ Y. R0 O1 a 7 H ~4 a# z/ T Y$ }6 F/ g

  (setvar "dimzin" 0)

0 A+ w5 m" W# @2 j5 I. c1 M4 H1 z

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

* B$ e8 h; J7 c# P ; E2 @* ?' M' ^$ A4 `7 g

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

; w" ]5 c% n& j 1 Q ^' k' ?" l: w

  (setq x nil)

3 F' q2 {9 f7 B 5 S) Y: j/ I* ^+ q/ R$ F: Z6 l, a) N9 P

  )

1 z, o2 ^" L/ t' w, W3 k' x, y6 C. J' b, q% K J2 q7 `9 N! `* N& O: }% o8 w0 @ # l( y2 d. C3 j
您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

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

中国磨削网

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

GMT+8, 2025-2-19 07:18 , Processed in 0.172561 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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