bad argument type: VLA-OBJECT nil on break or escape

bad argument type: VLA-OBJECT nil on break or escape

Strydaris2492
Advocate Advocate
426 Views
1 Reply
Message 1 of 2

bad argument type: VLA-OBJECT nil on break or escape

Strydaris2492
Advocate
Advocate

Hey everyone,

Was hoping someone could shed some light on my situation here.

Still learning so I hope someone can explain what going on with this code.

For the most part this code works but I am having a couple issues with it and I cant find out why.

First I am trying to set the osnap to be 545 then return it back to the original settings.

When I use (setq os (getvar 'osmode)) it doesnt seem to reset back to original settings if you break mid way through.

I think that has to do with the VLA-OBJECT nil error but I can seem to find where it is.

Does anyone have any thoughts on what can be causing the error on the break?

(prompt "\nLoading Interpolate for Cassidy & Co. siting & grading. Use the command ITP to run. ")

(defun C:itp ( / lay1 lay2 lay3 blk blk1 blk2 blk3 acadobj adoc msp activeundo txt dis newhgt ang1 grdtxt tmpln inserted pt1 pt2 pt3 pm par atb cl counter hgt1 hgt2 os str ent1 ent2 os *error*)
   (vl-load-com)
;Set Undo start mark
   (vla-endundomark (setq adoc (vla-get-activedocument (vlax-get-acad-object))))
   (vla-startundomark adoc)
   
   ;Error Function
	(defun *error* ( msg / adoc tmpln)
   		(if tmpln (entdel tmpln))
   		(if os (setvar "osmode" os))
	   	(if cl (setvar 'clayer cl))
	   	(if blk (entdel blk))
   		(vla-EndUndoMark adoc)
   		(if (not (wcmatch (strcase msg T) "*break*,*cancel*,*exit*"))
      		(princ (strcat "Error: " msg))
      		)
   	);end *error


  ;;START COMMAND;;
  (setq os (getvar "osmode")
	cl (getvar 'clayer)
	)
  ;Set Layers and block names
  (setq lay1 "S-Slope-Frozen"
	lay2 "PROP-GRADE"
	lay3 "SLOPE-PH1"
	blk1 "DRAR"
	blk2 "Grade_Point"
	blk3 "PSEX"
	);End setq for varible layers and blocks
  (setvar 'clayer lay2)
  
  ;create  the layers if they do not exist
  (if (null (tblsearch "LAYER" lay1))
    (entmake
      (list
	'(0 . "LAYER")
	'(100 . "AcDbSymbolTableRecord")
	'(100 . "AcDbLayerTableRecord")
	'(70 . 0)
	(cons 2 lay1)
	(cons 62 222)
	(cons 290 0)
	)
      )
    );end if

(setvar "osmode" 545)
  
(_getelevs)
   ;(while (and (/= ent1 nil)(/= ent2 nil)) ;NEED TO ADD SOMETHING HERE TO CHECK BEFORE IT CONTINUES THE WHILE LOOP 
   (SETQ pt3 (GETPOINT "\nSelect Interpolation point(s) along the line: [ENTER to Exit]")
	pt3 (list(car pt3)(cadr pt3) 0 )
	  )
;;****************DO THE MATH*****************;;
	(setq pm (/ (distance pt1 pt3)(distance pt1 pt2))
	      dis    (- hgt2 hgt1)
	      newhgt (+ hgt1 (* pm dis))
	      ang1   (+ (angle pt1 pt2)(angle '(0 0 0) (trans '(1 0 0) 1 0 t)))
	      grdtxt (rtos newhgt 2 2)
	      )
   (if (and (> ang1 (DtR 180))(< ang1 (DtR 360)))
	    (setq ang1 (+ (angle pt2 pt1)(angle '(0 0 0) (trans '(1 0 0) 1 0 t))))
      )
	    
   (cond
      ((setq blk (vlax-invoke
		    (vlax-get
		       (vla-get-ActiveLayout
			  (vla-get-activedocument
			     (vlax-get-acad-object)))
		       'Block)
		    'InsertBlock  (trans pt3 1 0)
		    blk2 1 1 1 ang1)
	     );_ setq

      (setq atb  (Car (vlax-invoke blk 'Getattributes)))
       (vla-put-textstring atb grdtxt)
       (princ "\n<< Pick point for text location >>")
       (_NextTrick blk)
       (setq inserted (cons blk inserted)
	     );_setq
       );_ cond 1
      ((and (setq str (eq (type pt3) 'STR))(eq pt3 "U") inserted)
       (vla-delete (car inserted))
       (setq inserted (Cdr inserted)
	     counter (1- counter))
       );_cond 2
      (str (princ "\nNothing to UNDO")
       )
      );_ end cond

;Add the calculations to the command line so newbies can understand how interpolation works.
(prompt "\nInterpolate point equation: ")
(prompt "\nInterpolated Value = ( Distance From X to Interp Point / Total Distance ) X ( Grade Value X - Grade Value Y ) + Grade Value X")
(prompt (strcat "\n" grdtxt " = ((" (rtos (distance pt1 pt3) 2 4) " / " (rtos (distance pt1 pt2) 2 4) ") x (" (rtos hgt2 2 2)" - " (rtos hgt1 2 2) ")) + " (rtos hgt1 2 2)")"))
  (princ)
     ;)
(if tmpln (entdel tmpln))
(setvar "osmode" os)
(setvar 'clayer cl)
(redraw ent1 4)
(redraw ent2 4)

;Undo Mark
(vla-endundomark adoc) 
(princ)
  )

(defun _NextTrick  (blk / end code pt2 hypotenuse p)
      (while
            (and (null end)
                 (setq p    (grread t 15 0)
                       code (car p)))
                 (cond
                       ((= 5 code)
			(setq hypotenuse (distance (vlax-get blk 'insertionpoint) (trans (cadr p) 1 0)))  
			(vla-put-value (nth 2 (vlax-invoke blk 'getdynamicblockproperties))
			  		(* -1 hypotenuse (cos (- (angle (trans (cadr p) 1 0) (vlax-get blk 'insertionpoint))
							      		(vlax-get blk 'rotation)
							   )
						      )
					)
			)
			(vla-put-value (nth 3 (vlax-invoke blk 'getdynamicblockproperties))
			  		(* -1 hypotenuse (sin (- (angle (trans (cadr p) 1 0) (vlax-get blk 'insertionpoint))
							                (vlax-get blk 'rotation)
						       	   )
						      )
					)
			)
                        )
                       ((or (= 2 code) (= code 3))
                        (setq end T)))
                 )
      )

 

0 Likes
427 Views
1 Reply
Reply (1)
Message 2 of 2

Strydaris2492
Advocate
Advocate

I have narrowed it down to the _NextTrick portion of the code, I THINK.

AM i not exactly sure how to use the error trace log but this is what it pops out.

LOG Error trace
...............
<1> :ERROR-BREAK
[2] (GRREAD T 15 0)
[3] (_NEXTTRICK #<VLA-OBJECT IAcadBlockReference 000002654b007888>)
[4] (C:ITP)
<5> :CALLBACK-ENTRY
<6> :ARQ-SUBR-CALLBACK
...............

 

0 Likes