帮助-无函数定义:
你好,大师。这个lisp需要你的帮助,这是我的旧lisp,可以从对象中获取区域,但在autocad 2016中不起作用,我认为这是在bpoly函数中,但我不知道如何修复错误:“无函数定义:vlax ename->vla object”
(vl-load-com)
(defun arear (clave / nentpoly area os listapolys caso 2dacadena contador0 contador1 *Error*)
(DEFUN *ERROR* (msg)
(PRINC "Error >> ")
(princ msg)
(if (= msg "Function cancelled")
(arearmistake1)
(arearmistake2))
(quit)
)
(defun arearmistake1 ()
(alert "\nFuncion Cancelada")
(setvar "osmode" os)
(foreach caso listapolys (entdel caso))
(setvar "cecolor" colorant)
(setvar "Clayer" CapaActual)
(princ)
)
(defun arearmistake2 ()
(alert "\nEl contorno no esta Cerrado")
(setvar "osmode" os)
(foreach caso listapolys (entdel caso))
(setvar "cecolor" colorant)
(setvar "Clayer" CapaActual)
(princ)
)
(setq CapaActual (getvar "Clayer"))
(if (null (tblobjname "STYLE" "R-80"))
(entmake '((0 . "STYLE")(100 . "AcDbSymbolTableRecord")(100 . "AcDbTextStyleTableRecord")
(2 . "R-80")(70 . 0)(40 . 0.18)(3 . "ROMANS")))
)
(if (null (tblobjname "LAYER" "A-TEXTOS 10"))
(entmake '((0 . "LAYER")(100 . "AcDbSymbolTableRecord")(100 . "AcDbLayerTableRecord")
(2 . "A-TEXTOS 10")(70 . 0)(62 . 10)(370 . -3)))
)
(setq contador0 0)
(setq contador1 0)
(setq area 0.0
os (getvar "osmode"))
(setvar "osmode" 4)
(setq colorant (getvar "cecolor"))
(setvar "cecolor" "201")
(While
(setq nentpoly (bpoly (getpoint "\n<Indique punto(s)>(intro para terminar):")))
(redraw nentpoly 3)
(setq contador0 (1+ contador0))
(setq area (+ area (vlax-curve-getArea (vlax-ename->vla-object nentpoly)))
listapolys (cons nentpoly listapolys))
(princ (strcat (fnum area) " m2"))
(setq contador1 (1+ contador1))
(setq areax (vlax-curve-getArea (vlax-ename->vla-object nentpoly)))
(princ (strcat "\n(AREA " CLAVE ""(itoa contador0)") (ACUMULADO: " (fnum area) " m2) " "(PARCIAL: " (fnum areax) " m2)"))
)
(setq areac (fnum area))
(prompt (strcat "\nAREA TOTAL DE " clave ": " areac " m2"))(terpri)
(setvar "cecolor" colorant)
(entmake (list '(0 . "TEXT")'(100 . "AcDbEntity")'(8 . "A-TEXTOS 10")'(100 . "AcDbText")
'(62 . 256)'(10 0.0 0.0 0.0)(cons 40 0.18)(cons 1 (strcat clave " = " areac "m2"))
'(50 . 0.0)'(41 . 1)'(51 . 0.0)'(7 . "R-80")'(72 . 2)
(cons 11 (getpoint "\n<Punto para colocar el texto>"))'(210 0.0 0.0 1.0)'(100 . "AcDbText")'(73 . 1)))
(foreach caso listapolys (entdel caso))
(setvar "osmode" os)
(prin1)
)
(defun fnum(num)
(setq f 2) ;redondea a 2 decimales
(setq int (rtos num 2 f)
pos (vl-string-search "." int)
pos (if pos pos (strlen int))
fp(substr int (+ pos 2) (strlen int))
int (substr int 1 pos))
(while (< (strlen fp) f) (setq fp (strcat fp "0")))
(repeat (/ pos 3)
(setq int (strcat (substr int 1 (- pos 3))
","
(substr int (- pos 2) (strlen int)))
pos (- pos 3)))
(vl-string-left-trim ","
(if (zerop f) int(strcat int "." fp))
)
)
(defun c:CRP () (arear "CARPETA ASFÁLTICA"))
谢谢你的关注。 将(vl load com)添加到代码中。 请参见此处:
http://www.cadtutor.net/forum/showthread.php?1390-如何在此存档中使用LISP例程&p=339645&viewfull=1#post339645 由于OP代码的第一行以(vl load com)开头,我的第一个想法是检查是否首先加载了visual lisp函数(vl.arx)。
p、 我们的功能在我的电脑(autocad 2016)上运行,因此您可能需要(重新)安装/启用vlisp 多亏了大家的努力,但(vl加载com)才刚刚开始
所以我只能复习vl。但是我不知道怎么做 启动visual lisp编辑器vlisp时,如果成功加载visual lisp库并加载vl load com,则“vl catch all apply”等命令应以蓝色显示。如果没有,您可能应该重新安装AutoCAD或在系统中搜索vl。arx并通过菜单加载:工具->autolisp->加载应用程序
gr.Rlx 此外,样式的创建失败,因此文本对象的创建也将失败。对代码进行了一些小修改。
gr.Rlx
CRP。LSP
页:
[1]