JLEE9569 Posted December 27, 2011 Posted December 27, 2011 Hoping someone can please help me. I'm looking for a LISP routine that will auto insert concrete arch pipe including wall thickness by rise and span. Has anyone ever come across something like this before? Thanks Quote
Tharwat Posted December 27, 2011 Posted December 27, 2011 What do you mean by Arch Pipes ? is it a Block ? Quote
ScribbleJ Posted December 27, 2011 Posted December 27, 2011 As far as a lisp routine goes I have not come across one myself but there is a member here who's moniker is Lee Mac and he is great with this sort of thing. Why would you need a lisp routine to do this for you? Is this something that you need to do repetitiously? Do you want to add it to a profile with exaggeration or is this for a typical detail? I assume since you want to show the wall thickness that it is concrete arch pipe and not corrugated metal. We need more information in order to give you the proper advice. Quote
fixo Posted December 27, 2011 Posted December 27, 2011 Welcome on board Next time add a bit more explantion, please as well as the attached picture may helps for you and us Try this lisp but you have to draw the centerline of an arc before, then load lisp, type xtube, in the command line specify diameters and select this arc ;; written by Alexander Smirnoff (Latvia) aka ASMI (defun c:xtube(/ 3DPOS ACTDOC ACTLAY ACTSP BASELINE BASESET DICOUNT DIVDID EXCIR EXENT EXTUBE INCIR INENT INTUBE LAYST OBJTYPE OLDECHO OLDEXDIA OLDINDIA STARTPT XORD YORD ZORD *ERROR*) (vl-load-com) (defun *error* (msg) (vla-put-Lock actLay laySt) (setvar "CMDECHO" oldEcho) (vla-EndUndoMark actDoc) (princ) ); end of *error* (if(not tube:exDia)(setq tube:exDia 40.0));outer diam (default) (if(not tube:inDia)(setq tube:inDia 37.0));inner diam (default) (setq actDoc (vla-get-ActiveDocument (vlax-get-Acad-object)) actLay(vla-get-ActiveLayer actDoc) oldexDia tube:exDia oldinDia tube:inDia oldEcho(getvar "CMDECHO") ); end setq (vla-StartUndoMark actDoc) (setvar "CMDECHO" 0) (if(= 0(vla-get-ActiveSpace actDoc)) (setq actSp(vla-get-PaperSpace actDoc)) (setq actSp(vla-get-ModelSpace actDoc)) ); end if (setq laySt(vla-get-Lock actLay)) (vla-put-Lock actLay :vlax-false) (setq tube:exDia (getreal (strcat "\nSpecify external diameter <"(rtos tube:exDia)">: ")) tube:inDia (getreal (strcat "\nSpecify internal diameter <"(rtos tube:inDia)">: ")) ); end setq (if(null tube:inDia)(setq tube:inDia oldinDia)) (if(null tube:exDia)(setq tube:exDia oldexDia)) (if(< tube:inDia tube:exDia) (progn (princ "\n<<< Select objects to extrude and press Enter >>>") (if (setq baseSet (ssget '((-4 . "<OR")(0 . "*LINE")(0 . "CIRCLE") (0 . "ARC")(0 . "ELLIPSE")(-4 . "OR>") (-4 . "<NOT")(-4 . "<OR")(0 . "SPLINE") (0 . "MLINE")(-4 . "OR>")(-4 . "NOT>")))) (progn (setq baseSet(vl-remove-if 'listp (mapcar 'cadr (ssnamex baseSet)))) (foreach pathEnt baseSet (setq baseLine (vlax-ename->vla-object pathEnt) objType(vla-get-ObjectName baseLine) startPt(vlax-curve-getStartPoint baseLine) 3dPos (vlax-curve-getFirstDeriv baseLine (vlax-curve-getParamAtPoint baseLine startPt)) diCount(strlen (itoa (apply 'max (mapcar 'abs (mapcar 'fix startPt))))) divDid "1" ); end setq (repeat diCount (setq divDid(strcat divDid "0")) ); end repeat (setq divDid(atoi divDid)) (if(/= 0.0(car 3dPos)) (setq XOrd(/(car 3dPos)divDid)) (setq XOrd (car 3dPos)) ); end if (if(/= 0.0(cadr 3dPos)) (setq YOrd(/(cadr 3dPos)divDid)) (setq YOrd (cadr 3dPos)) ); end if (if(/= 0.0(nth 2 3dPos)) (setq ZOrd(/(nth 2 3dPos)divDid)) (setq ZOrd (nth 2 3dPos)) ); end if (setq 3dPos(list XOrd YOrd ZOrd)) (setq exCir (vla-addCircle actSp (vlax-3d-Point startPt) (/ tube:exDia 2)) inCir (vla-addCircle actSp (vlax-3d-Point startPt) (/ tube:inDia 2)) ); end setq (vla-put-Normal exCir(vlax-3D-point 3dPos)) (vla-put-Normal inCir(vlax-3D-point 3dPos)) (setq exEnt(vlax-vla-object->ename exCir) inEnt(vlax-vla-object->ename inCir) ) ; end setq (command "_.extrude" exEnt "" "_p" pathEnt) (setq exTube(entlast)) (command "_.extrude" inEnt "" "_p" pathEnt) (setq inTube(entlast)) (command "_subtract" exTube "" inTube "") (command "_.erase" exEnt "") (command "_.erase" inEnt "") (vla-delete baseLine) ); end foreach (vla-put-Lock actLay laySt) (setvar "CMDECHO" oldEcho) ); end progn ); end if ); end progn (princ "\nInternal diameter more or equal than external diameter! ") ); end if (vla-EndUndoMark actDoc) (princ) ); end of c:xtube Quote
JLEE9569 Posted December 28, 2011 Author Posted December 28, 2011 Hello Calvin, Yes the concrete arch pipes are something that I will have to draw for all the various sizes. I have been looking for blocks also. I'm just trying to minimize my production time while I set up a new detail data base. Thanks for your help. Quote
JLEE9569 Posted December 28, 2011 Author Posted December 28, 2011 Thanks Fixo, I'm going to give this a try in the morning. I'll try to provide more information next time, I'm drawing concrete arch pipes for storm drainage standard details. That's why I was wanting the wall thickness also, I'm setting up a detail data base so I'll have these already drawn with all types of catchbasins when I need them. Quote
JLEE9569 Posted December 28, 2011 Author Posted December 28, 2011 I'm drawing concrete arch pipes for storm drainage standard details. If I could find blocks to insert that would be great also. I'm just trying to minimize my production time by predrawing the details so I can insert them when I need them. Quote
Lee Mac Posted December 28, 2011 Posted December 28, 2011 I'm drawing concrete arch pipes for storm drainage standard details. If I could find blocks to insert that would be great also. I'm just trying to minimize my production time by predrawing the details so I can insert them when I need them. You might benefit from creating a set of Dynamic Blocks for your pipes. I'm not from that industry, but I would assume there exists a fixed set of available pipe bores, each of which could be a Visibility State in the Dynamic Block, or even controlled by a Stretch Action restricted by a Lookup Parameter for the various sizes. Furthermore, each Visibility State might have a Stretch Action for the length of the pipe, with possible restrictions on the available lengths controlled by another Lookup Parameter, if such restrictions exist - there are many possibilities to explore. This route would also mean there would be no reliance on 3rd-party software such as LISP/.NET applications, since you are using OOTB functionality. As far as a lisp routine goes I have not come across one myself but there is a member here who's moniker is Lee Mac and he is great with this sort of thing. Cheers Calvin Quote
ScribbleJ Posted December 28, 2011 Posted December 28, 2011 You might benefit from creating a set of Dynamic Blocks for your pipes. That is a great idea Lee. I really need to spend more time with learning the in's and out's of dynamic blocks. Here at Kennedy/Jenks we use CAD Masters Standard Manager which works great for the most part but it doesn't cover every possible aspect of our industry. Cheers Calvin Back at'cha Lee Quote
JLEE9569 Posted December 28, 2011 Author Posted December 28, 2011 I will have to take a look at the CAD Masters Standard Manager as we don't normaly use that where I'm at. I just hate to recreate the wheel over and over again so I was hoping for a short cut before i got started creating the details. Thanks for all the feed back! Quote
ScribbleJ Posted December 28, 2011 Posted December 28, 2011 CAD Masters Standard Manager is really what you make it. It can be updated at any time you have a new standard set of blocks. CAD Masters are great at what they do and have the best and most professional people in the industry working for them. We use them quite often with their training classes and support over the phone. There support and training staff are all engineers who are very experienced in many engineering disciplines. They are even hired out as engineers in the industry to help keep money flowing in CAD Masters. Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.