ai写lisp程序的新进展,几乎可以直接用了。
本帖最后由 陨落 于 2024-5-23 15:08 编辑先看效果:
User:
帮我用autolisp写一个函数,提示用户选择TEXT图元,然后在被选中的TEXT前增加一个前缀“mypref"
回复:
(defun c:add-text-prefix ()
"在用户选择的文本前添加前缀 'mypref'"
(vl-load-com) ; 加载 ActiveX 支持函数
(setq textObj (car (entsel "\n请选择一个文本对象:"))) ; 选择一个文本对象
(if (not textObj)
(princ "\n没有选择任何文本对象!")
(progn
(setq textData (entget textObj))
(setq oldText (cdr (assoc 1 textData))) ; 获取当前文本内容
(setq newText (strcat "mypref" oldText)) ; 添加前缀
(setq textData (subst (cons 1 newText) (assoc 1 textData) textData)) ; 更新文本内容
(entmod textData) ; 修改文本对象
(princ) ; 清空命令行
)
)
)
(c:add-text-prefix) ; 调用函数添加前缀
User:帮我用autolisp写一个函数,提示用户选择CIRCLE图元,然后将选中的图元向右复制3次,每次复制的时候圆的直径增加100,复制后的圆与上一个圆刚好相切。
回复:
(defun c:copy-circle-with-diameter-increase ()
"选择一个圆,然后将它向右复制 3 次,每次复制时直径增加 100,复制后的圆与上一个圆相切。"
(vl-load-com) ; 加载 ActiveX 支持函数
(setq circleObj (car (entsel "\n请选择一个圆:"))) ; 选择一个圆
(if (not circleObj)
(princ "\n没有选择任何圆!")
(progn
(setq circleData (entget circleObj))
(setq centerPoint (cdr (assoc 10 circleData))) ; 获取圆心点
(setq diameter (cdr (assoc 40 circleData))) ; 获取圆的直径
(setq currentX (car centerPoint)) ; 获取圆心点的 X 坐标
(repeat 3
(setq newDiameter (+ diameter 100)) ; 新圆的直径
(setq newCenterPoint (list (+ currentX (/ newDiameter 2)) (cadr centerPoint))) ; 新圆心点
(setq newCircle (vla-addcircle (vla-get-ModelSpace (vla-get-ActiveDocument (vlax-get-acad-object)))
(vlax-3D-point newCenterPoint)
(/ newDiameter 2))) ; 创建新圆
(setq currentX (+ currentX newDiameter)) ; 更新圆心点的 X 坐标
)
(princ) ; 清空命令行
)
)
)
(c:copy-circle-with-diameter-increase) ; 调用函数执行复制
User:写一个autolisp函数,让用户选择直线(line)和多段线(lwpolyline),并返回所选线的总长度。
回复:(defun get-total-line-length ()
"获取用户选择的直线和多段线的总长度"
(vl-load-com) ; 加载 ActiveX 支持函数
(setq ss (ssget "_X" '((0 . "LINE") (0 . "LWPOLYLINE")))) ; 选择所有直线和多段线-----此处存在错误
(if (not ss)
(princ "\n没有选择任何直线或多段线!")
(progn
(setq totalLength 0.0)
(setq i 0)
(while (< i (sslength ss))
(setq ent (ssname ss i))
(setq entType (cdr (assoc 0 (entget ent))))
(if (equal entType "LINE")
(setq totalLength (+ totalLength (distance (cdr (assoc 10 (entget ent))) (cdr (assoc 11 (entget ent))))))
(if (equal entType "LWPOLYLINE")
(progn
(setq lwPolyObj (vlax-ename->vla-object ent))
(setq totalLength (+ totalLength (vla-get-length lwPolyObj)))
)
)
)
(setq i (+ i 1))
)
(princ (strcat "\n选择的直线和多段线的总长度为: " (rtos totalLength 2 4)))
)
)
(princ)
)
(get-total-line-length) ; 调用函数获取总长度
以上的代码都是由ai一次生成,未经过任何修改
第二第三个程序都存在一些小问题,但是基本都可以直接跑,或者只需要很少的改动
由于都只让ai回答了一次,功能上可能还有些欠缺
综上,可以看出,现在的ai基本可以办到写出来的lisp直接用,只有局部他可能还搞不懂,需要再教一下他
sammy 发表于 2024-5-23 16:15
我在用claude3,感觉也不错,就是它偶尔会引用一些CAD不存在的函数,把错误反馈给它之后会修改。
claud3支持的上下文长度远不及gemini。我觉得google这个发展方向是正确的,支持超级长的上下文,你可以直接让他学会一个东西。。。gemeni1.5flash号称只支持100w token的上下文,实测我已经到了160w了,照样能跑出很好的结果 陨落 发表于 2024-5-23 17:35
claud3支持的上下文长度远不及gemini。我觉得google这个发展方向是正确的,支持超级长的上下文,你可以直 ...
但是我现在还不知道通过什么方式能用到稳定的gemini 没有对抗网络它永远不知道自己的代码会不会有问题,
应该是,生成-编译-报错-语法检查-函数检查-插入打印语句检查输出值-知识库搜索-网络搜索-生成错误段代码-又回到编译... 确实会提高解题时间 这是哪个ai产品,我用过百度ai,通义千问,豆包,都回答的驴唇不对马嘴 aws 发表于 2024-5-23 15:21
这是哪个ai产品,我用过百度ai,通义千问,豆包,都回答的驴唇不对马嘴
gemini,支持超级长上下文的理解和记忆 陨落 发表于 2024-5-23 15:25
gemini,支持超级长上下文的理解和记忆
请教如何喂的,我搞的效果不行 我在用claude3,感觉也不错,就是它偶尔会引用一些CAD不存在的函数,把错误反馈给它之后会修改。 陨落 发表于 2024-5-23 15:25
gemini,支持超级长上下文的理解和记忆
领导:
请给明友们普及一下如何用AI
大家也享受一下哈
感谢 不懂就问?用的啥AI啊????