Jump to content

using 2dpro for isometric drawing


exceed

Recommended Posts

spacer.png

 

https://www.theswamp.org/index.php?topic=37429.msg424402#msg424402

 

I tried using the routine from this link, It was cool, 

but the actual length after flattening changed

so I couldn't use it for my isometric drawing.

 

http://www.lee-mac.com/2dprojection.html

 

So, I thought about using the same author's 2dpro to draw an isometric drawing that matches the actual length.

 

1. create a frame with ISOFRAME,

2. do 2DPRO in the desired direction,

3. and do a fake 2d extrude with ISOEXTRUDE.

 

I only assisted a little, Lee Mac's 2dpro do all of them.

 

 

In reality, ISOFRAME does not need to be the same as the actual size,

only needs to provide a unit plane,

but it is written in the actual size for guidelines when working.

 

If the direction is different, you can ROTATE or MIRROR it in a flat state.

 

(defun c:ISOFRAME (/ dtr p1 p2 recminy recminx recmaxx recmaxy ent minpt maxpt xdist ydist isoyorigin isoxorigin 
                   isoorigin isopt1 isopt2 isopt3 planiso northiso eastiso
                  ) 
  (defun DTR (a)  ;degrees to radians function
    (* PI (/ a 180.0))
  )
  (setq p1 (getpoint "\n pick start point of range : "))
  (setq p2 (getcorner p1 "\n pick end point of range : "))
  (cond 
    ((>= (car p1) (car p2))
      (setq recminx (car p2))
      (setq recmaxx (car p1))
    )
    (t
      (setq recminx (car p1))
      (setq recmaxx (car p2))
    )
  )
  (cond
    ((>= (cadr p1) (cadr p2))
      (setq recminy (cadr p2))
      (setq recmaxy (cadr p1))
    )
    (t
      (setq recminy (cadr p1))
      (setq recmaxy (cadr p2))
    )
  )
  (setq ent (entmakex
                  (list (cons 0 "LWPOLYLINE") 
                        (cons 100 "AcDbEntity")
                        (cons 67 0)
                        (cons 62 8)
                        (cons 48 5)
                        (cons 370 -3)
                        (cons 100 "AcDbPolyline")
                        (cons 90 4)
                        (cons 70 1)
                        (cons 43 0)
                        (cons 38 0)
                        (cons 39 0)
                        (cons 10 (list recminx recminy))
                        (cons 40 0)
                        (cons 41 0)
                        (cons 42 0)
                        (cons 91 0)
                        (cons 10 (list recminx recmaxy))
                        (cons 40 0)
                        (cons 41 0)
                        (cons 42 0)
                        (cons 91 0)
                        (cons 10 (list recmaxx recmaxy))
                        (cons 40 0)
                        (cons 41 0)
                        (cons 42 0)
                        (cons 91 0)
                        (cons 10 (list recmaxx recminy))
                        (cons 40 0)
                        (cons 41 0)
                        (cons 42 0)
                        (cons 91 0)
                  )
                )
  )
  
  
  
  ;(setq ent (entlast))
  (vla-getboundingbox (vlax-ename->vla-object ent) 'minpt 'maxpt)
  (setq minpt (vlax-safearray->list minpt))
  (setq maxpt (vlax-safearray->list maxpt))
  (setq xdist (abs (- (car maxpt) (car minpt))))
  (setq ydist (abs (- (cadr maxpt) (cadr minpt))))
  ;(setq isoyorigin (cadr maxpt))
  ;(setq isoxorigin (/ (+ (car minpt) (car maxpt)) 2))
  ;(setq isoorigin (list isoxorigin isoyorigin 0.0))
  (setq isoorigin maxpt)
  (setq isopt1 (polar isoorigin (dtr 30.0) ydist))
  (setq isopt2 (polar isoorigin (dtr 150.0) xdist))
  (setq isopt3 (polar isopt2 (dtr 30.0) ydist))
  (setq planiso (entmakex 
                  (list (cons 0 "LWPOLYLINE") 
                        (cons 100 "AcDbEntity")
                        (cons 67 0)
                        (cons 62 8)
                        (cons 48 5)
                        (cons 370 -3)
                        (cons 100 "AcDbPolyline")
                        (cons 90 4)
                        (cons 70 1)
                        (cons 43 0)
                        (cons 38 0)
                        (cons 39 0)
                        (cons 10 isoorigin)
                        (cons 40 0)
                        (cons 41 0)
                        (cons 42 0)
                        (cons 91 0)
                        (cons 10 isopt2)
                        (cons 40 0)
                        (cons 41 0)
                        (cons 42 0)
                        (cons 91 0)
                        (cons 10 isopt3)
                        (cons 40 0)
                        (cons 41 0)
                        (cons 42 0)
                        (cons 91 0)
                        (cons 10 isopt1)
                        (cons 40 0)
                        (cons 41 0)
                        (cons 42 0)
                        (cons 91 0)
                  )
                )
  )
  (setq northiso (entmakex 
                   (list (cons 0 "LWPOLYLINE") 
                         (cons 100 "AcDbEntity")
                         (cons 67 0)
                         (cons 62 8)
                         (cons 48 5)
                         (cons 370 -3)
                         (cons 100 "AcDbPolyline")
                         (cons 90 4)
                         (cons 70 1)
                         (cons 43 0)
                         (cons 38 0)
                         (cons 39 0)
                         (cons 10 isopt3)
                         (cons 40 0)
                         (cons 41 0)
                         (cons 42 0)
                         (cons 91 0)
                         (cons 10 (polar isopt3 (dtr 210.0) xdist))
                         (cons 40 0)
                         (cons 41 0)
                         (cons 42 0)
                         (cons 91 0)
                         (cons 10 
                               (list (car (polar isopt3 (dtr 210.0) xdist)) 
                                     (+ (cadr (polar isopt3 (dtr 210.0) xdist)) 
                                        ydist
                                     )
                                     0
                               )
                         )
                         (cons 40 0)
                         (cons 41 0)
                         (cons 42 0)
                         (cons 91 0)
                         (cons 10 (list (car isopt3) (+ (cadr isopt3) ydist) 0))
                         (cons 40 0)
                         (cons 41 0)
                         (cons 42 0)
                         (cons 91 0)
                   )
                 )
  )
  (setq eastiso (entmakex
                  (list (cons 0 "LWPOLYLINE") 
                        (cons 100 "AcDbEntity")
                        (cons 67 0)
                        (cons 62 8)
                        (cons 48 5)
                        (cons 370 -3)
                        (cons 100 "AcDbPolyline")
                        (cons 90 4)
                        (cons 70 1)
                        (cons 43 0)
                        (cons 38 0)
                        (cons 39 0)
                        (cons 10 (polar isopt3 (dtr -30.0) xdist))
                        (cons 40 0)
                        (cons 41 0)
                        (cons 42 0)
                        (cons 91 0)
                        (cons 10 isopt3)
                        (cons 40 0)
                        (cons 41 0)
                        (cons 42 0)
                        (cons 91 0)
                        (cons 10 (list (car isopt3) (+ (cadr isopt3) ydist) 0))
                        (cons 40 0)
                        (cons 41 0)
                        (cons 42 0)
                        (cons 91 0)
                        (cons 10 
                              (polar (list (car isopt3) (+ (cadr isopt3) ydist) 0) 
                                     (dtr -30.0)
                                     xdist
                              )
                        )
                        (cons 40 0)
                        (cons 41 0)
                        (cons 42 0)
                        (cons 91 0)
                  )
                )
  )
  (princ)
)

