pipefitter72 发表于 2022-7-5 22:16:55

lisp在midp处放置“点”

我们一直在管件的中点手动放置控制点。“点”实际上是一个小CADMEP对象。我们这样做是为了导出到机器人站,以便在现场标记位置。我一直在尝试修改我发现的lisp,以自动放置“点”。我想做的是在图形中放置一个点,并将其复制到所有选定配件的中点。我只是没有掌握我需要做什么得到配件的中点,要么复制或插入“点”。
我已经附上了我试图修改的lisp。有人能给我指出正确的方向吗?
复制粘贴测试。lsp

hanhphuc 发表于 2022-7-5 22:23:36

 
hi pipefitter72高
欢迎来到论坛
 
我假设你的管道是直线物体。。
 

(defun c:Test1 (/ *error* ss s p i e cm es)
(defun *error* (x)
   (if        cm
   (setvar 'cmdecho cm)
   ) ;_ end of if
   (princ "\n*Cancel*")
   ) ;_ end of defun

(if (and (setq ss (ssget))
;;;         (setq ss (osnap (cadr es) "mid"));<---- incorrect due ss not consp
   (setq s (ssget "_:L"))
   (setq p (getpoint "\n Specify base point :"))
   ) ;_ end of and
   
   (progn (setq cm (getvar 'cmdecho))
   (setvar 'cmdecho 0)
   (command "_._copybase" "_non" p s "")
   (repeat (setq i (sslength ss))
   (setq e (entget (ssname ss (setq i (1- i)))))
   
;;;             (foreach pt e
;;;               (if (eq (car pt) 10)
;;;               (command "_.pasteclip" (cdr pt))
;;;               )
;;;             )
   
;;suggest by hanhphuc (for line only)
    (if (eq (cdr (assoc 0 e)) "LINE") ;<--- assume the pipe object is line
       (command        "_.pasteclip"
                (apply 'mapcar
                     (cons ''((a b) (/ (+ a b) 2.)) (mapcar ''((x) (cdr (assoc x e))) '(10 11)))
                     ) ;_ end of apply
                ) ;_ end of command
       ) ;_ end of if
   
   ) ;_ end of repeat
   (setvar 'cmdecho cm)
   ) ;_ end of progn
   ) ;_ end of if
) ;_ end of defun

pipefitter72 发表于 2022-7-5 22:25:37

我明天早上试试。

hanhphuc 发表于 2022-7-5 22:30:10

你能发布一个带有一些样本的dwg吗?请用文本命名,以防代理对象不出现,也可以是一个图像。

pipefitter72 发表于 2022-7-5 22:31:09

在帖子的早些时候,我发布了一个屏幕截图。我在dropbox上贴了两个链接。一个用于2014年dwg,另一个是2007年格式的相同dwg。如果您没有MEP,则可能必须从网站为您的autocad版本安装MEP对象启用程序。
http://knowledge.autodesk.com/support/autocad/learn-explore/caas/CloudHelp/cloudhelp/ENU/123112/files/autocad-object-enablers-html.html

hanhphuc 发表于 2022-7-5 22:34:35

Dumpit结果
 
选择对象:;IMapsComWrap:IMapsComWrap接口
; 属性值:
;   应用(RO)=#
;   面积=0.0
;   CustomData=“GPM-千瓦/步长-百叶窗自由面积=0.0,电机HP=,泵叶轮=,设备标签(全部)=,最大/最小CFM-CFM=,型号#=,电机机架=,PIU风扇CFM-泵头=,制造商=Weldbend,垂直/水平FD-电压/PH=,说明-FD检修门=,L?”
;   Description=“S40 LR 90”
;   文件(RO)=#
;   标高=“CL=10'-8”
;   EndSize=“BE 3,BE 3,”
;   EntityTransparency=“ByLayer”
;   手柄(RO)=“1009A”
;   HasExtensionDictionary(RO)=0
;   超链接(RO)=#
;   ItemNumber=“4”
;   层=“MP-JTFR”
;   长度角=90.0
;   线型=“BYLAYER”
;   线型比例=1.0
;   线宽=-1
;   材料=“ByLayer”
;   注释=“”
;   目标ID(RO)=42
;   目标32(RO)=42
;   ObjectName(RO)=“MapsContainer”
;   所有者ID(RO)=43
;   所有者32(RO)=43
;   PlotStyleName=“ByLayer”
;   点=“端点:19670.488807.071328.00;19665.988802.571328.00;中点:19665.988807.071328.00”
;   章节=“1级”
;   ServiceName=“JTFR Anvil2Thrd150MIxS40”
;   状态=“0:设计”
选择对象:;真彩色=#
;   可见=-1
;   重量=4.8
命令:

pipefitter72 发表于 2022-7-5 22:37:59

转储提供了一些线索“点”是方便的绘制一条线,使用关键字,看看它适合确保捕捉关闭,缩放相同的对象2倍,看看线的长度是两倍。比较两个旋转90度的物体,看“长度角”是否变化。如果你把物体看作一个块,那么就有可能计算出你需要的中间点。
 
你们有一个叫JTFR Anvil2Thd150Mixs40的方块吗?

hanhphuc 发表于 2022-7-5 22:43:34

谢谢你,BIGAL,虽然我在这个线程中帮不上忙,但我很好奇,如果我们能处理代理对象,它可能会有用
如图所示,点类型为“STR”,可能“…中点:19665.988807.071328.00”是关键?

pipefitter72 发表于 2022-7-5 22:46:11

只是想知道您是否试用过Autodesk point layout软件?
 
http://knowledge.autodesk.com/support/autocad/learn-explore/caas/blog/beyonddesign.typepad.com/posts/2014/06/point-layout-2015-is-here.html
 
我不知道花了多少钱,但他们确实有试用版。我们仍然是卷尺和细绳,所以尺寸是我使用的全部。我看到其他行业在最后几项工作中都使用全站仪。

BIGAL 发表于 2022-7-5 22:49:30

他们一直在研究points软件,我们会看到,
页: [1] 2
查看完整版本: lisp在midp处放置“点”