实用的LSP源代码,值得参考
liminnet
liminnet Lv.5
2007年08月09日 10:21:24
只看楼主

(defun c:cd (/) (setvar "cmdecho" 1) (setq a1 (getpoint "第一点")) (princ "") (setq a2 (getpoint "第二点")) (princ "") (setq ang (* (/ (angle a1 a2) pi) 180)) (setq dist (rtos (/ (distance a1 a2) 1000) 2 1))

(defun c:cd (/)
(setvar "cmdecho" 1)
(setq a1 (getpoint "第一点"))
(princ "
")
(setq a2 (getpoint "第二点"))
(princ "
")
(setq ang (* (/ (angle a1 a2) pi) 180))
(setq dist (rtos (/ (distance a1 a2) 1000) 2 1))
(setq dist1 (strcat "L=" dist "m"))
(setq a3 (getpoint "文字插入点"))
(command "text" a3 "350" ang dist1)
)


我想在这段代码里点功能就是提示我;管径Dn=多少,i=多少,然后用人工输入数据,出
来的效果是这样子:管径Dn=300 L=9.8m i=0.008,大哥大姐帮帮忙啊
免费打赏
sailorcwx
2007年08月14日 00:58:31
12楼
(defun c:dn( / YH_DN_ANGLE YH_DN_CONTENT1 YH_DN_DST1 YH_DN_ENT YH_DN_HIGHT1 YH_DN_LINE YH_DN_PT YH_DN_PT1 YH_DN_PT2 YH_OLDSNAP)
(if (not YH_dn_hight) (setq YH_dn_hight 350))
(if (not YH_dn_dst) (setq YH_dn_dst 100))
(if (not YH_dn_content) (setq YH_dn_content ""))
(initget "H D")
(while (setq YH_dn_line (entsel "选择直线或右键退出[修改字高(H)/修改偏移距离(D)]"))
(cond
((= YH_dn_line "H")
(setq YH_dn_hight1 (getreal (strcat "\n输入新字高<" (rtos YH_dn_hight) ">:")))
(if (and YH_dn_hight1 (> YH_dn_hight1 0))
(setq YH_dn_hight YH_dn_hight1)
)
)
((= YH_dn_line "D")
(setq YH_dn_dst1 (getdist (strcat "\n输入新偏移距离<" (rtos YH_dn_dst) ">:")))
(if (and YH_dn_dst1 (> YH_dn_dst1 0))
(setq YH_dn_dst YH_dn_dst1)
)
)
(T
(setq YH_oldsnap (getvar "osmode"))
(setvar "osmode" 0)
(setq YH_dn_ent (car YH_dn_line)
YH_dn_pt (cadr YH_dn_line)
YH_dn_pt1 (osnap YH_dn_pt "NEA")
YH_dn_angle (+ (/ (* 180 (angle YH_dn_pt YH_dn_pt1)) pi) 90)
)
(if (and (> YH_dn_angle 90) (<= YH_dn_angle 270))
(setq YH_dn_angle (+ YH_dn_angle 180)))
(setq YH_dn_pt2 (polar YH_dn_pt1 (/ (* pi (+ YH_dn_angle 90)) 180) YH_dn_dst))
(setvar "osmode" YH_oldsnap)
(if (= YH_dn_content "")
(setq YH_dn_content1 (getstring (strcat "\n输入文字内容:")))
(setq YH_dn_content1 (getstring (strcat "\n输入文字内容<" YH_dn_content ">:")))
)
(if (/= YH_dn_content1 "") (setq YH_dn_content YH_dn_content1))
(command "text" "J" "BC" YH_dn_pt2 YH_dn_hight YH_dn_angle YH_dn_content)
)
)
(initget "H D")
)
(princ)
)
回复
liminnet
2007年08月14日 09:25:52
13楼
流浪大哥,那个Dn程序有点bug,就是偏移距离有错误,改为多少都是偏同一个地方的,再帮我改一下,求求你了.能再帮个忙吗?流浪大哥,我经常要做室外排水平面图,对于各类圆型管井内的管线都要重复的无数次用tr命令来剪掉,这工作量太多也都是重复的,我想是这样的,流浪大哥就是先用L命令画好所有管线走向后,然后用lisp编写一个可以定义直径大小的圆,然后提示插入点(是圆的圆心位置),我就用鼠标捕捉到L线的交点,定义的圆就插入交点处,与此同时,能自动把圆内所有的L线自动删掉,效果如下图,这个想法一直是我想实现的,帮帮我,流浪大哥哥,这是我最后一个心愿了,拜托了
回复
liminnet
2007年08月14日 10:15:26
14楼
如图:
回复
sailorcwx
2007年08月14日 11:46:11
15楼
dn在我这边测试没有这个bug,注意偏移距离不能输入负值,否则按无效输入处理
回复
liminnet
2007年08月14日 12:34:23
16楼
我的是CAD2008,我默认的是100但出来的是这样效果,上面的问题可以帮下忙吗,流浪大哥
回复
sailorcwx
2007年08月14日 13:40:50
17楼
(defun c:jj(/ YH_JJ_A0 YH_JJ_JR1 YH_JJ_PT YH_JJ_PTLIST YH_JJ_TIMES YH_OLDSNAP)
(if (not YH_jj_jr) (setq YH_jj_jr 350))
(initget "R")
(while (setq YH_jj_pt (getpoint "\点取井中心或右键退出[设置半径(R)]:"))
(if (= YH_jj_pt "R")
(progn
(setq YH_jj_jr1 (getreal (strcat "\n输入新半径<" (rtos YH_jj_jr) ">:")))
(if (and YH_jj_jr1 (> YH_jj_jr1 0))(setq YH_jj_jr YH_jj_jr1))
)
(progn
(setq YH_oldsnap (getvar "osmode"))
(setvar "osmode" 0)
(entmake (list
’(0 . "CIRCLE")
’(100 . "AcDbEntity")
’(100 . "AcDbCircle")
(cons 10 YH_jj_pt)
(cons 40 YH_jj_jr)
)
)
(command "trim" (entlast) "" "f")
(setq YH_jj_ptlist ’()
YH_jj_a0 0
YH_jj_times 36
)
(repeat YH_jj_times
(setq YH_jj_a0 (+ YH_jj_a0 (/ (* pi 2) YH_jj_times)))
(command (polar YH_jj_pt YH_jj_a0 YH_jj_jr))
)
(command """")
(setvar "osmode" YH_oldsnap)
)
)
(initget "R")
)
(princ)
)
回复
sailorcwx
2007年08月14日 13:44:14
18楼
关于dn那个程序,你把文字对齐取消就可以了,就是把
(command "text" "J" "BC" YH_dn_pt2 YH_dn_hight YH_dn_angle YH_dn_content)
改为
(command "text" YH_dn_pt2 YH_dn_hight YH_dn_angle YH_dn_content)
回复
liminnet
2007年08月14日 14:27:22
19楼
流浪大哥,上面那段代码,我弄成lsp文件后加载,输入jj怎么没有反应啊
回复
liminnet
2007年08月14日 15:06:00
20楼
流浪大哥,再帮帮我看看啊,这么lisp对我很在帮助的,麻烦啦
回复
sailorcwx
2007年08月14日 17:27:54
21楼
快捷命令冲突
改成其他命令就行了
回复

相关推荐

APP内打开