Chuyển đến nội dung
Diễn đàn CADViet

cuongtk2

Thành viên
  • Số lượng nội dung

    422
  • Đã tham gia

  • Lần ghé thăm cuối

  • Ngày trúng

    34

Bài đăng được đăng bởi cuongtk2


  1. Cái này đâu phải trùng nhau, trùng là phải 2 in 1. Nhìn thì thấy 1 mà select ra 2-3 mới bị gọi là trùng chứ.

    Trường hợp này là bên cạnh, mình nghĩ nếu mọi thứ đều màu xanh thì không có lisp nào đủ thông minh để lọc. Mà có thì thời gian viết còn lâu hơn viết lisp vẽ mới hình như trên.


  2. Đây nhé:

     (defun c:lineduoihcn ( / ss)
     (defun velineduoi (ent / ENT LS P1 P2 P3)
      (setq ls (ACET-ENT-GEOMEXTENTS ent)
            p1 (car ls)
            p2 (cadr ls)
            p3 (list (car p2) (cadr p1) (caddr p1))
            )
      (entmake (list (cons 0 "POINT") (cons 10 p1)))
      (entmake (list (cons 0 "POINT") (cons 10 p3)))
      )
      (setq ss (ACET-SS-TO-LIST (ssget '((0 . "LWPOLYLINE")))  )  )
      (foreach ent ss (velineduoi ent))
      )

    • Vote tăng 1

  3. Đây nhé:

    (defun c:xep_point ( / E  e1 P1 P10 SS Y)
      (setq ss (acet-ss-to-list(ssget '((0 . "POINT"))))
            ss (mapcar '(lambda (e) (entget e)) ss)
            e1 (car ss)
            p1 (cdr (assoc 10 e1))
            y (nth 1 p1)
            )
      (foreach e ss
        (progn
          (setq p10 (cdr (assoc 10 e))
                p10 (list (nth 0 p10) y (nth 2 p10))
                )
          (setq e (subst (cons 10 p10) (assoc 10 e) e))
          (entmod e)
          )
        )
      )
     

    • Vote tăng 1

  4. Trong VS, bác chỉ chuột vào chữ "Spline" rồi ấn F12 sẽ ra các overwrite của định nghĩa hàm này, xem qua thì có 7 cách dùng cho Spline

    public Spline(Point3dCollection point, int order, double fitTolerance);
            public Spline(Point3dCollection fitPoints, KnotParameterizationEnum knotParam, int degree, double fitTolerance);
            public Spline(Point3dCollection fitPoints, bool isPeriodic, KnotParameterizationEnum knotParam, int degree, double fitTolerance);
            public Spline(Point3dCollection point, Vector3d startTangent, Vector3d endTangent, int order, double fitTolerance);
            public Spline(Point3dCollection fitPoints, Vector3d startTangent, Vector3d endTangent, KnotParameterizationEnum knotParam, int degree, double fitTolerance);
            public Spline(Point3d center, Vector3d unitNormal, Vector3d majorAxis, double radiusRatio, double startAngle, double endAngle);
            public Spline(int degree, bool rational, bool closed, bool periodic, Point3dCollection controlPoints, DoubleCollection knots, DoubleCollection weights, double controlPointTolerance, double knotTolerance);
            protected internal Spline(IntPtr unmanagedObjPtr, bool autoDelete);


  5. 38 phút trước, Doan Van Ha đã nói:

    Mới nghiên cứu vb.net nên rất gà mờ trong việc tạo 1 hàm để vẽ 1 spline 3D đi qua 1 list points đã biết.

    Bài toán như sau: cho 1 list points đã biết, hãy tạo hàm vẽ spline 3d đi qua các điểm của list points đó. Hoặc 3dpolyline cũng được.

    Bác nào biết giúp cho vài dòng code để ngâm cứu. Thanks!

     

    hàm MakeSplineCV(Point3d[] pts) nhé bác, pts là array, nếu bác dùng list để add pts thì đổi sang bằng pts.ToArray()

     

    /// <summary>
            /// Creates a spline by control points.
            /// </summary>
            /// <param name="points">The control points.</param>
            /// <param name="closed">Whether to close the spline.</param>
            /// <returns>The result.</returns>
            public static Spline SplineCV(Point3d[] points, bool closed = false)
            {
                var controlPoints = new Point3dCollection(points);
                DoubleCollection knots;
                DoubleCollection weights;
                if (!closed)
                {
                    knots = new DoubleCollection(Enumerable.Range(0, points.Length - 2).Select(index => (double)index).ToArray());
                    knots.Insert(0, 0);
                    knots.Insert(0, 0);
                    knots.Insert(0, 0);
                    knots.Add(points.Length - 3);
                    knots.Add(points.Length - 3);
                    knots.Add(points.Length - 3);
                    weights = new DoubleCollection(Enumerable.Repeat(1, points.Length).Select(index => (double)index).ToArray());
                }
                else
                {
                    controlPoints.Add(points[0]);
                    controlPoints.Add(points[1]);
                    controlPoints.Add(points[2]);
                    knots = new DoubleCollection(Enumerable.Range(0, points.Length + 7).Select(index => (double)index).ToArray());
                    weights = new DoubleCollection(Enumerable.Repeat(1, points.Length + 3).Select(index => (double)index).ToArray());
                }

                return new Spline(
                    degree: 3,
                    rational: true,
                    closed: closed,
                    periodic: closed,
                    controlPoints: controlPoints,
                    knots: knots,
                    weights: weights,
                    controlPointTolerance: 0,
                    knotTolerance: 0);
            }

    /// <summary>
            /// Adds an entity to current space.
            /// </summary>
            /// <param name="entity">The entity to add.</param>
            /// <param name="db">The database.</param>
            /// <returns>The objected IDs.</returns>
            public static ObjectId AddToCurrentSpace(this Entity entity, Database db = null)
            {
                db = db ?? HostApplicationServices.WorkingDatabase;
                using (var trans = db.TransactionManager.StartTransaction())
                {
                     var currentSpace = (BlockTableRecord)trans.GetObject(db.CurrentSpaceId, OpenMode.ForWrite, false);
                    var id = currentSpace.AppendEntity(entity);
                    trans.AddNewlyCreatedDBObject(entity, true);
                    trans.Commit();
                    return id;
                }
            }

            /// <summary>
            /// Draws a spline by control points.
            /// </summary>
            /// <param name="points">The control points.</param>
            /// <param name="closed">Whether to close the spline.</param>
            /// <returns>The object ID.</returns>
            public static ObjectId MakeSplineCV(Point3d[] points, bool closed = false)
            {
                return SplineCV(points, closed).AddToCurrentSpace();
            }

    • Vote tăng 1

  6. Vẽ đường thẳng offset theo 3 điểm, ngắn lại 25, offset 50

     

    (DEFUN c:test  ( / A1 A2 P1 P1A P2 P2A P3)
      (DEFUN LM:Clockwise-p  (p1 p2 p3)
        ((LAMBDA (n) (< (CAR (TRANS p2 0 n)) (CAR (TRANS p1 0 n)))) (MAPCAR '- p1 p3))
        )
      (SETQ p1 (GETPOINT "\nDiem dau:")
            p2 (GETPOINT "\nDiem cuoi: " p1)
            p3 (GETPOINT "\nHuong offset" p2)
            a1 (ANGLE p1 p2)
            )
      (IF (LM:Clockwise-p p1 p2 p3)

        (SETQ a2 (+ a1 (* PI 1.5)))
        (SETQ a2 (+ a1 (* PI 0.5)))
        )
      (SETQ p1a (POLAR p1 a2 50)
            p2a (POLAR p2 a2 50)
            p1a (POLAR p1a a1 25)
            p2a (POLAR p2a a1 -25))
      (ENTMAKEX (LIST
                  (CONS 0 "LINE")
                  (CONS 10 p1a)
                  (CONS 11 p2a)
                  )
                )
      )
     

×