deepseek源码,批量标注
本帖最后由 a405692168 于 2025-2-13 17:23 编辑用 deepseek源码写了个批量标注插件,主要想代替CAD自带命令"QDIM",能加载,但运行不出结果,大佬们帮忙看下修正下。。。
(defun c:PLBZ (/ *error* osmode cmdecho pt1 pt2 ss filtered-entities dimlayer)
;; 错误处理函数
(defun *error* (msg)
(if osmode (setvar "osmode" osmode)) ;; 还原捕捉设置
(if cmdecho (setvar "cmdecho" cmdecho)) ;; 还原命令回显
(princ "\n程序终止")
)
;; 保存当前设置
(setq osmode (getvar "osmode")
cmdecho (getvar "cmdecho"))
(setvar "cmdecho" 0)
;; 检查或创建 "dim" 图层
(setq dimlayer "dim")
(if (not (tblsearch "layer" dimlayer))
(command "._layer" "_m" dimlayer "")
)
;; 主程序
(princ "\n拉线批量标注插件 - 命令: PLBZ")
(princ "\n指定标注起始点和方向点,支持水平和垂直方向标注。")
;; 获取标注起始点
(setq pt1 (getpoint "\n指定标注起始点: "))
(if (not pt1)
(progn
(princ "\n未指定起始点,程序退出。")
(exit)
)
)
;; 获取标注方向点
(setq pt2 (getpoint pt1 "\n指定标注方向点: "))
(if (not pt2)
(progn
(princ "\n未指定方向点,程序退出。")
(exit)
)
)
;; 过滤实体
(setq filtered-entities (filter-entities pt1 pt2))
(if (not filtered-entities)
(progn
(princ "\n未找到符合条件的实体,程序退出。")
(exit)
)
)
;; 创建标注
(create-dimensions filtered-entities pt1 pt2 dimlayer)
;; 尺寸文字避让
(text-avoidance)
;; 还原设置
(setvar "osmode" osmode)
(setvar "cmdecho" cmdecho)
(princ "\n标注完成。")
(prin1)
)
;; 过滤实体函数
(defun filter-entities (pt1 pt2 / ss filtered)
(setq ss (ssget "F" (list pt1 pt2)
'((-4 . "<NOT")
(-4 . "<OR")
(0 . "TEXT,DIMENSION,INSERT,MTEXT,HATCH") ;; 过滤实体类型
(8 . "五金,点划线") ;; 过滤图层
(-4 . "OR>")
(-4 . "NOT>"))))
(if ss
(progn
(setq filtered (vl-remove-if-not
'(lambda (x)
(and (not (member (cdr (assoc 0 (entget x))) '("TEXT" "DIMENSION" "INSERT" "MTEXT" "HATCH")))
(not (member (cdr (assoc 8 (entget x))) '("五金" "点划线")))))
(vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))))
filtered)
nil)
)
;; 创建标注函数
(defun create-dimensions (entities pt1 pt2 dimlayer / ang pt)
(setq ang (angle pt1 pt2))
(foreach ent entities
(setq pt (cdr (assoc 10 (entget ent))))
(if (or (equal ang 0.0 0.01) (equal ang pi 0.01)) ;; 水平方向
(entmake
(list
'(0 . "DIMENSION")
'(100 . "AcDbEntity")
'(100 . "AcDbDimension")
(cons 8 dimlayer) ;; 设置标注图层
(cons 10 pt)
'(70 . 32) ;; 水平标注
'(1 . "") ;; 尺寸文字
'(100 . "AcDbAlignedDimension")
(cons 13 pt)
(cons 14 (polar pt ang 10.0)) ;; 标注长度
)
)
(if (or (equal ang (/ pi 2) 0.01) (equal ang (* pi 1.5) 0.01)) ;; 垂直方向
(entmake
(list
'(0 . "DIMENSION")
'(100 . "AcDbEntity")
'(100 . "AcDbDimension")
(cons 8 dimlayer) ;; 设置标注图层
(cons 10 pt)
'(70 . 33) ;; 垂直标注
'(1 . "") ;; 尺寸文字
'(100 . "AcDbAlignedDimension")
(cons 13 pt)
(cons 14 (polar pt ang 10.0)) ;; 标注长度
)
)
)
)
))
;; 尺寸文字避让函数
(defun text-avoidance (/ ss i ent data pt1 pt2)
(setq ss (ssget "_X" '((0 . "DIMENSION"))))
(if ss
(progn
(setq i 0)
(repeat (sslength ss)
(setq ent (ssname ss i)
data (entget ent)
pt1 (cdr (assoc 13 data))
pt2 (cdr (assoc 14 data)))
;; 调整文字位置
(entmod (subst (cons 11 (polar (mapcar '* (mapcar '+ pt1 pt2) '(0.5 0.5 0.5)) (assoc 11 data) data))
(setq i (1+ i))
)
)
)
)))
想要这样的效果吗?
zmzk 发表于 2025-2-13 18:28
好奇,怎么看出 是用ai 写的代码啊?看来ai 与人抢饭碗的时代来了
用 deepseek源码写了个批量标注插件,主要想代替CAD自带命令"QDIM",能加载,但运行不出结果,大佬们帮忙看下修正下。。 又来这种用ai写代码,靠别人改代码的帖子。 liuhe 发表于 2025-2-13 17:22
又来这种用ai写代码,靠别人改代码的帖子。
好奇,怎么看出 是用ai 写的代码啊?看来ai 与人抢饭碗的时代来了 多问几次deepseek让他改,他会改好的,我让他写过,多改几次就能用的,有热心的大哥能帮就帮,不想帮的直接略过,没必要出言讽刺,:D- 白嫖DS和白嫖论坛高手相比,还是白嫖DS更靠得住,起码服务态度好。 主要最近deepseek火,所以试了一下,但AI写出来的还是不行,AI取代人力还早。。。。 AI没有想象力,这是最本质的区别,人有! deepseek写的,就找deepseek改 其它别说,,,人家这个AI写出来的程序有条有理,,,分开一个个小函数...看得很清楚....论谈里很多大神与的lisp程序像屎一个...又臭又长,,,功能像是能正常用.....
页:
[1]
2