lisp 插件 帮忙调换一下位置

lisp 插件 帮忙调换一下位置,第1张

(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程序,根据圆自动绘制圆弧等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9478430.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-28
下一篇 2023-04-28

发表评论

登录后才能评论

评论列表(0条)

保存