(defun c:ISOEXTRUDE ( / exdist direction setangle ss ssl index ent 
                     obj bbox minpt maxpt boxent int leftlinept
                     rightlinept newobj leftline rightline
                     )
  (princ "\n select object : extrude upside")
  (setq exdist (getreal "\n how much extrude ? (input number)"))
  (setq direction (getstring "\n set direction : (SpaceBar or U - Upside / L - Leftside / R - Rightside)"))
  (if (= direction nil) 
    (setq direction "U")
    (setq direction (strcase direction))
  )
  (princ "\n selected direction is : ")
  (princ direction)
  (cond
    ((= direction "U")
      (setq setangle (dtr 90.0))
    )
    ((= direction "L")
      (setq setangle (dtr 150.0))
    )
    ((= direction "R")
      (setq setangle (dtr 30.0))
    )
    (t
      (setq setangle (dtr 90.0))
    )
  )
  
  
  (setq ss (ssget))
  (setq ssl (sslength ss))
  (setq index 0)
  (repeat ssl
    (setq ent (ssname ss index))
    (setq obj (vlax-ename->vla-object ent))
    (setq bbox (vla-getboundingbox obj 'minpt 'maxpt))
    (setq minpt (vlax-safearray->list minpt))
    (setq maxpt (vlax-safearray->list maxpt))
    (setq boxent (entmakex
                    (list (cons 0 "LWPOLYLINE") 
                          (cons 100 "AcDbEntity")
                          (cons 67 0)
                          (cons 48 5)
                          (cons 370 -3)
                          (cons 100 "AcDbPolyline")
                          (cons 90 4)
                          (cons 70 1)
                          (cons 43 0)
                          (cons 38 0)
                          (cons 39 0)
                          (cons 10 minpt)
                          (cons 40 0)
                          (cons 41 0)
                          (cons 42 0)
                          (cons 91 0)
                          (cons 10 (list (car minpt) (cadr maxpt)))
                          (cons 40 0)
                          (cons 41 0)
                          (cons 42 0)
                          (cons 91 0)
                          (cons 10 maxpt)
                          (cons 40 0)
                          (cons 41 0)
                          (cons 42 0)
                          (cons 91 0)
                          (cons 10 (list (car maxpt) (cadr minpt)))
                          (cons 40 0)
                          (cons 41 0)
                          (cons 42 0)
                          (cons 91 0)
                    )
                  )
    )
    (setq int (LM:intersections obj (vlax-ename->vla-object boxent) acextendnone))
    (setq int (vl-sort int '(lambda (x y) (< (car x) (car y)))))
    (setq leftlinept (car int))
    (setq rightlinept (last int))
    (entdel boxent)
    (setq newobj (vla-copy obj))
    (vla-move newobj (vlax-3d-point (list 0 0 0)) (vlax-3d-point (polar (list 0 0 0) setangle exdist)))
    (vlax-put-property obj 'color 8)
    (setq leftline (entmakex (list (cons 0 "LINE") (cons 62 1) (cons 10 leftlinept) (cons 11 (polar leftlinept setangle exdist)))))
    (setq rightline (entmakex (list (cons 0 "LINE") (cons 62 1) (cons 10 rightlinept) (cons 11 (polar rightlinept setangle exdist)))))
    (setq index (+ index 1))
  )
  (princ)
)

 

Link to comment
Share on other sites

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.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...