乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: Oliver

[编程交流] 切割面积

[复制链接]

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:35:47 | 显示全部楼层
 
之后检索该区域…-你用它来划分你的主要区域,然后显示该区域。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:39:40 | 显示全部楼层
有关详细信息,请参阅所附视频。。。
AreaDiv。拉链
回复

使用道具 举报

8

主题

50

帖子

42

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 18:41:28 | 显示全部楼层
 
好啊我们现在想要的是一个目标区域。。f面积为1000平方米。。只需要350平方米。。如视频所示,你可以把它放在任何你想要的地方。。
 
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:46:14 | 显示全部楼层
好的,这更好:
 
  1. ;;;=======================================================
  2. ;;;=======================================================
  3. ;;;
  4. ;;;  FUNCTION: Area Division (AreaDiv.lsp)
  5. ;;;  Calculates the area of a partitioned region.
  6. ;;;
  7. ;;;  AUTHOR
  8. ;;;  Copyright © 2009 Lee McDonnell
  9. ;;;  (contact Lee Mac, CADTutor.net)
  10. ;;;
  11. ;;;  VERSION
  12. ;;;  1.0  ~  23.03.2009
  13. ;;;
  14. ;;;=======================================================
  15. ;;;=======================================================
  16. (defun c:ADiv  (/ *error* vlst ovar doc spc cEnt ParamLst vpt
  17.          cCur cAng clen grlist arpt spt pt1 pt2 iLin
  18.          iArr iLst ptLst plst stpar vpts aPly int1 int2
  19.          2vpts bPly ObjArr Regs aReg bReg tCenLst tCen
  20.          tht Area_text)
  21. (vl-load-com)
  22. (defun *error*  (msg)
  23.    (grtext) (redraw)
  24.    (if    ovar (mapcar 'setvar vlst ovar))
  25.    (if    (not (member msg '("Function cancelled" "quit / exit abort")))
  26.      (princ (strcat "\n<!> Error: " (strcase msg) " <!>")))
  27.    (princ))
  28. (setq    vlst '("CMDECHO" "OSMODE")
  29.    ovar (mapcar 'getvar vlst))
  30. (mapcar 'setvar vlst '(0 0))
  31. (setq    doc (vla-get-ActiveDocument
  32.          (vlax-get-Acad-Object))
  33.    
  34.    spc (if (zerop (vla-get-activespace doc))
  35.          (if (= (vla-get-mspace doc) :vlax-true)
  36.        (vla-get-modelspace doc)
  37.        (vla-get-paperspace doc))
  38.          (vla-get-modelspace doc)))  
  39. (if (and (setq cEnt (entsel "\nSelect Edge for Segregation: "))
  40.       (eq "LWPOLYLINE" (cdadr (entget (car cEnt)))))        
  41.    (progn      
  42.      (setq vpt (osnap (cadr cEnt) "_nea")
  43.        cCur (vlax-ename->vla-object (car cEnt))
  44.        cAng (angle    '(0 0 0) (vlax-curve-getFirstDeriv cCur
  45.                   (vlax-curve-getParamAtPoint cCur vpt))))
  46.      (setq clen (distance (vlax-curve-getPointatParam cCur
  47.                 (fix (vlax-curve-getParamAtPoint cCur vpt)))
  48.               (vlax-curve-getPointatParam cCur
  49.                 (1+ (fix (vlax-curve-getParamAtPoint cCur vpt))))))
  50.      (setq ParamLst (mapcar '(lambda (cVert) (vlax-curve-getParamAtPoint cCur cVert))
  51.                 (mapcar 'cdr (vl-remove-if-not
  52.                        '(lambda (x) (= 10 (car x)))
  53.                        (entget (car cEnt))))))
  54.      
  55.      (grtext -1 "Select Area Segregation...")
  56.      (while (= 5 (car (setq grlist (grread t 1))))
  57.    (redraw)
  58.    (if (= 'list (type (setq arpt (cadr grlist))))
  59.      (progn
  60.        (setq spt (vlax-curve-getClosestPointto cCur arpt)
  61.          pt1 (polar spt cAng (/ clen 3.0))
  62.          pt2 (polar spt cAng (/ clen -3.0)))
  63.        (grdraw pt1 pt2 3))))
  64.      
  65.      (setq iLin (vla-Addline spc (vlax-3D-point spt)
  66.           (vlax-3D-point (polar spt cAng clen)))
  67.        iArr (vlax-variant-value
  68.           (vla-IntersectWith iLin cCur acExtendThisEntity)))
  69.      (if (> (vlax-safearray-get-u-bound iArr 1) 0)
  70.    (progn
  71.      (setq iLst (vlax-safearray->list iArr))
  72.      (while (not (zerop (length iLst)))
  73.        (setq ptLst    (cons (list (car iLst) (cadr iLst) (caddr iLst)) ptLst)
  74.          iLst    (cdddr iLst)))
  75.      (and (vla-delete iLin) (setq iLin nil))
  76.      
  77.      (if (> (length ptlst) 1)
  78.        (progn
  79.          (setq plst  (vl-sort (list (setq int1 (vlax-curve-getParamAtPoint cCur (car ptLst)))
  80.                (setq int2 (vlax-curve-getParamAtPoint cCur (cadr ptLst)))) '<)
  81.            stpar (1+ (fix (car plst))))
  82.          (while (< stpar (cadr plst))
  83.        (setq plst (append plst (list stpar))
  84.              stpar (1+ stpar)))
  85.          (setq plst (vl-sort plst '<)
  86.            vpts (apply 'append
  87.                (mapcar '(lambda (x) (list (car x) (cadr x)))
  88.                    (mapcar '(lambda (p)
  89.                           (vlax-curve-getPointatParam cCur p)) plst))))
  90.          (setq vpts (vlax-make-variant
  91.               (vlax-safearray-fill
  92.                 (vlax-make-safearray vlax-vbdouble (cons 0 (1- (length vpts)))) vpts)))
  93.          (setq aPly (vla-AddLightWeightPolyline spc vpts))
  94.          (vla-put-closed aPly :vlax-true)
  95.          (setq ParamLst (vl-sort
  96.                   (append
  97.                 (vl-remove-if
  98.                   '(lambda (param) (member param plst)) ParamLst)
  99.                 (list int1 int2)) '<)
  100.            2vpts (apply 'append
  101.                 (mapcar '(lambda (x) (list (car x) (cadr x)))
  102.                  (mapcar '(lambda (p)
  103.                         (vlax-curve-getPointatParam cCur p)) ParamLst))))
  104.          (setq 2vpts (vlax-make-variant
  105.                (vlax-safearray-fill
  106.                  (vlax-make-safearray vlax-vbdouble (cons 0 (1- (length 2vpts)))) 2vpts)))
  107.          (setq bPly (vla-AddLightWeightPolyline spc 2vpts))
  108.          (vla-put-Closed bPly :vlax-true)         
  109.          (setq ObjArr (vlax-safearray-fill
  110.                 (vlax-make-safearray vlax-vbobject '(0 . 1)) (list aPly bPly))
  111.            Regs (vlax-safearray->list
  112.               (vlax-variant-value
  113.                 (vla-AddRegion spc ObjArr)))
  114.            aReg (car Regs) bReg (cadr Regs))
  115.          (mapcar 'vla-delete (list aPly bPly))
  116.          (vla-put-color aReg acRed)
  117.          (vla-put-color bReg acGreen)
  118.          (setq tCenLst (mapcar '(lambda (c) (vlax-safearray->list
  119.                        (vlax-variant-value
  120.                          (vla-get-Centroid c)))) (list aReg bReg)))
  121.          (setq tCen (mapcar 'vlax-3d-point
  122.                 (mapcar 'append tCenLst (list (list 0.0) (list 0.0))))
  123.            tht (getvar "TEXTSIZE")
  124.            Area_text (mapcar 'vla-AddText (list spc spc)
  125.                      (mapcar '(lambda (str) (strcat "Area: " (rtos str)))
  126.                          (mapcar 'vla-get-Area (list aReg bReg)))
  127.                      tCen (list tht tht)))
  128.          (mapcar 'vla-put-color Area_text (list acRed acGreen))
  129.          
  130.          (princ (strcat "\n<<<  Red Area: " (rtos (vla-get-Area aReg))
  131.                 ", Green Area: " (rtos (vla-get-Area bReg)) " >>>")))
  132.       
  133.        (princ "\n<!> Selected Segregation not Closed <!>")))
  134.    (princ "\n<!> Area Not Segregated Properly <!>")))
  135.    (princ "\n<!> Nothing Selected or this isn't an LWPLINE <!>"))
  136. (mapcar 'setvar vlst ovar)
  137. (grtext) (redraw)
  138. (princ))
  139. (princ "\n** AreaDiv.lsp Successfully Loaded - type "ADiv" to invoke **") (princ)
回复

使用道具 举报

8

主题

50

帖子

42

银币

初来乍到

Rank: 1

铜币
40
发表于 2022-7-5 18:47:49 | 显示全部楼层
很好。。但我的观点不是我的朋友。。。
我这里有一个惯例。。尝试根据需要进行更新。。
 
  1. (defun ang_between (p10 p11 p20 p21 / px p1 p2 l_pt l_d p ang)
  2.    (setq px (inters p10 p11 p20 p21 nil))
  3.    (cond
  4.        (px
  5.            (if (> (distance px p10) (distance px p11)) (setq p1 p10) (setq p1 p11))
  6.            (if (> (distance px p20) (distance px p21)) (setq p2 p20) (setq p2 p21))
  7.            (setq
  8.                l_pt (list px p1 p2)
  9.                l_d (mapcar 'distance l_pt (append (cdr l_pt) (list (car l_pt))))
  10.                p (/ (apply '+ l_d) 2.0)
  11.                ang (* (atan (sqrt (/ (* (- p (car l_d)) (- p (caddr l_d))) (* p (- p (cadr l_d)))))) 2.0)
  12.            )
  13.        )
  14.        (T
  15.            nil
  16.        )
  17.    )
  18. )
  19. (defun c:cu ( / pt1 pt2 pt3 pt4 S1 ang1 ang2 x1 x2 ptx1 ptx2)
  20. (setq pt1 (getpoint "\nFirst point of baseline: "))
  21. (setq pt2 (getpoint pt1 "\nSecond point of baseline: "))
  22. (setq pt3 (getpoint pt1 "\nPoint of first adjacent side: "))
  23. (setq pt4 (getpoint pt2 "\nPoint of second adjacent side: "))
  24. (setq S1 (getreal "\nWanted area: "))
  25. (setq ang1 (ang_between pt1 pt2 pt1 pt3))
  26. (setq ang2 (ang_between pt2 pt1 pt2 pt4))
  27. (setq ang1 (- pi ang1) ang2 (- pi ang2))
  28. (setq x1
  29.    (*
  30.      (/
  31.        (* (distance pt1 pt2) (sin ang1))
  32.        (sin (+ ang1 ang2))
  33.      )
  34.      (1-
  35.        (+ ;or can be "-"
  36.          (sqrt
  37.            (1+
  38.              (/
  39.                (* 2.0 S1 (sin (+ ang1 ang2)))
  40.                (* (distance pt1 pt2) (distance pt1 pt2) (sin ang1) (sin ang2))
  41.              )
  42.            )
  43.          )
  44.        )
  45.      )
  46.    )
  47. )
  48. (setq x2 (/ (* x1 (sin ang2)) (sin ang1)))
  49. (setq ptx1 (polar pt1 (angle pt1 pt3) x2))
  50. (setq ptx2 (polar pt2 (angle pt2 pt4) x1))
  51. (command "_.line" "_none" ptx1 "_none" ptx2 "")
  52. )

 
干杯
 
奥利弗
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 18:50:31 | 显示全部楼层
 
 
 
你在说什么?
 
我对原来的帖子还不满意吗?
回复

使用道具 举报

0

主题

269

帖子

279

银币

限制会员

铜币
-4
发表于 2022-7-5 18:54:25 | 显示全部楼层
李-
你的习惯对我不起作用,所以我不确定。。。
但是从之前的帖子中,你似乎忽略了用户需要输入一个目标区域——例如,最终的隔离区域需要是“1000平方英尺”——并且例程会计算出在何处放置分界线,以创建具有该区域的分区。
可能需要一些迭代。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 18:58:10 | 显示全部楼层
该问题的解决方案是Civil 3d或其他民用软件(如Civilcad)中地块选项的一部分。
 
你有多种选择来创建地块、平行线、旋转方向、临街距离等,这些AK用于所需区域,如上所述,迭代以找到解决方案。有非常快的使用。
 
因此,lisp程序需要将行答案迭代到一个容差。如果公制单位为1mm。
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-5 19:00:26 | 显示全部楼层
哦,一定是错过了那篇帖子/听不懂。
 
不过我只是想升级我的另一个LISP
 
  1. ;;;=======================================================
  2. ;;;=======================================================
  3. ;;;
  4. ;;;  FUNCTION: Area Division (AreaDiv.lsp)
  5. ;;;  Calculates the area of a partitioned region and
  6. ;;;  displays the result as text at the centroid of the
  7. ;;;  partitioned area.
  8. ;;;
  9. ;;;  AUTHOR
  10. ;;;  Copyright © 2009 Lee McDonnell
  11. ;;;  (contact Lee Mac, CADTutor.net)
  12. ;;;
  13. ;;;  VERSION
  14. ;;;  1.0  ~  23.03.2009
  15. ;;;
  16. ;;;=======================================================
  17. ;;;=======================================================
  18. (defun c:ADiv  (/ *error* vlst ovar doc spc cEnt ParamLst vpt
  19.          cCur cAng clen grlist arpt spt pt1 pt2 iLin
  20.          iArr iLst ptLst plst stpar vpts aPly int1 int2
  21.          2vpts bPly ObjArr Regs aReg bReg tCenLst tCen
  22.          tht Area_text movp CurDel Cenpt Thtov VecCol)
  23. ; ===== Adjustments ======
  24. (setq CurDel T)   ;;  Delete Original Region
  25. (setq Cenpt nil)  ;;  Points at Region Centroids
  26. (setq Thtov 0.0)  ;;  Text Height Override
  27. (setq VecCol 3)   ;;  Partition Tool Colour (0-255)
  28. ; ========================
  29. (vl-load-com)
  30. (defun *error*  (msg)
  31.    (grtext) (redraw)
  32.    (if    ovar (mapcar 'setvar vlst ovar))
  33.    (if    (not (member msg '("Function cancelled" "quit / exit abort")))
  34.      (princ (strcat "\n<!> Error: " (strcase msg) " <!>")))
  35.    (princ))
  36. (setq    vlst '("CMDECHO" "OSMODE" "PDMODE")
  37.    ovar (mapcar 'getvar vlst))
  38. (mapcar 'setvar vlst '(0 0))
  39. (setq    doc (vla-get-ActiveDocument
  40.          (vlax-get-Acad-Object))
  41.    
  42.    spc (if (zerop (vla-get-activespace doc))
  43.          (if (= (vla-get-mspace doc) :vlax-true)
  44.        (vla-get-modelspace doc)
  45.        (vla-get-paperspace doc))
  46.          (vla-get-modelspace doc)))  
  47. (if (and (setq cEnt (entsel "\nSelect Edge for Segregation: "))
  48.       (eq "LWPOLYLINE" (cdadr (entget (car cEnt)))))        
  49.    (progn      
  50.      (setq vpt (osnap (cadr cEnt) "_nea")
  51.        cCur (vlax-ename->vla-object (car cEnt))
  52.        cAng (angle    '(0 0 0) (vlax-curve-getFirstDeriv cCur
  53.                   (vlax-curve-getParamAtPoint cCur vpt)))
  54.        clen (distance (vlax-curve-getPointatParam cCur
  55.                 (fix (vlax-curve-getParamAtPoint cCur vpt)))
  56.               (vlax-curve-getPointatParam cCur
  57.                 (1+ (fix (vlax-curve-getParamAtPoint cCur vpt)))))
  58.        ParamLst (mapcar '(lambda (cVert) (vlax-curve-getParamAtPoint cCur cVert))
  59.                 (mapcar 'cdr (vl-remove-if-not
  60.                        '(lambda (x) (= 10 (car x)))
  61.                        (entget (car cEnt))))))
  62.      (or (and (<= 0 VecCol 255) (setq vcol VecCol)) (setq vcol 3))
  63.      (grtext -1 "Select Area Segregation...")
  64.      (while (= 5 (car (setq grlist (grread t 1))))
  65.    (redraw)
  66.    (if (= 'list (type (setq arpt (cadr grlist))))
  67.      (progn
  68.        (setq spt (vlax-curve-getClosestPointto cCur arpt)
  69.          pt1 (polar spt cAng (/ clen 3.0))
  70.          pt2 (polar spt cAng (/ clen -3.0)))
  71.        (grdraw pt1 pt2 vcol))))
  72.      
  73.      (setq iLin (vla-Addline spc (vlax-3D-point spt)
  74.           (vlax-3D-point (polar spt cAng clen)))
  75.        iArr (vlax-variant-value
  76.           (vla-IntersectWith iLin cCur acExtendThisEntity)))
  77.      (if (> (vlax-safearray-get-u-bound iArr 1) 0)
  78.    (progn
  79.      (setq iLst (vlax-safearray->list iArr))
  80.      (while (not (zerop (length iLst)))
  81.        (setq ptLst    (cons (list (car iLst) (cadr iLst) (caddr iLst)) ptLst)
  82.          iLst    (cdddr iLst)))
  83.      (and (vla-delete iLin) (setq iLin nil))
  84.      
  85.      (if (> (length ptlst) 1)
  86.        (progn
  87.          (setq plst  (vl-sort (list (setq int1 (vlax-curve-getParamAtPoint cCur (car ptLst)))
  88.                (setq int2 (vlax-curve-getParamAtPoint cCur (cadr ptLst)))) '<)
  89.            stpar (1+ (fix (car plst))))
  90.          (while (< stpar (cadr plst))
  91.        (setq plst (append plst (list stpar))
  92.              stpar (1+ stpar)))
  93.          (setq plst (vl-sort plst '<)
  94.            vpts (apply 'append
  95.                (mapcar '(lambda (x) (list (car x) (cadr x)))
  96.                    (mapcar '(lambda (p)
  97.                           (vlax-curve-getPointatParam cCur p)) plst)))
  98.            vpts (vlax-make-variant
  99.               (vlax-safearray-fill
  100.                 (vlax-make-safearray vlax-vbdouble (cons 0 (1- (length vpts)))) vpts))
  101.            aPly (vla-AddLightWeightPolyline spc vpts))
  102.          (vla-put-closed aPly :vlax-true)
  103.          (setq ParamLst (vl-sort
  104.                   (append
  105.                 (vl-remove-if
  106.                   '(lambda (param) (member param plst)) ParamLst)
  107.                 (list int1 int2)) '<)
  108.            2vpts (apply 'append
  109.                 (mapcar '(lambda (x) (list (car x) (cadr x)))
  110.                  (mapcar '(lambda (p)
  111.                         (vlax-curve-getPointatParam cCur p)) ParamLst)))
  112.            2vpts (vlax-make-variant
  113.                (vlax-safearray-fill
  114.                  (vlax-make-safearray vlax-vbdouble (cons 0 (1- (length 2vpts)))) 2vpts))
  115.            bPly (vla-AddLightWeightPolyline spc 2vpts))
  116.          (vla-put-Closed bPly :vlax-true)         
  117.          (setq ObjArr (vlax-safearray-fill
  118.                 (vlax-make-safearray vlax-vbobject '(0 . 1)) (list aPly bPly))
  119.            Regs (vlax-safearray->list
  120.               (vlax-variant-value
  121.                 (vla-AddRegion spc ObjArr)))
  122.            aReg (car Regs) bReg (cadr Regs))
  123.          (mapcar 'vla-delete (list aPly bPly))
  124.          (vla-put-color aReg acRed)
  125.          (vla-put-color bReg acGreen)
  126.          (setq tCenLst (mapcar '(lambda (c) (vlax-safearray->list
  127.                        (vlax-variant-value
  128.                          (vla-get-Centroid c)))) (list aReg bReg))
  129.            tBox (mapcar 'textbox
  130.                 (mapcar '(lambda (str) (list (cons 1 (strcat "Area: " (rtos Str)))))
  131.                     (setq AreaLst (mapcar 'vla-get-Area (list aReg bReg)))))
  132.            movp (mapcar 'vlax-3d-point
  133.                 (mapcar '(lambda (x)
  134.                        (mapcar '* (mapcar '/ (mapcar '+ (car x) (cadr x))
  135.                            '(2.0 2.0 1.0)) '(-1.0 -1.0 1.0))) tBox))
  136.            tCen (mapcar 'vlax-3d-point
  137.                 (mapcar 'append tCenLst (list (list 0.0) (list 0.0)))))
  138.          (or (and (> Thtov 0.0) (setq tht Thtov)) (setq tht (getvar "TEXTSIZE")))
  139.          (setq Area_text (mapcar 'vla-AddText (list spc spc)
  140.                      (mapcar '(lambda (str) (strcat "Area: " (rtos str)))
  141.                          AreaLst)
  142.                      tCen (list tht tht)))
  143.          (mapcar 'vla-put-color Area_text (list acRed acGreen))
  144.          (mapcar 'vla-move Area_text (mapcar 'vlax-3d-point (list '(0 0 0) '(0 0 0))) movp)
  145.          (if Cenpt
  146.        (progn
  147.          (setvar "PDMODE" 3)
  148.          (mapcar 'vla-Addpoint (list spc spc) tCen)))
  149.          (if CurDel (vla-Delete cCur))
  150.          
  151.          (princ (strcat "\n<<<  Red Area: " (rtos (car AreaLst))
  152.                 ", Green Area: " (rtos (cadr AreaLst)) " >>>")))
  153.       
  154.        (princ "\n<!> Selected Segregation not Closed <!>")))
  155.    (princ "\n<!> Area Not Segregated Properly <!>")))
  156.    (princ "\n<!> Nothing Selected or this isn't an LWPLINE <!>"))
  157. (mapcar 'setvar vlst ovar)
  158. (grtext) (redraw)
  159. (princ))
  160. (princ "\n** AreaDiv.lsp Successfully Loaded - type "ADiv" to invoke **") (princ)
回复

使用道具 举报

0

主题

269

帖子

279

银币

限制会员

铜币
-4
发表于 2022-7-5 19:03:50 | 显示全部楼层
李-
 
我也不确定,但在我的第一篇帖子中就说了。
 
对奥利弗来说,你发布的第一个例程不是做了你想做的吗?我让它工作了,但是有点难按照提示。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-12 23:47 , Processed in 0.408652 second(s), 71 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表