home *** CD-ROM | disk | FTP | other *** search
- PROC MAIN
-
- INTEGER IENT, ETYP, NVERT, I, MIL(500), NENT, IEND
- COORD U, A1, A2, A3, A4, B1, B2, B3, B4, E1, E2
- REAL R
-
- --make new entities red
-
- ECHO OFF
- SEND ' SEL COLOR 1 '
- ECHO ON
-
- LOOP
-
- --get tube radius
-
- LOOP
- ACCEPT R PROMPT(' tube/duct radius ') LAST(' :#13#3')
- EXIT WHEN R > 0.0 OR LAST_CHAR = 13 OR LAST_CHAR = 3
- PRINT ' must be greater than 0',
- END_LOOP
-
- --check for RETURN or ^C
-
- EXIT WHEN LAST_CHAR = 13 OR LAST_CHAR = 3
-
- --echo last character
-
- PRINT CHAR(LAST_CHAR),
-
- LOOP
- PRINT ':pick lines ',
-
- --get list of entities
-
- GET_ENT(500, NENT, MIL(1), IEND)
-
- --exit if no entities picked of got a ^C
-
- EXIT WHEN NENT = 0 OR LAST_CHAR = 3
-
- ECHO OFF
-
- --loop through the selected entites
-
- LOOP IENT = 1 TO NENT
- VERIFY ENT_TYP(ETYP), ENT_ID(MIL(IENT))
- IF ETYP = 1 THEN
- VERIFY LINE ENT_ID(MIL(IENT)), ENDS(E1, E2)
-
- U = VUNIT(E2-E1) --get unit vector along E1 E2
-
- IF U.X <> 0.0 THEN
-
- --calculate a single point which is
- --perpendicular to U at R distance
-
- A1.Y = R/SQRT((U.Y/U.X)**2.0+1.0)
- A1.X = -(U.Y/U.X)*A1.Y
- ELSE
-
- --special case if X component of U is 0
-
- A1.X = R
- A1.Y = 0.0
- ENDIF
-
- --we are picking a point on the circle where Z = 0
-
- A1.Z = 0.0
-
- --calculate 3 other points that are perpendicular
- --to each other on the circle
-
- A2 = VCROSS(U, A1)
- A3 = VCROSS(A1, U)
- A4 = VCROSS(A3, U)
-
- --translate B points back to E2
-
- B1 = A1+E2
- B2 = A2+E2
- B3 = A3+E2
- B4 = A4+E2
-
- --translate A points back to E1
-
- A1 = A1+E1
- A2 = A2+E1
- A3 = A3+E1
- A4 = A4+E1
-
- --insert 2 circles given 3 points
-
- SEND
- SEND 'INS CIR:MODEL X ',A1.X,' Y ',A1.Y,'Z ',A1.Z, \
- ',MODEL X ',A2.X,' Y ',A2.Y,'Z ',A2.Z, \
- ',MODEL X ',A3.X,' Y ',A3.Y,'Z ',A3.Z, \
- ';MODEL X ',B1.X,' Y ',B1.Y,'Z ',B1.Z, \
- ',MODEL X ',B2.X,' Y ',B2.Y,'Z ',B2.Z, \
- ',MODEL X ',B3.X,' Y ',B3.Y,'Z ',B3.Z
-
- --insert 4 lines around the tube
-
- INSERT LINE ENDS(A1,B1) RPNT(TRUE)
- INSERT LINE ENDS(A2,B2) RPNT(TRUE)
- INSERT LINE ENDS(A3,B3) RPNT(TRUE)
- INSERT LINE ENDS(A4,B4) RPNT(TRUE)
-
- ENDIF
- END_LOOP
-
- ECHO ON
-
- EXIT WHEN LAST_CHAR = 13 OR LAST_CHAR = ASCII(':')
- END_LOOP
-
- --completely done if we get a RETURN or a ^C
-
- EXIT WHEN LAST_CHAR = 13 OR LAST_CHAR = 3
- END_LOOP
-
- END PROC
-