(defun C:tes (/ #g1 &k1 &kw1 c8 pt)
(princ "\n请选择要变成圆的点:")
(if (setq &kw1 (ssget '((0 "POINT")))) ;选取圆
(progn
(while (setq &k1 (ssname &kw1 0))
(setq &kw1 (ssdel &k1 &kw1))
(setq #g1 (entget &k1)
pt (cdr (assoc 10 #g1))
) ;提取圆心坐标
(setq c8 (cdr (assoc 8 #g1))) ;提取圆图层
(entmake (list '(0 "CIRCLE") (cons 8 c8) (cons 10 pt) (cons 40 25)))
;绘制点
(entdel &k1) ;删除圆
)
)
)
(princ)
)
;;点变成半径25的圆
如果是曲线,可以用VLISP 提供的 AutoLISP 扩展函数求取,具体如下:
1、用(setq ep (vlax-curve-getEndPoint curve-obj))取得终点坐标;
2、用(setq len (/ (vlax-curve-getDistAtPoint curve-obj ep) 2))获得线段起至中点的长度;
3、用(setq mp (vlax-curve-getPointA2tDist curve-obj len))求出mp即为中点坐标;
4、用(setq sp (vlax-curve-getStartPoint curve-obj))可直接求出起点坐标。
注:1、curve-obj为曲线,需要用(vlax-ename->vla-object entname)函数将其转换为vla类型;
2、调用这些函数前,需要添加一行代码:(vl-load-com),否则上述函数无法使用。
;用下面程序一试
(defun C:YH()
(setq cm (getvar "cmdecho")
os (getvar "osmode")
)
(setvar "cmdecho" 0)
(command "_undo" "be")
(princ "\n请选择圆")
(if (setq ssa (ssget '((0 "circle"))))
(progn
(setvar "osmode" 0)
(setq n (sslength ssa) i 0)
(repeat n
(setq ent (ssname ssa i)
dxf (entget ent)
r (cdr (assoc 40 dxf))
po (cdr (assoc 10 dxf))
i (1+ i)
)
(setq p1 (mapcar '+ po (list 00 r))
p2 (mapcar '+ po (list ( (1- 02) r) 00))
p3 (mapcar '+ po (list 00 (- r)))
p4 (mapcar '+ po (list ( (1- 01) r) 00))
)
(command "_arc" p1 p2 p3)
(command "_bhatch" "p" "ANSI31" ( 004 r) "" p4 "")
)
)
)
(command "_undo" "e")
(setvar "osmode" os) (setvar "cmdecho" cm)
(princ)
)
(defun c:cl ( )
(if (setq pt (getpoint "\n选择圆心: "))
(if (setq rl (getdist pt "\n输入半径: "))
(progn
(setq os (getvar "osmode") cm (getvar "cmdecho"))
(command "_OSMODE" 0 "_CMDECHO" 0 "_Circle" pt rl)
(command "_Line" (polar pt 0 ( rl 12)) (polar pt pi ( rl 12)) "")
(command "_Chprop" "L" "" "C" "BYLAYER" "LT" "BYLAYER" "LW" "BYLAYER" "LA" "CENTER" "")
(command "_Line" (polar pt ( pi 05) ( rl 12)) (polar pt ( pi 15) ( rl 12)) "")
(command "_Chprop" "L" "" "C" "BYLAYER" "LT" "BYLAYER" "LW" "BYLAYER" "LA" "CENTER" "")
(command "_OSMODE" os "_CMDECHO" cm)
)
)
)
(princ)
)
新建一文本文件,把上面的复制到进去,重命令文件为cllsp,加载后运行cl命令
另外你说的 "长出画或者原直线长出10%即可" 是指直线的长度单边超出圆的直径的10%么如果不是,详细告知,我修改程序。
你好!
首先,为方便编程起见,你的文本文件中的数据格式要改变一下,把“,”改为“空格”。
我们的程序从文本文件中读一行数据,并将数据以表的形式返回。对应你的文本文件,它返回包含x和y坐标值的表。你可以把返回的这个表作为圆心使用。
编写下列程序:
(DEFUN auto-circle (name r / fr s)
(SETQ fr (OPEN name “r”)
s (READ-LINE fr)
)
(WHILE s
(setq pc (read (strcat "(" s ")")))
(command "circle" pc r)
(setq s (read-line fr))
)
(CLOSE fr)
)
调用程序:
函数(auto-circle "ATXT" 10)执行后,Atxt文件中的数据就作为圆心坐标画出半径为10的圆。
试一试下面这段程序。加载程序后,输入替换为块的新建命令KK。程序执行前需存在图块并知道该图块的名称,程序运行时需要输入图块名称。
(defun c:kk (/ a b c d i k n)
(setq a (ssget "X" '((0 "CIRCLE")))
n (sslength a)
i 0
k (getstring "\n输入图块名称:")
)
(repeat n
(setq b (ssname a i)
c (entget b)
d (cdr (assoc 10 c))
i (1+ i)
)
(command "insert" k d 1 1 0
"erase" b ""
)
)
)
以上就是关于lisp 插件 帮忙调换一下位置全部的内容,包括:lisp 插件 帮忙调换一下位置、autocad lisp中,什么函数可以获取曲线的起始点和中点、求lisp程序,根据圆自动绘制圆弧等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)