Announcements
Due to scheduled maintenance, the Autodesk Community will be inaccessible from 10:00PM PDT on Oct 16th for approximately 1 hour. We appreciate your patience during this time.
Visual LISP, AutoLISP and General Customization
cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

AutoCAD PID component coding automation with LSP and DCL

4 REPLIES 4
SOLVED
Reply
Message 1 of 5
wouter_klootwijk
493 Views, 4 Replies

AutoCAD PID component coding automation with LSP and DCL

Hello. I normally don't post on forums, but I'm so stuck in this problem that I see no other option.

 

I'm working on a LISP code that allows me to easily generate the coding of a PID component. Once the user enters the command "ETP_PID", a pop-up window appears. In the first column, the user can choose a component, for example, "ball valve". Additionally, there are three more columns where the user can select various options. After the user clicks "ok", Autocad searches for the dynamic block associated with the name selected in list 1. This block contains an attribute named "Code". I want to merge the previously selected values from lists 1, 2, 3, and 4, and have them filled in my attribute "code".

 

Any ideas?

4 REPLIES 4
Message 2 of 5

hi,

check the following. only inserting is corrected.

(defun C:ETP_PID ();/ WHAT_NEXT LIJST1 LIJST2 LIJST3 LIJST4 dcl_ID LST1 LST2 LST3 LST4 ETP_PID_LST3)

  (setq dcl_id (load_dialog "BPID7.dcl"))

  (if (not (new_dialog "samp1" dcl_id))
      (exit))

  (setq LIJST1 '( "211" "221" "231" "241" "251" "261" "311" "321" "331" "341" "351" "361" "411" "421" "431" "511" "521" "531" "541" "551" "561" "571" "581" "911" "912" "921" "922" "930" "931" "932" "940" "941" "942")
        LIJST2 '( "CV" "GW" "AF" "BW" "VL")
        LIJST3 '( "TT" "XT" "TS" "PT" "PS" "FT" "FS" "LT" "LS" "WM" "EM" "VE" "FM" "BP" "CP" "RK" "VK" "DK" "IK" "TK" "Kogelkraan" "DP" "PK" "GD" "OG" "MF" "DB")
        LIJST4 '( "Aanvoer" "Retour")
  )

  (if (not LST1)(setq LST1 "0"))
  (if (not LST2)(setq LST2 "0"))
  (if (not LST3)(setq LST3 "0"))
  (if (not LST4)(setq LST4 "0"))

  (start_list "LIJST1")
  (mapcar 'add_list LIJST1)
  (end_list)

  (start_list "LIJST2")
  (mapcar 'add_list LIJST2)
  (end_list)

  (start_list "LIJST3")
  (mapcar 'add_list LIJST3)
  (end_list)

  (start_list "LIJST4")
  (mapcar 'add_list LIJST4)
  (end_list)

  (set_tile "LIJST1" LST1)
  (set_tile "LIJST2" LST2)
  (set_tile "LIJST3" LST3)
  (set_tile "LIJST4" LST4)

  
  (action_tile "LIJST1"
  "(setq LST1 $value)
   (setq VariabeleA (nth (atoi LST1) LIJST1))")
  
  (action_tile "LIJST2"
  "(setq LST2 $value)
   (setq VariabeleB (nth (atoi LST2) LIJST2))")
  
  (action_tile "LIJST3"
  "(setq LST3 $value)
   (setq VariabeleC (nth (atoi LST3) LIJST3))
   (setq ETP_PID_LST3 (strcat \"ETP-PID-\" VariabeleC))") 

  (action_tile "LIJST4"
  "(setq LST4 $value)
   (setq VariabeleD (nth (atoi LST4) LIJST4))")

  
  (action_tile
    "cancel"
    "(done_dialog)"
  )

  (action_tile
    "accept"
    "(done_dialog)"
  )

  (start_dialog)

  (unload_dialog dcl_id)

  ; Check of ETP_PID_LST3 is ingesteld en voer de blokinvoeging uit als dat zo is
  (if (and ETP_PID_LST3 (not (equal ETP_PID_LST3 "0")))
      (progn
	(vla-insertblock (vla-get-block (vla-get-activelayout (vla-get-activedocument (vlax-get-acad-object))))
		 		 (vlax-3d-point (getpoint "\Pick point to insert block: "))
		 		 (strcat "ETP-PID-" (nth (atoi LST3) LIJST3)) 
		 		 1 1 1 0
	)
	(setpropertyvalue (entlast) "Code" (strcat (nth (atoi LST1) LIJST1) "-" (nth (atoi LST2) LIJST2) "-" (nth (atoi LST3) LIJST3) "-" (nth (atoi LST4) LIJST4))) 
        (princ "\nBlock inserted.")
      )
  )
  (princ)
)

 

Message 3 of 5

@komondormrex Thank you for your reply!

 

When I use your suggested code, I can select a point, but the block does not insert.

 

I see the following in the command line:

       Command: ETP_PID
       Pick point to insert block: ; error: Automation Error. File error
       Command:

Message 4 of 5

says that there is no definition of block 

 (strcat "ETP-PID-" (nth (atoi LST3) LIJST3))

in the drawing. if so, you need firstly to find where the said block file is and then insert it from the path found. 

Message 5 of 5

@komondormrex Thanks! The code is working now!

Can't find what you're looking for? Ask the community or share your knowledge.

Post to forums  

AutoCAD Inside the Factory


Autodesk Design & Make Report