Author Topic: 2d pipe lisp  (Read 15890 times)

0 Members and 2 Guests are viewing this topic.

eric

  • Guest
2d pipe lisp
« on: September 22, 2005, 09:32:15 AM »
I would like to write a lisp routine that would allow me to insert a 2d pipe run in between two points.  Then calculate the length of pipe drawn and return that value to an attribute which would need to be inserted just above the centerline.  Can anyone help?

ronjonp

  • Needs a day job
  • Posts: 7526
Re: 2d pipe lisp
« Reply #1 on: September 22, 2005, 10:49:21 AM »
Not exactly what you are looking for but this routine will allow you to select all the pipe segments and it will place the length in text at the midpoint.

Code: [Select]
;Puts text with objects length------Many thanks to the SWAMP.ORG for all the help

(defun c:rlt (/ *error* u-clayer getboundingbox llc urc s1 index ent obj bbox mpt obj_length txt)
  (command ".undo" "begin") 
(vl-load-com)

;_____________________________
;Error function
;_____________________________

(defun *error* (msg)
   (if
      (not
        (member
          msg
          '("console break" "Function cancelled" "quit / exit abort" "")
        )
      )
       (princ (strcat "\nError: " msg))
    ) ; if
(setvar 'clayer u-clayer)
    (princ)
  ) ;end error function

;_____________________________
;Get User Variables
;_____________________________

(setq u-clayer (getvar 'clayer))
(if (tblsearch "layer" "length")
  (command "-layer" "thaw" "length" "on" "length" "")
  (princ "\n Layer 'length' Created")
)
(command ".-layer" "m" "length" "")
 
  (defun getboundingbox (obj / minpt maxpt)
    (vla-getboundingbox obj 'minpt 'maxpt)
    (mapcar 'vlax-safearray->list (list minpt maxpt))
    (setq llc (vlax-safearray->list minpt)
          urc (vlax-safearray->list maxpt)
    )
    (list llc urc)
  )
  (if (setq sl (ssget '((0 . "LWPOLYLINE,POLYLINE,LINE"))

               )
      )
    (progn
      (setq index -1)
      (while (< (setq index (1+ index)) (sslength sl))
        (setq ent (ssname sl index))
        (setq obj (vlax-ename->vla-object ent))
        (setq bbox (getboundingbox obj)
              llc (car bbox)
              urc (cadr bbox)
              mpt (list (/ (+ (car llc) (car urc)) 2) (/ (+ (cadr llc) (cadr urc)) 2))
        )
        (setq obj_length (vlax-get-property obj 'LENGTH))
        (setq txt (strcat (rtos obj_length)))
        (command "text" "j" "mc" mpt (* (getvar "dimscale") 0.15) "0" txt)
        (princ)
      )
    )
  )
(command ".undo" "end")
(princ)
(*error* "")
(setvar 'clayer u-clayer)
(princ (strcat (itoa index) " entities processed..."))
(princ)
)

Windows 11 x64 - AutoCAD /C3D 2023

Custom Build PC

eric

  • Guest
Re: 2d pipe lisp
« Reply #2 on: September 22, 2005, 11:03:29 AM »
Thanks, ronjonp.  You right its not exactly what I am looking for.  But it is a usefull tool.

eric

  • Guest
Re: 2d pipe lisp
« Reply #3 on: September 22, 2005, 11:14:38 AM »
Just an addition I have already created the attribute tag.  Within the tag I have predefined several fields ie. size, spec, description, qty.  All except the qty field are static.  The returned value from the length of pipe drawn would need to be reflected in this qty field.

eric

  • Guest
Re: 2d pipe lisp
« Reply #4 on: September 22, 2005, 11:22:49 AM »
this is the code our cad manager wrote.  although I cant seem to get it to work.

** edit by MST **
removed code, will attach attach as file
« Last Edit: September 22, 2005, 01:20:37 PM by Mark Thomas »

deegeecees

  • Guest
Re: 2d pipe lisp
« Reply #5 on: September 22, 2005, 11:28:21 AM »
What type of code is that? I've never come across this before.  :?

LE

  • Guest
Re: 2d pipe lisp
« Reply #6 on: September 22, 2005, 11:29:28 AM »
That CM.... is really afraid to loose his job.....

Post an image showing what is the end result, you are looking for....
« Last Edit: September 22, 2005, 11:37:00 AM by LE »

deegeecees

  • Guest
Re: 2d pipe lisp
« Reply #7 on: September 22, 2005, 11:31:23 AM »
Is he numbering every line of code?  :-o

eric

  • Guest
Re: 2d pipe lisp
« Reply #8 on: September 22, 2005, 11:55:33 AM »
LE - I think it is not fear but cautious paranoid. (is politically correct?)

eric

  • Guest
Re: 2d pipe lisp
« Reply #9 on: September 22, 2005, 12:02:09 PM »
Here is an example of what I am looking for.

Keith™

  • Villiage Idiot
  • Seagull
  • Posts: 16899
  • Superior Stupidity at its best
Re: 2d pipe lisp
« Reply #10 on: September 22, 2005, 12:26:50 PM »
Dude that code is atrocious ... it hurts me just to look at it ..
Proud provider of opinion and arrogance since November 22, 2003 at 09:35:31 am
CadJockey Militia Field Marshal

Find me on https://parler.com @kblackie

LE

  • Guest
Re: 2d pipe lisp
« Reply #11 on: September 22, 2005, 01:05:20 PM »
LE - I think it is not fear but cautious paranoid. (is politically correct?)

Code: [Select]
if (cautious == paranoid) {

bs("Does not know what he is doing");

}

eric

  • Guest
Re: 2d pipe lisp
« Reply #12 on: September 22, 2005, 01:14:02 PM »
Tell me about it Keith.  I am going to attempt to write something myself.  I cant see it being as complicated as my CM is making it out to be.

LE

  • Guest
Re: 2d pipe lisp
« Reply #13 on: September 22, 2005, 01:21:18 PM »
Eric,

See if you can adapt the following code on what you are looking for... Is an old code I used to draw plywood

Code: [Select]
(defun rcmd-rtd (a) (* (/ a pi) 180.0))

(setq :rcm45Degrees (* pi 0.25))
(setq :rcm90Degrees (* pi 0.5))
(setq :rcm135Degrees (* pi 0.75))
(setq :rcm225Degrees (* pi 1.25))
(setq :rcm270Degrees (* pi 1.5))
(setq :rcm315Degrees (* pi 1.75))
(setq :rcm360Degrees (* pi 2.0))

(if (not :rcmAtemp) (setq :rcmAtemp 0.0))

(defun rcmd-plywood  (thick /    p1   p2   p3   p4 l1   ang  code
      g1   g2 g3   g4   g1a  g2a  g3a g4a  oct  g4b
      g1b  g3b g2b  ply)
  (initget 8)
  (setvar "blipmode" 1)
  (setvar "osmode" 0)
  (setq p1 (getpoint "\nFirst end: "))

  (setvar "blipmode" 0)
  (prompt "\nDrag for direction: ")
  (setq
    ang (getangle
  (strcat "\nAlignment angle <"
  (rtos (rcmd-rtd :rcmAtemp) 2 0)
  ">: ")
  p1))
  (if (= ang nil)
    (setq ang :rcmAtemp)
    (setq :rcmAtemp ang))

  (setq code 5)
  (setvar "osmode" 0)
  (prompt " Other end: ")
  (setq oct 0.125)
  (if (equal thick 0.125)
    (setq ply 0))
  (if (equal thick 0.250)
    (setq ply 1))
  (if (equal thick 0.375)
    (setq ply 2))
  (if (equal thick 0.500)
    (setq ply 3))
  (if (equal thick 0.625)
    (setq ply 4))
  (if (equal thick 0.750)
    (setq ply 5))
  (while (= code 5)
    (setq l1 (grread 1 6 1))
    (if (and p2 p4 (= ply 0))
      (grvecs (list 256 g1 g2 g4 g3)))
    (if (and p2 p4 (= ply 1))
      (grvecs (list 256 g1 g2 g4 g3 p1 p2)))
    (if (and p2 p4 (= ply 2))
      (grvecs (list 256 g1 g2 g4 g3 g1a g2a g4a g3a)))
    (if (and p2 p4 (= ply 3))
      (grvecs (list 256 g1 g2 g4 g3 g1a g2a g4a g3a p1 p2)))
    (if (and p2 p4 (= ply 4))
      (grvecs
(list 256 g1 g2 g4 g3 g1a g2a g4a g3a g4b g3b g1b g2b)))
    (if (and p2 p4 (= ply 5))
      (grvecs
(list 256 g1 g2 g4 g3 g1a g2a g4a g3a g4b g3b g1b g2b p1 p2)))
    (setq p3   (cadr l1)
  code (car l1)
  p2   (inters p1
       (polar p1 ang 1)
       p3
       (polar p3 (+ ang :rcm90Degrees) 1)
       nil)
  p4   (inters p1
       (polar p1 (+ ang :rcm90Degrees) 1)
       p3
       (polar p3 (+ ang pi) 1)
       nil))
    (if (= ply 0)
      (progn
(setq g3 (polar p2 (angle p1 p4) (/ thick 2))
      g2 (polar p2 (angle p4 p1) (/ thick 2))
      g4 (polar p1 (angle p1 p4) (/ thick 2))
      g1 (polar p1 (angle p4 p1) (/ thick 2)))
(grvecs (list 256 g1 g2 g4 g3))))
    (if (= ply 1)
      (progn
(setq g3 (polar p2 (angle p1 p4) (/ thick 2))
      g2 (polar p2 (angle p4 p1) (/ thick 2))
      g4 (polar p1 (angle p1 p4) (/ thick 2))
      g1 (polar p1 (angle p4 p1) (/ thick 2)))
(grvecs (list 256 g1 g2 g4 g3 p1 p2))))
    (if (= ply 2)
      (progn
(setq g3  (polar p2 (angle p1 p4) (/ thick 2))
      g3a (polar g3 (angle p4 p1) oct)
      g2  (polar p2 (angle p4 p1) (/ thick 2))
      g2a (polar g2 (angle p1 p4) oct)
      g4  (polar p1 (angle p1 p4) (/ thick 2))
      g4a (polar g4 (angle p4 p1) oct)
      g1  (polar p1 (angle p4 p1) (/ thick 2))
      g1a (polar g1 (angle p1 p4) oct))
(grvecs (list 256 g1 g2 g4 g3 g1a g2a g4a g3a))))
    (if (= ply 3)
      (progn
(setq g3  (polar p2 (angle p1 p4) (/ thick 2))
      g3a (polar g3 (angle p4 p1) oct)
      g2  (polar p2 (angle p4 p1) (/ thick 2))
      g2a (polar g2 (angle p1 p4) oct)
      g4  (polar p1 (angle p1 p4) (/ thick 2))
      g4a (polar g4 (angle p4 p1) oct)
      g1  (polar p1 (angle p4 p1) (/ thick 2))
      g1a (polar g1 (angle p1 p4) oct))
(grvecs (list 256 g1 g2 g4 g3 g1a g2a g4a g3a p1 p2))))
    (if (= ply 4)
      (progn
(setq g3  (polar p2 (angle p1 p4) (/ thick 2))
      g3a (polar g3 (angle p4 p1) oct)
      g3b (polar g3a (angle p4 p1) oct)
      g2  (polar p2 (angle p4 p1) (/ thick 2))
      g2a (polar g2 (angle p1 p4) oct)
      g2b (polar g2a (angle p1 p4) oct)
      g4  (polar p1 (angle p1 p4) (/ thick 2))
      g4a (polar g4 (angle p4 p1) oct)
      g4b (polar g4a (angle p4 p1) oct)
      g1  (polar p1 (angle p4 p1) (/ thick 2))
      g1a (polar g1 (angle p1 p4) oct)
      g1b (polar g1a (angle p1 p4) oct))
(grvecs
  (list 256 g1 g2 g4 g3 g1a g2a g4a g3a g4b g3b g1b g2b))))
    (if (= ply 5)
      (progn
(setq g3  (polar p2 (angle p1 p4) (/ thick 2))
      g3a (polar g3 (angle p4 p1) oct)
      g3b (polar g3a (angle p4 p1) oct)
      g2  (polar p2 (angle p4 p1) (/ thick 2))
      g2a (polar g2 (angle p1 p4) oct)
      g2b (polar g2a (angle p1 p4) oct)
      g4  (polar p1 (angle p1 p4) (/ thick 2))
      g4a (polar g4 (angle p4 p1) oct)
      g4b
  (polar g4a (angle p4 p1) oct)
      g1  (polar p1 (angle p4 p1) (/ thick 2))
      g1a (polar g1 (angle p1 p4) oct)
      g1b (polar g1a (angle p1 p4) oct))
(grvecs
  (list 256 g1 g2 g4 g3 g1a g2a g4a g3a g4b g3b g1b g2b p1 p2)))))
  (if (= ply 0) ; 1/8
    (progn
      (grvecs (list 256 g1 g2 g4 g3))

;;;;;;      (rcmd-setLayer
;;;;;; :rcmLayerPlywood
;;;;;; :rcmColorPlywood
;;;;;; :rcmLineTypePlywood
;;;;;; nil)

      (command "_.line" g1 g2 "" "_.line" g4 g3 "")))
  (if (= ply 1) ; 1/4
    (progn
      (grvecs (list 256 g1 g2 g4 g3 p1 p2))

;;;;;;      (rcmd-setLayer
;;;;;; :rcmLayerPlywood
;;;;;; :rcmColorPlywood
;;;;;; :rcmLineTypePlywood
;;;;;; nil)

      (command "_.line" g1 g2 "" "_.line" g4 g3 "")

;;;;;;      (rcmd-setLayer
;;;;;; :rcmLayerPlywoodInt
;;;;;; :rcmColorPlywoodInt
;;;;;; :rcmLineTypePlywoodInt
;;;;;; nil)

      (command "_.line" p1 p2 "")))
  (if (= ply 2) ; 3/8
    (progn
      (grvecs (list 256 g1 g2 g4 g3 g1a g2a g4a g3a))

;;;;;;      (rcmd-setLayer
;;;;;; :rcmLayerPlywood
;;;;;; :rcmColorPlywood
;;;;;; :rcmLineTypePlywood
;;;;;; nil)

      (command "_.line" g1 g2 "" "_.line" g4 g3 "")

;;;;;;      (rcmd-setLayer
;;;;;; :rcmLayerPlywoodInt
;;;;;; :rcmColorPlywoodInt
;;;;;; :rcmLineTypePlywoodInt
;;;;;; nil)

      (command "_.line" g1a g2a "" "_.line" g4a g3a "")))
  (if (= ply 3) ; 1/2
    (progn
      (grvecs (list 256 g1 g2 g4 g3 g1a g2a g4a g3a p1 p2))

;;;;;;      (rcmd-setLayer
;;;;;; :rcmLayerPlywood
;;;;;; :rcmColorPlywood
;;;;;; :rcmLineTypePlywood
;;;;;; nil)

      (command "_.line" g1 g2 "" "_.line" g4 g3 "")

;;;;;;      (rcmd-setLayer
;;;;;; :rcmLayerPlywoodInt
;;;;;; :rcmColorPlywoodInt
;;;;;; :rcmLineTypePlywoodInt
;;;;;; nil)

      (command "_.line" g1a g2a "" "_.line" g4a g3a "" "_.line" p1 p2 "")))
  (if (= ply 4) ; 5/8
    (progn
      (grvecs
(list 256 g1 g2 g4 g3 g1a g2a g4a g3a g4b g3b g1b g2b))

;;;;;;      (rcmd-setLayer
;;;;;; :rcmLayerPlywood
;;;;;; :rcmColorPlywood
;;;;;; :rcmLineTypePlywood
;;;;;; nil)

      (command "_.line" g1 g2 "" "_.line" g4 g3 "")

;;;;;;      (rcmd-setLayer
;;;;;; :rcmLayerPlywoodInt
;;;;;; :rcmColorPlywoodInt
;;;;;; :rcmLineTypePlywoodInt
;;;;;; nil)

      (command "_.line"        g1a     g2a     ""      "_.line"
       g4a     g3a     ""      "_.line"        g4b     g3b
       ""      "_.line"        g1b     g2b     "")))
  (if (= ply 5) ; 3/4
    (progn
      (grvecs
(list 256 g1 g2 g4 g3 g1a g2a g4a g3a g4b g3b g1b g2b p1 p2))

;;;;;;      (rcmd-setLayer
;;;;;; :rcmLayerPlywood
;;;;;; :rcmColorPlywood
;;;;;; :rcmLineTypePlywood
;;;;;; nil)

      (command "_.line" g1 g2 "" "_.line" g4 g3 "")

;;;;;;      (rcmd-setLayer
;;;;;; :rcmLayerPlywoodInt
;;;;;; :rcmColorPlywoodInt
;;;;;; :rcmLineTypePlywoodInt
;;;;;; nil)

      (command "_.line"        g1a     g2a     ""      "_.line"
       g4a     g3a     ""      "_.line"        g4b     g3b
       ""      "_.line"        g1b     g2b     ""      "_.line"
       p1      p2      "")))
  (redraw)
  (princ))

Code: [Select]
Command: (RCMD-PLYWOOD 0.375)

HTH.

Keith™

  • Villiage Idiot
  • Seagull
  • Posts: 16899
  • Superior Stupidity at its best
Re: 2d pipe lisp
« Reply #14 on: September 22, 2005, 01:28:29 PM »
How's this ..
Code: [Select]
Function IsParanoid ( ByVal Empl As Employee ) As Boolean
Dim CM as Dumbass
Set CM = Empl.Boss

If CM.cautious = "paranoid" Then
 CM.value = VbNull
 CM.Title = "Dumbass"
 IsParanoid = True
Else
 IsParanoid = False
End If
End Function
Proud provider of opinion and arrogance since November 22, 2003 at 09:35:31 am
CadJockey Militia Field Marshal

Find me on https://parler.com @kblackie