“坏argum”是什么意思
“错误参数类型:lentyp”的含义是什么如何消除这些错误?当使用CONS(或LIST)函数和SUBST函数更改块的插入点及其属性的插入点时,我遇到了这个错误。奇怪的是,代码似乎正常工作,但似乎在最后一次出现ENTMOD函数时崩溃了。使用ENTUPD会导致错误显示在命令提示符下,程序立即终止。当不使用ENTUPD函数时,ENTMOD函数都是通过WHILE语句完成的,并且只有在重新生成后才会更改。
我简直不敢相信我花了几乎整个周末来解决这个问题。在这一点上,它正在成为一项使命,尽管我最好还是把头靠在墙上。
感谢您对解决此问题的任何帮助。非常感谢你的帮助。
射线 来自Autodesk主持人。。
LISP实体谓词。此消息表示当
应为实体名称。您可能正在拍摄列表的末尾,因此
在: >光线1757
是的,它遗漏了实体。你能发布你的代码吗?我认为这是一个非常简单的错误。这是错误示例:
Command: (entget Empty_Variable) ; variable Empty_Variable = nil
; error: bad argument type: lentityp nil
或类型不匹配
Command: (entget 23) ; integer 23 instead ename
; error: bad argument type: lentityp 23 谢谢你的回复。很抱歉,我花了这么多时间上传程序,因为我在发布之前对代码进行了大量的故障排除和清理。
我想我现在理解了这个错误的含义,但我不知道为什么会发生在这里。ENTUPD命令被注释掉,程序可以运行,但需要重新生成。这个ENTUPD函数似乎带来了“坏参数”问题。我不明白为什么会这样。ENTMOD函数接近尾声,只在“主程序”上方几行(附上示例图纸。)我感谢你在这个问题上的帮助。
我还需要解决另外两个问题。一个是块的递增,另一个是(vla startundomark adoc)函数。我想我可以解决随时间递增的问题。
谢谢你的帮助。
射线
(defun C:FA ( / adoc)
;;;(setq adoc(vla-get-activedocument (vlax-get-acad-object)))
;;;(vla-startundomark adoc)
(defun get_acad_vars ()
(setq osm-set (getvar "osmode"))
(setq cmd-ech (getvar "cmdecho"))
(setvar "cmdecho" 0)
(setq lay-cur (getvar "clayer"))) ; END defun to get original settings to be restored
(defun res_acad_vars ()
(setvar"osmode" osm-set)
(setvar"clayer" lay-cur)
(setvar"pickstyle" 1 )
(command "wipeout" "f" "off")
(setvar"cmdecho" cmd-ech)) ; END defun to restore original acad settings
(defun init_vars ()
(setq pick_ok 0)
(if (= first_time nil)
(progn (princ "SELECT reference point BEFORE Continuing: ")
(setq ins_pnt (getpoint))
(setq pick_start ins_pnt)
(setq first_time 1)))) ; END progn & defun init_vars procedure
(defun *error* (msg)
(res_acad_vars)
(princ msg)
(princ)) ; END defun *error*
(defun rel_dist ()
(setq rel_x72.0
rel_y1 0.0
rel_y2 16.0)) ;END defun relative_distances procedure
(defun get_obj () ; find new insertion point or pick block/mtext to move
(setvar "osmode" 520)
(initget 128 "Select")
(setq ins_pnt (getpoint "\nPICK Block or Mtext or <S>elect new reference point: "))
(cond
((null ins_pnt)
(progn
(res_acad_vars)
(exit))) ;cond 1 - picked enter
((listp ins_pnt)
(progn
(setq pick_object 1)
)) ;cond 2 - picked object
((= ins_pnt "Select")
(progn
(setq pick_object 0)
(setq ins_pnt (getpoint))
(setq pick_start ins_pnt)
(setq first_time 1))) ;cond 3 - select new ref point
)) ;END cond function & defun in_pts
(defun start_pnt ()
(setq new_x(carpick_start))
(setq new_y1 (cadr pick_start));<===========Problem here?
(setq new_y2 (- new_y1 rel_y2))) ;END defun start_pnt
(defunincrement ()
(setq new_x (+ new_x rel_x))
(setq new_y (+ new_y1 rel_y1))
(setq y2_val_n (+ new_y rel_y2))
)
(defun pick_obj ()
(setq ss_obj (ssget ins_pnt))
(setq ent (entget (ssname ss_obj 0)));get the entire entity list
(cond ((= (cdr (cadr ent)) "INSERT")
(progn
(setq pick_ok 1) ; found a BLock
(setq list_num 10)
(increment)
(mov_ins_pnt)
(while(/= "SEQEND" (cdr (cadr ent)))
(setq list_num 11)
(setq ent_nam (cdr (car ent)))
(setq ent (entget (entnext ent_nam)))
(mov_ins_pnt)
) ;END while
) ;progn - found block
) ;condition 1
((= (cdr (cadr ent)) "MTEXT")
(progn
(setq pick_ok 2) ; found MText
(setq list_num 10)
(increment)
(mov_ins_pnt)
)) ;END progn & condition 2
) ;END cond
);defun pick_obj
(defun mov_ins_pnt () ;move the insertion point
(setq blck_pnt (assoc list_num ent));get the list of the block insertion point
(setq old_x (cadrblck_pnt)) ;insertion point x value at start)
(setq old_y (caddr blck_pnt)) ;insertion point y value at start)
(setq delta_x(- new_x old_x))
(setq delta_y(- new_y old_y))
(setq x1_val(+ old_x delta_x)) ; for block/attributes
(setq x2_val(+ old_x delta_x)) ; for mtext
(setq y1_val(+ old_y delta_y))
(setq y2_val(+ old_y delta_y))
(cond ((= pick_ok 1)(progn ; for block/attributes
(setq new_x x1_val)
(setq new_y new_y1)
(setq x1_val(+ old_x delta_x))
))
((= pick_ok 2)(progn ; for mtext
(setq new_x x2_val)
(setq new_y new_y2)
(setq just1 (assoc 71 ent))
(setq just2 (cons71 2))
(setq ent (subst just2 just1ent)));progn
);cond pick_ok 2
) ;cond
(setq ins_pnt(list new_xnew_y0.0)) ; new insertion point
(setq mov_pnt(cons list_numins_pnt)) ; new insertion point LIST
(setq ent (subst mov_pntblck_pntent))
(entmod ent)
;(ENTUPD ENT) ;;;;; <<<=========BAD ARGUMENT PROBLEM HERE *****
);defun move insertion point
;==============================
; MAIN PROGRAM
;==============================
(init_vars)
(get_acad_vars)
(rel_dist)
(get_obj)
(start_pnt)
(increment)
(pick_obj)
(res_acad_vars)
;;; (vla-endundomark adoc)
(princ)
;==============================
);END PROGRAM defun Command: FA
谢谢
埃里克 我的例程也有同样的问题,它会产生相同的错误消息:;错误:错误的参数类型:lentyp nil。它跳过IF每个子程序中的ENTSEL。
帮助
(定义c:hln(/LAS OS R1 R2 XNv XFv r2v Y1v X1v X2v P1v P2v xnh xfh r2h y1h x1h x2h p1h p2h)
(SETVAR“CMDECHO”0)
(SETQ LAS(GETVAR“CLAYER”))
(SETQ OS(GETVAR“OSMODE”))
(initget“V H”)
(setq direc(getkword“类型:垂直/水平”)
;需要从水平更改为垂直
;交换涉及所选线路的组件
;if语句应该控制这些组件的使用
;简单的方法是,如果V,则将组件更改为XNV和XNH,等等。
(命令“layer”s“hid”)
(setvar“osmode”512)
(如果(=“V”direc)
(
(SETQ R1(ENTSEL“拾取线:”))
(SETQ XNv(GETPOINT“拾取板底侧:”)(ERPI);在顶线上选择的点
(SETQ XFv(GETPOINT“拾取板的顶部侧面:”)(ERPI);在底线上选择的点
(setq R2v(entget(车辆R1)))
(setq Y1v(CADR(ASSOC 10 R2v));X坐标
(setq X1v(CADR XNv));底侧Y坐标
(setq X2v(CADR XFv));顶部Y坐标
(SETQ P1v(列表Y1v X1v))
(SETQ P2v(列表Y1v X2v))
(命令行p1v p2v/c/c)))
(如果(=“H”direc)
(
(SETQ R2(ENTSEL“拾取线:”))
(SETQ XNh(GETPOINT“拾取板的右侧:”)(ERPI)
(SETQ XFh(GETPOINT“拾取板的左侧:”)(ERPI)
(setq R2h(entget(car R2)))
(setq Y1h(CADDR(ASSOC 11 R2h));Y坐标
(setq X1h(CADR XNh));近边X坐标
(setq X2h(CAR XFh));远侧X坐标
(SETQ P1h(列表X2H Y1h))
(SETQ P2h(列表X1h Y1h))
(命令行p1h p2h/c/c)))
(命令“LAYER”S“LAS”)
(SETVAR“OSMODE”183)
(普林斯)
)
我要做的是在相邻视图中绘制一条隐藏线,只需在该线的另一个“可见”视图中选择该线。我想指定是垂直还是水平(我认为可能没有必要)来画线。但我无法选择任何一行。 快速浏览一下,您会发现一些无效的IF语句。试试康德。
例如(未经测试,因为我不知道它做什么,也不想执行它)
(defun c:redef_instruments ()
(setvar "clayer" "sym")
(setq lst_blk (ai_table "BLOCK" 0))
(if lst_blk
(progn
(foreach str_blk lst_blk
(setq file_blk
(open (strcat (getvar "dwgprefix") "InstrumentMap.csv") "r")
)
(while (setq record (read-line file_blk))
(setq str_name (nth 0 (strparse record ",")))
(if
(and
(= (strcase str_name) (strcase str_blk))
(> (length (strparse record ",")) 1)
(/= (setq str_newname (nth 1 (strparse record ","))) "")
)
(progn
(redefineinstruments str_name str_newname)
)
)
)
(close file_blk)
)
)
)
)
(defun redefineinstruments (old new / blist
attlst_old attlst_new
val scx scy scz
)
(setq ss_old (ssget "x" (list '(0 . "INSERT") (cons 2 old))))
(if ss_old
(progn
(setq blist
(sel2lst ss_old)
)
(foreach nb blist
(command "insert"
(strcat new "=" (findfile (strcat new ".dwg")))
(getval 10 nb)
"XYZ"
1
1
1
(rtod (getval 50 nb))
)
(setq attlst_old (att2lst nb))
(setq attlst_new (att2lst (entlast)))
(setval 1 (getval 1 (nth 0 attlst_old)) (nth 0 attlst_new))
(setval 1 (getval 1 (nth 1 attlst_old)) (nth 1 attlst_new))
(setval 1 (getval 1 (nth 2 attlst_old)) (nth 2 attlst_new))
(setval 1 (getval 1 (nth 3 attlst_old)) (nth 3 attlst_new))
(setval 1 (getval 1 (nth 4 attlst_old)) (nth 4 attlst_new))
(setval 1 (getval 1 (nth 5 attlst_old)) (nth 5 attlst_new))
(setval 1 (getval 1 (nth 6 attlst_old)) (nth 6 attlst_new))
(setval 1 (getval 1 (nth 7 attlst_old)) (nth 7 attlst_new))
(setval 1 (getval 1 (nth 8 attlst_old)) (nth 8 attlst_new))
(setval 1 (getval 1 (nth 9 attlst_old)) (nth 9 attlst_new))
(setval 1 (getval 1 (nth 10 attlst_old)) (nth 10 attlst_new))
(setval 1 (getval 1 (nth 11 attlst_old)) (nth 11 attlst_new))
(setval 1 (getval 1 (nth 12 attlst_old)) (nth 12 attlst_new))
(entdel nb)
)
)
)
(entupd (entlast))
)
哦,是的,请注意:
http://www.cadtutor.net/forum/showthread.php?t=9184 好的,试过了。返回的列表格式不正确。括号错误。检查了他们。在“(Cond”语句中没有完全包含。在
(命令行p1h p2h/c/c)
)
))) ;就在这里
这起作用了,但它回来时
命令:(加载“hidlnn”)
; 错误:参数太多:(IF(=“V”DIREC)
那么,回到这一点上。。。。如果愿意,请帮助。
嘿,想要一份我用来创建这个的图纸(非常简单)的副本吗? 好吧,解决了这个问题。参数错误过多。
现在回到:;错误:错误的参数类型:lentyp nil
所以康德没有工作。仍然需要帮助。谢谢 代码如下:
(defun c:hln (/ LAS OS R1 R2 XNv XFv r2v Y1v X1v X2v P1v P2v xnh xfh r2h y1h x1h x2h p1h p2h)
(SETVAR "CMDECHO" 0)
(SETQ LAS (GETVAR "CLAYER"))
(SETQ OS (GETVAR "OSMODE"))
(initget "V H")
(setq direc (getkword "Type: Vert/Horiz<current>"))
;need to change from horizontal to vertical
;swap involves components of chosen line
;if statement should control use of those components
;simple way, if V then change components to XNV versus XNH, etc.
(command "layer" "s" "hid" "")
(setvar "osmode" 512)
(cond
((= "V" direc)
(SETQ R1 (ENTSEL "Pick line: "))
(SETQ XNv (GETPOINT "Pick BOTTOM side of plate: "))
(terpri) ;point selected on top line
(SETQ XFv (GETPOINT "Pick TOP hside of plate: "))
(terpri) ;point selected on bottom line
(setq R2v (entget (car R1)))
(setq Y1v (CADR (ASSOC 10 R2v))) ;X COORDINATE
(setq X1v (CADR XNv)) ;BOTTOM SIDE Y COORDINATE
(setq X2v (CADR XFv)) ;TOP SIDE Y COORDINATE
(SETQ P1v (LIST Y1v X1v))
(SETQ P2v (LIST Y1v X2v))
(command "line" p1v p2v /c/c)
)
((= "H" direc)
(SETQ R2 (ENTSEL "Pick line: "))
(SETQ XNh (GETPOINT "Pick RIGHT side of plate: "))
(terpri)
(SETQ XFh (GETPOINT "Pick LEFT side of plate: "))
(terpri)
(setq R2h (entget (car R2)))
(setq Y1h (CADDR (ASSOC 11 R2h))) ;Y COORDINATE
(setq X1h (CADR XNh)) ;NEAR SIDE X COORDINATE
(setq X2h (CAR XFh)) ;FAR SIDE X COORDINATE
(SETQ P1h (LIST X2H Y1h))
(SETQ P2h (LIST X1h Y1h))
(command "line" p1h p2h /c/c)
)
)
(COMMAND "LAYER" "S" LAS "")
(SETVAR "OSMODE" 183)
(PRINC)
)
页:
[1]
2