AutoCAD中删除封闭多义线区域外(内)的点

在AutoCAD中用多义线绘制一封闭区域,用以下扩展命令将对应的地形数据文件(.dat)中该区域外(稍加修改可变为区域内)的点删除。后续将改进为只对图面点进行处理。

(defun C:zzQydx (/ ptName ptSign ptE ptN ptH ptCount filename1 filename2)
  (princ
    "功能:删除指定区域外的点,保留区域内的点。(C)QinDong 2017.05 qindxyz@139.com\n"
  )
  (setq	filename1
	 (getfiled "提示字符串"
		   "D:\\"
		   "dat"
		   2
	 )
  )
  (if filename1
    (progn
      (setq
	filename2 (strcat (car (splitx filename1 ".dat"))
			  "-区域提取-"
			  (date)
			  "-"
			  (time)
			  ".dat"
		  )
      )
      (setq regionObj (entsel))
      (setq f1 (open filename1 "r"))
      (if (and f1 regionObj)
	(progn
	  (setq f2 (open filename2 "w"))
	  (setq rIndex 0)
	  (setq ptCount 0)
	  (while (setq lineStr (read-line f1))
	    (setq lineStrs (splitX lineStr ","))
	    (setq ptName (cons (nth 0 lineStrs) ptName))
	    ;;将点编号或点名生成表
	    (setq ptE (cons (nth 2 lineStrs) ptE))
	    ;;将E生成表
	    (setq ptN (cons (nth 3 lineStrs) ptN))
	    ;;将N生成表
	    (setq ptH (cons (nth 4 lineStrs) ptH))
	    ;;将H生成表
	    (setq ptSign (cons (itoa rIndex) ptSign))
	    ;;生成记号表
	    (setq rIndex (+ rIndex 1))
	  )
	  (setq ptName (reverse ptName))
	  ;;反序
	  (setq ptSign (reverse ptSign))
	  ;;反序
	  (setq ptE (reverse ptE))
	  ;;反序
	  (setq ptN (reverse ptN))
	  ;;反序
	  (setq ptH (reverse ptH))
	  ;;反序
	  (close f1)
	  ;;表处理
	  (setq rIndex 0)
	  (while (setq tmpPtname (nth rIndex ptName))
	    (setq tmpE (nth rIndex ptE))
	    (setq tmpN (nth rIndex ptN))
	    (setq tmpH (nth rIndex ptH))
	    (setq tmpSign (nth rIndex ptSign))
	    (if	(pt_inorout regionObj (list (atof tmpE) (atof tmpN)))
	      (progn
		(write-line
		  (strcat tmpPtname ",," tmpE "," tmpN "," tmpH)
		  f2
		)
		(setq ptCount (+ 1 ptCount))
	      )
	    )
	    (setq rIndex (+ rIndex 1))
	  )
	  ;;表处理
	  (princ
	    (strcat
	      "共提取"
	      (itoa ptCount)
	      "个点。(C)QinDong 2017.05 qindxyz@139.com"
	    )
	  )
	  ;;(princ "\n")
	  (close f2)
	)
	;;End progn
	(princ
	  "用户取消操作!(C)QinDong 2017.05 qindxyz@139.com"
	)
      )
      ;;end if

    )
    ;; end progn1
    (princ
      "用户取消操作!(C)QinDong 2017.05 qindxyz@139.com"
    )
  )
  ;;end if1
  (princ)
)

;;;功能:字符串按指定分隔符分隔,分隔符可以是字串,用于取文件名,用扩展名作为分隔符
;;;(splitX "C:\\Users\\....25~K1+013.52;EL.2776.73~EL.2804.74).dat" ".dat")
;;;返回:(C:\\Users\\....25~K1+013.52;EL.2776.73~EL.2804.74))
(defun splitX (str delim / LST POS)
  (while (setq pos (vl-string-search delim str))
    (setq lst (append lst (list (substr str 1 pos))))
    (setq str (substr str (+ (+ pos (strlen delim)) 1)))
  )
  (if (> (strlen str) 0)
    (append lst (list str))
    lst
  )
)


(defun pt_inorout (regionObj pt / pt_list e1 pt n i j va va_count)
  (setq	pt_list	(mapcar	'cdr
			(vl-remove-if
			  '(lambda (x) (/= 10 (car x)))
			  (entget (car regionObj))
			)
		)
  )

  (setq	i	 0
	va_count 0
	n	 (length pt_list)
	pt_list	 (append pt_list (list (car pt_list)))
  )
  (repeat n
    (setq va (-	(angle pt (nth i pt_list))
		(angle pt (nth (1+ i) pt_list))
	     )
    )
    (cond ((> va pi) (setq va (- va pi)))
	  ((< va (* -1 pi)) (setq va (+ va pi)))
    )
    (setq va_count (+ va_count va)
	  i	   (1+ i)
    )
  )
  (if (< (abs (- (abs va_count) pi)) 0.000001)
    't
    'nil
  )
)


(defun date ()
  (setq datetime (rtos (getvar "cdate") 2 6))
  (car (splitx datetime "."))
)

(defun time ()
  (setq datetime (rtos (getvar "cdate") 2 6))
  (cadr (splitx datetime "."))
)

注:本程序对于凹凸复杂的区域可能会判断失败。

CAD删除重复线插件是一种常用的CAD软件辅助工具,可以帮助用户自动检测和删除设计的重复线段。在设计制图过程,由于一些复杂的操作或者误操作,可能会产生很多重复的线段,不仅浪费了设计时间和工作空间,还会导致后续设计出现错误。 CAD删除重复线插件的工作原理是通过扫描和比较线段的坐标和属性等信息,判断是否存在相同或非常接近的线段,并进行删除。具体操作步骤通常包括以下几个步骤: 1. 打开CAD删除重复线插件,并在插件界面选择需要进行操作的CAD图纸文件。 2. 选择检测范围,可以是整个图纸或者指定的选区。 3. 设置检测的容忍度,即两个线段之间允许的最大距离误差。 4. 运行插件,插件会自动检测出所有的重复线段并显示在界面上。 5. 确认检测结果是否准确,可以通过可视化的方式进行比对。 6. 根据需要,选择删除所有重复线段或手动选择删除部分重复线段。 7. 最后,保存并关闭CAD图纸文件,重复线段已成功删除CAD删除重复线插件的优势在于它可以大大提高工作效率,节省人工去逐一检查和删除重复线段的时间。同时,插件也能减少人为错误和遗漏,保证设计的准确性和一致性。它适用于各种类型的CAD图纸,包括二维和三维设计。 总而言之,CAD删除重复线插件是一种非常实用的工具,能够快速而准确地删除设计的重复线段,提高工作效率和准确性。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

测量老覃

感谢您的支持!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值