花括号的lisp例程
我希望有人能帮我写一个lisp来画一个花括号},它将从起点延伸到终点,作为一种包含与一个标签相关的所有文本的方式。这有意义吗??这类似于express tools特征线的工作方式,但不是将圆弧放置在起点和终点的中点。。我前一段时间看到了一些代码,但再也找不到了?首先,我感谢你的帮助。。 旁注:我是作为一个动态块来做的,效果很好,但老板想用一种特定的方式来做 可以用vb或vb代替lisp。网 我不明白为什么不?我会再检查一遍,不过看看你有什么就好了。无论如何,我正在努力让vb变得更好。。 你好这是一个快捷方式。
(defun c:curly (/ p1 p2 a0 a1 a2 d)
(and
(setq p1 (getpoint "\nFirst point: "))
(setq p2 (getpoint p1 "\nSecond point: "))
(setq a0 (angle p1 p2)
a1 (- a0 (/ pi 12.))
a2 (+ a0 pi (/ pi 12.))
d(/ (/ (/ (distance p1 p2) 2.) (cos (/ pi 12.))) 2.)
)
(entmake
(list
'(0 . "LWPOLYLINE")
'(100 . "AcDbEntity")
'(100 . "AcDbPolyline")
'(90 . 5)
'(70 . 0)
(cons 10 p1)
'(42 . 0.6)
(cons 10 (polar p1 a1 d))
'(42 . -0.6)
(cons 10 (polar p1 a1 (* 2. d)))
'(42 . -0.6)
(cons 10 (polar p2 a2 d))
'(42 . 0.6)
(cons 10 p2)
)
)
)
(princ)
)
别笑,这是我的老歌
(defun my_error_f(msg)
(setq *error* olderr_f)
(if svfrad
(setvar "filletrad" svfrad))
(if svosmode
(setvar "osmode" svosmode))
(setvar "cmdecho" 1)
(print (strcat "error:" msg))
(prin1)
)
(defun C:CBR (/ *error* ang cp1 cp2 cpt ep2 ept
lp my_error_f olderr_f r resp rf
sp1 spt svfrad svosmode upt)
(setq svosmode (getvar "osmode"))
(setvar "osmode" 0)
(setq svfrad (getvar "filletrad"))
(setq olderr_f *error*
*error* my_error_f)
(setvar "cmdecho" 0)
(command "_ortho" "_on")
(setq r 4.0 rf
(* 1.125 r)
)
(initget 1 "Left Right")
(setq resp (getkword "\nChoose a braket position : "))
(setq spt (getpoint "\nSpecify upper point : ")
ept (getpoint spt "\nSpecify lower point : ")
lp (distance spt ept)
)
(if
(eq resp "Left")
(progn
(setq sp1 (polar spt pi rf))
(setq ep2 (polar ept pirf))
(setq cpt (polar sp1 (* pi 1.5) ( / lp 2.0))
upt (polar cpt pi rf))
(setq cp1 (polar cpt (/ pi 2) ( / rf 2.0)))
(setq cp2 (polar cpt (* pi 1.5) ( / rf 2.0)))
)
(progn
(setq sp1 (polar spt 0 rf))
(setq ep2 (polar ept 0rf))
(setq cpt (polar sp1 (* pi 1.5) ( / lp 2.0))
upt (polar cpt 0 rf))
(setq cp1 (polar cpt (/ pi 2) ( / rf 2.0)))
(setq cp2 (polar cpt (* pi 1.5) ( / rf 2.0)))
)
)
(command "_.osnap" "_none" "")
(command "_.pline")(mapcar 'command (list spt sp1 cp1 upt cp2 ep2 ept)) (command "")
(setvar "filletrad" r)
(command "_.fillet" "_P" "_L")
(princ)
)
~'J'~ fixo和gile。。。非常感谢你!! 一个更好的,在C中#
已将DLL附加到netload。
using System;
using System.Text;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Geometry;
using Autodesk.AutoCAD.Runtime;
namespace CurlyJigSample
{
public class Command
{
class CurlyJig : EntityJig
{
Polyline m_pline;
Point3d m_dragPt;
Point2d p0;
Vector2d xDir = new Vector2d(1.0, 0.0);
public CurlyJig(Polyline pline, Point3d dragPt, Point2d pt)
: base(pline)
{
m_pline = pline;
m_dragPt = dragPt;
p0 = pt;
}
protected override bool Update()
{
Point2d p4 = new Point2d(m_dragPt.X, m_dragPt.Y);
double d = (p0.GetDistanceTo(p4) / 2.0) / (Math.Cos(Math.PI / 12.0));
Vector2d vec = p0.GetVectorTo(p4);
double a0 = p4.Y < p0.Y ?
(Math.PI * 2.0) - xDir.GetAngleTo(vec) :
xDir.GetAngleTo(vec);
m_pline.SetPointAt(1, Polar(p0, a0 - (Math.PI / 12.0), d / 2.0));
m_pline.SetPointAt(2, Polar(p0, a0 - (Math.PI / 12.0), d));
m_pline.SetPointAt(3, Polar(p4, a0 + Math.PI + (Math.PI / 12.0), d / 2.0));
m_pline.SetPointAt(4, p4);
return true;
}
protected override SamplerStatus Sampler(JigPrompts prompts)
{
JigPromptPointOptions jppo = new JigPromptPointOptions("\nSpecify the second point: ");
jppo.UserInputControls = (UserInputControls.Accept3dCoordinates | UserInputControls.GovernedByOrthoMode);
PromptPointResult ppr = prompts.AcquirePoint(jppo);
if (ppr.Status == PromptStatus.OK)
{
if (ppr.Value.IsEqualTo(m_dragPt))
return SamplerStatus.NoChange;
else
{
m_dragPt = ppr.Value;
return SamplerStatus.OK;
}
}
return SamplerStatus.Cancel;
}
}
private static Point2d Polar(Point2d org, double angle, double distance)
{
return new Point2d(org.X + (distance * Math.Cos(angle)), org.Y + (distance * Math.Sin(angle)));
}
public void CURLY()
{
Document doc = Application.DocumentManager.MdiActiveDocument;
Database db = doc.Database;
Editor ed = doc.Editor;
PromptPointResult ppr = ed.GetPoint("\nSpecify the first point: ");
if (ppr.Status == PromptStatus.OK)
{
using (Transaction tr = db.TransactionManager.StartTransaction())
{
Point3d picked = ppr.Value.TransformBy(ed.CurrentUserCoordinateSystem);
Point2d pt = new Point2d(picked.X, picked.Y);
Polyline pline = new Polyline(5);
pline.AddVertexAt(0, pt, 0.6, 0.0, 0.0);
pline.AddVertexAt(1, pt, -0.6, 0.0, 0.0);
pline.AddVertexAt(2, pt, -0.6, 0.0, 0.0);
pline.AddVertexAt(3, pt, 0.6, 0.0, 0.0);
pline.AddVertexAt(4, pt, 0.0, 0.0, 0.0);
CurlyJig jig = new CurlyJig(pline, picked, pt);
PromptResult pr = ed.Drag(jig);
if (pr.Status == PromptStatus.OK)
{
BlockTableRecord btr = (BlockTableRecord)tr.GetObject(db.CurrentSpaceId, OpenMode.ForWrite);
btr.AppendEntity(pline);
tr.AddNewlyCreatedDBObject(pline, true);
}
tr.Commit();
}
}
}
}
}
卷曲夹具。拉链 在我这边效果很好
谢谢
~'J'~ 救命啊!
我以前有一个漂亮的brace命令,它会提示用户三件事
1、起点
2、终点
3、圆角半径
然后,它将绘制一个在两端和中间圆角的直线支架
两端将向右卷曲90度,中间端将向左卷曲,形成经典的大括号{
中间的线将保持笔直。
由于某种原因,它在2011年停止了工作
(DEFUN C:BRAC()
(INITGET 1)(SETQ A(GETPOINT“\n起始点:”)
(INITGET 1)(SETQ B(GETPOINT A“\n终点:”)
(SETQ C(/(距离A B)2))
(SETQ D(GETDIST(STRCAT“\n填充半径:”))
(IF(NULL D)(SETQ D(+0.01(GETVAR“FILLETRAD”)))(SETQ D(+0.01 D)))
(SETVAR“FILLETRAD”(-D 0.01))
(SETQ E(角度B A))
(SETQ F(+1.570796 E))
(命令“PLINE”B(极轴B F D)
(极坐标(GETVAR“LASTPOINT”)E C)
(极坐标(GETVAR“LASTPOINT”)F D)\r)
(设定值F(-F PI))
(命令“LINE”“@”(POLAR(GETVAR“LASTPOINT”)F D)
(极坐标(GETVAR“LASTPOINT”)E C)
(极坐标(GETVAR“LASTPOINT”)F D)\r)
(命令“FILLET”“P”“@”)
(命令“FILLET”“P”B)
)
提前感谢
markhamilton5@att.net
页:
[1]
2