CAD路径偏移的lisp程序? cad的lisp程序大集合
CAD中用LISP程序实现批量偏移复制,并要求偏移好的线变色?
能说明输入什么样的参数
输出什么样的图形?
变色希望是什么效果的?
(setq cs (getvar "osmode"))
(setvar "osmode" 0 )
(setq n1 (getint "\n个数:"))
(setq d1 (getint "\n间距:"))
(setq ent1 (car (entsel "\n选取图元:")))
(setq p1 (getpoint "\n指定要偏移的那一侧上的点:"))
(setq n 1)
(repeat n1
(command "offset" d1 ent1 p1 "e" )
(setq ent1 (entget (entlast)))
(setq ent1 (subst (cons 62 n) (assoc 62 ent1) ent1 ))
(entmod ent1)
(setq n (1+ n))
(setq ent1 (entlast))
)
上面是基本意思,前提是原图形的颜色不是随层的,点选那一侧上的点时尽量远,因为这个点没有随着增加的线自动变化。
求一个cad lisp 双向偏移的代码
代码的两个问题
1,程序未将运行此命令前的OFFSET偏移值取出并于计算后还原;
2,未选择目标对象时,程序已运算出错,后面的将pickbox即选取框大小值还原部分未运算,所以无法还原选取框的大小。试试下面的代码吧:
(defun c:gg ( )
(if (setq obj (entsel "\n选择双向偏移对象: "))
(progn
(setq cm (getvar "cmdecho") of (getvar "offsetdist"))
(if (null (setq nf (getdist (strcat "\n偏移量: <" (rtos of 2 3) "> "))))
(setq nf of)
)
(setvar "cmdecho" 0) (setvar "offsetdist" nf) (vl-load-com)
(setq obj (vlax-ename->vla-object (car obj)))
(vla-offset obj nf) (vla-offset obj (* nf -1))
(setvar "offsetdist" of) (setvar "cmdecho" cm)
)
(princ "\n未选择偏移对象,程序退出.")
)
(princ)
)
cad的lisp编写能实现点的偏移功能吗
这样思考:
一个封闭的区域,它的边界总是可以找到 左侧 或 右侧,
你在OFFSET时 不用SSGET,用entsel 会得到一个ENT 同时 也可以得到一个你指向的点
你利用这个点,找其右侧微小距离处的一个点,作为OFFSET的偏移点,那么得到的结果是:
1 如果你在Entsel时 点选的是封闭区的左侧,那么这个偏移是向内偏移
2 相反 如果你在Entsel时 点选的是封闭区的右侧,那么这个偏移是向外偏移
以上说法你明白了吗?
cad中可画任意位置,任意方向的指北针的LISP程序
(defun c:zbz()
(setq cm (getvar "cmdecho") os (getvar "osmode"))
(setvar "cmdecho" 0)
(command "_undo" "be")
(while (and (setvar "osmode" 33)
(setq p0 (getpoint "\n插入点<回车结束>:"))
)
(if (= (setq R (getreal "\n指北32313133353236313431303231363533e78988e69d8331333335316536针半径R<5>:")) nil)
(setq R 5.0)
)
(setq p1 (mapcar '+ p0 (list 0 (* R 0.04128)))
p2 (polar p0 (* 292.1622222 (/ pi 180.0)) R)
p3 (mapcar '+ p0 (list 0 R))
p4 (polar p0 (* 247.8377778 (/ pi 180.0)) R)
p5 (mapcar '+ p0 (list (* -0.3805 (/ R 5.0)) (+ R 1.0)))
)
(setvar "osmode" 0)
(command "_circle" p0 R)
(command "_pline" p1 p2 p3 p4 "c")
(command "_hatch" "SOLID" (entlast) "")
(command "_text" p5 (* 1.6667 (/ R 5.0)) 0 "N")
)
(command "_undo" "e")
(setvar "osmode" os) (setvar "cmdecho" 1)
(princ)
)