乐筑天下

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

[编程交流] Lisp修剪简单图案填充

[复制链接]

2

主题

8

帖子

6

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 16:45:08 | 显示全部楼层 |阅读模式
很好的一天!
 
我在做一个例行公事
 
1.输入矩形大小>>完成
2.插入自定义图案填充>>完成
3.修剪边界,使填充图案成为四边形Polyn(如图所示)>>需要帮助
4.PEDIT>>我能应付
5.挤出>>我能处理
 
我需要第三位的帮助。矩形不同,图案填充也不同。但基本上,它通常是在附加的图像。
 

                               
登录/注册后可看大图

 
有可能吗?非常感谢。
回复

使用道具 举报

5

主题

1334

帖子

1410

银币

限制会员

铜币
-20
发表于 2022-7-5 17:06:47 | 显示全部楼层
首先分解图案填充和关联边界。。。
然后
这里是否解释了这些程序:
http://forums.augi.com/showthread.php?168170-连接处修剪需要Lisp&p=#2
 
创建复杂区域后,分解它并使用JOIN命令将轮廓转换为LWDOLYLINE,或根据需要进行PEDIT(多->连接)选项。。。
 
HTH。,M、 R。
回复

使用道具 举报

2

主题

8

帖子

6

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 17:20:39 | 显示全部楼层
谢谢marko,但我只有autocad 2007。我在看那些应用程序,total boundary pro似乎可以即时处理这些应用程序,但根据他们的网站,autocad 2007不支持这些应用程序。我会详细调查的。
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-5 17:29:19 | 显示全部楼层
我做了一些类似的事情,诚实地说,从来没有真正完成它,但它在任何形状内绘制平行线,而不是图案填充,它没有连接两端,因为它使用extrim来剪裁比形状大的线。
 
  1. ; chevron island creater
  2. ; this use the extrim command to trim shape
  3. ; By Alan H Jan 2012
  4. (defun C:Chevron ( / obj pt1 pt2 pt3 pt4 newpt1 newpt2 )
  5. (setq obj (car (entsel "\nPick pline or circle")))
  6. ; should do a object test here
  7. (setq whatis (cdr (assoc 0 (entget obj))))
  8. (if (= whatis "LWPOLYLINE")
  9. (princ)
  10. (progn
  11. (princ "\You have picked something other than a polyline ")
  12. (princ "\Remake into a pline and do again ")
  13. (setq dummy (getstring "\press any key"))
  14. (exit)
  15. ) ; progn
  16. ) ; if
  17. (alert "draw a line at angle \nmake sure it is full over shape")
  18. (setq pt1 (Getpoint "\nPick Line start point"))
  19. (setq pt2 (Getpoint pt1 "\nPick end point"))
  20. (command "line" pt1 pt2 "") ;
  21. (setq gap1 (getreal "\nenter spacing 1"))
  22. (setq gap2 (getreal "\nenter spacing 2"))
  23. (setq pt3 (getpoint "\nPick 1st cross point"))
  24. (setq pt4 (getpoint pt3 "\nPick 2nd cross point"))
  25. (setq dist (distance pt3 pt4))
  26. (setq x (fix (/ dist (+ gap1 gap2))))
  27. (setq newpt1 (strcat (rtos gap1 2 2) ",0.0"))
  28. (setq newpt2 (strcat (rtos gap2 2 2) ",0.0"))
  29. (repeat x
  30. (command "copy" "L" "" "0,0" newpt1)
  31. (command "copy" "L" "" "0,0" newpt2)
  32. )
  33. (load "Extrim")
  34. (etrim obj pt1)
  35. ) ; end defun
  36. (princ)
回复

使用道具 举报

2

主题

8

帖子

