Message 1 of 8
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report
I am hoping you all can help me. I hope this is at least halfway coherent. I've been working on it for so long I may assume parts you don't know. I have added a streamcast to give you an example of what I am trying to do.
I have a cobbled together lisp routine and while it works it’s a long way from elegant. What I want it to do is decide whether it needs the keyboard input or the distance between points input. Once it has the data then draw a fillet elbow with whatever input I used. It should be simple but it’s beyond me. Here is the lisp.
I know it's a little worse than rough but it's a work in progress.
(defun C:FE1A (/ lentha lenthb os) (prompt "\nSET DISTANCE ") (setq os (getvar "osmode")) (command "undo" "begin") ; Chooses points on two lines to measure distance. (setvar "osmode" 512) (setq lentha (getpoint "\nCHOOSE FIRST LINE: ")) (if lentha (progn (setvar "osmode" 128) (setq lenthb (getpoint lentha "\nCHOOSE SECOND LINE: ")))) (if lenthb (progn (setq mf_radius_size1 (rtos (distance lentha lenthb))) ; sets the value to a real number autocad can use (setq mf_radius_size (distof mf_radius_size1 4)) ) ) (setq store_temp mf_radius_size) (prompt "\nEnter a number <")(if (/= nil) (progn(prin1 mf_radius_size)))(prompt ">:") (setq mf_radius_size (getreal)) (if (= mf_radius_size nil)(setq mf_radius_size store_temp)) (setq b (/ mf_radius_size 1)) ; Creates the duct corner (command "fillet" "R" b "fillet" (entsel "\nPick first inner line for elbow: ") (entsel "\nPick second inner line for elbow: ")) (setq j (+ mf_radius_size b)) (command "fillet" "R" j "fillet" (entsel "\nPick first outer line for elbow: ") (entsel "\nPick second outer line for elbow: ")) (setq the_arc (entget (entlast))) (if (/= (cdr (assoc 0 the_arc)) "arc") (progn (setq os_setting (getvar "osmode")) (setvar "osmode" 0) (setq center_of_arc (cdr (assoc 10 the_arc))) (setq start_angle (cdr (assoc 50 the_arc))) (setq end_angle (cdr (assoc 51 the_arc))) (setq line_1_start (polar center_of_arc start_angle mf_radius_size)) (setq line_1_end (polar center_of_arc start_angle (* mf_radius_size 2))) (command "line" line_1_start line_1_end "") (setq line_1_start (polar center_of_arc end_angle mf_radius_size)) (setq line_1_end (polar center_of_arc end_angle (* mf_radius_size 2))) (command "line" line_1_start line_1_end "") (setvar "osmode" os_setting) )) (command "undo" "end") (princ))
Here is something I think I can use.
(DEFUN PRLINF() (IF (= INIT NIL) (WHILE (= INIT NIL) (SETQ INIT (GETDIST "\nPlease Enter Distance Between Lines: ") ) ) (SETQ INIT (GETDIST (STRCAT "\nPlease Enter Distance Between Lines<" (RTOS DIST) ">: " ) ) ) );END OF IF FUNCTION (IF (= INIT NIL) (SETQ INIT DIST) (SETQ DIST INIT) ) ); END OF PRLINF FUNCTION (DEFUN PRLDRW () (SETQ SP (GETPOINT "\nEnter Start Point: ") EP (GETPOINT SP "\nEnter End Point: ") SPX SP );END SETQ (setvar "polarmode" 0) (setvar "osmode" 0) (setvar "polarmode" 0) (COMMAND "LINE" (SETQ osp1 (POLAR SP (+ (ANGLE SP EP) (DTR 90)) (/ DIST 2) ) ) (SETQ oep1 (POLAR EP (+ (ANGLE SP EP) (DTR 90)) (/ DIST 2) ) ) "" "LINE" (SETQ osp2 (POLAR SP (- (ANGLE SP EP) (DTR 90)) (/ DIST 2) ) ) (SETQ oep2 (POLAR EP (- (ANGLE SP EP) (DTR 90)) (/ DIST 2) ) ) "" );END COMMAND (SETQ isp1 osp1 iep1 oep1 isp2 osp2 iep2 oep2 ) (setvar "orthomode" get_ortho) (setvar "osmode" holding_setting_for_osmode) (setvar "snapmode" get_snap_setting) (setvar "polarmode" get_polar_setting) );END OF PLDRW FUNCTION
Solved! Go to Solution.