6

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 17:33:26 | 显示全部楼层
下面的代码来自李·麦克。我在另一个网站上看到的。我把它贴在这里可以吗?归功于李·麦克。
 
  1. (defun c:brkAll (/ *error* doc spc ss Objlst Obj iLst Altlst lst)
  2. (vl-load-com)
  3. (defun *error* (msg)
  4.    (if doc (vla-EndUndoMark doc))
  5.    (if ov (mapcar 'setvar vl ov))
  6.    (if (not
  7.          (wcmatch
  8.            (strcase msg) "*BREAK,*EXIT*,*CANCEL*"))
  9.      (princ
  10.        (strcat "\n** Error: " msg " **")))
  11.    (princ))
  12. (setq doc (vla-get-ActiveDocument
  13.              (vlax-get-Acad-Object))
  14.        spc (if (zerop (vla-get-activespace doc))
  15.              (if (= (vla-get-mspace doc) :vlax-true)
  16.                (vla-get-modelspace doc)
  17.                (vla-get-paperspace doc))
  18.              (vla-get-modelspace doc)))
  19. (setq vl '("CMDECHO" "OSMODE")
  20.        ov (mapcar 'getvar vl))
  21. (vla-StartUndoMark doc)
  22. (or *brk$dis* (setq *brk$dis* 5.))
  23. (if (setq ss (ssget '((0 . "*LINE,ARC"))))
  24.    (progn
  25.      (or (not
  26.            (setq tmp
  27.              (getdist
  28.                (strcat "\nSpecify Break Distance <" (rtos *brk$dis* 2 2) "> : "))))
  29.          (setq *brk$dis* tmp))
  30.      (setq Objlst
  31.        (mapcar 'vlax-ename->vla-object
  32.          (vl-remove-if 'listp
  33.            (mapcar 'cadr (ssnamex ss)))))
  34.      (while (setq Obj (car Objlst))
  35.        (foreach iObj (setq Objlst (cdr Objlst))
  36.          (setq iLst
  37.            (cons
  38.              (cons Obj
  39.                (vlax-list->3D-point
  40.                  (vlax-invoke Obj
  41.                    'IntersectWith iObj acExtendNone))) iLst))))
  42.      (mapcar 'setvar vl '(0 0))
  43.      (foreach Int (vl-remove-if-not
  44.                     (function
  45.                       (lambda (x)
  46.                         (vl-consp (cdr x)))) iLst)
  47.        (setq Obj (car Int))
  48.        (foreach Pt (cdr Int)
  49.          (and Altlst (setq lst Altlst))
  50.          (if (not (setq bDis (vlax-curve-getDistatPoint Obj Pt)))
  51.            (while (and (not bDis) lst)
  52.              (setq bDis (vlax-curve-getDistatPoint (setq Obj (car lst)) Pt)
  53.                    lst (cdr lst))))
  54.          (if bDis
  55.            (progn
  56.              (or (setq bPt1 (vlax-curve-getPointatDist Obj
  57.                               (+ bDis (/ *brk$dis* 2.))))
  58.                  (setq bPt1 (vlax-curve-getEndPoint Obj)))
  59.              (or (setq bPt2 (vlax-curve-getPointatDist Obj
  60.                               (- bDis (/ *brk$dis* 2.))))
  61.                  (setq bPt2 (vlax-curve-getStartPoint Obj)))
  62.              (command "_.Break"
  63.                (list (vlax-vla-object->ename Obj) pt) "_F" bPt1 bPt2)
  64.              (setq AltLst (cons (vlax-ename->vla-object (entlast)) AltLst)))))))
  65.    (princ "\n** Nothing Selected **"))
  66. (vla-EndUndoMark doc)
  67. (mapcar 'setvar vl ov)
  68. (princ))
  69.             
  70. (defun vlax-list->3D-point (lst)
  71. (if lst
  72.    (cons (list (car lst) (cadr lst) (caddr lst))
  73.          (vlax-list->3D-point (cdddr lst)))))

 
我所做的是修改了他的代码以打断所有相交的线。
我现在的问题是如何选择具有特定层且长度不超过1英寸或1个单位的所有行。我对autolisp有点陌生。我只在网上查看代码并修改试错,但我不知道如何按层和长度筛选行。
 
(ssget“_X”'((0。“LINE”))
或者这也起作用了
(ssget“_X”'((8。“layername”))但我需要指定关于特定长度的条件。
 
如果有人能帮忙,谢谢
回复

使用道具 举报

2

主题

8

帖子

6

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-5 17:45:52 | 显示全部楼层
谢谢,我会调查的。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-13 12:51 , Processed in 0.515615 second(s), 68 queries .

© 2020-2025 乐筑天下

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